ncmpc-0.27/0000755000076400001440000000000013065552243007550 500000000000000ncmpc-0.27/build/0000755000076400001440000000000013065552243010647 500000000000000ncmpc-0.27/build/compile0000744000076400001440000001624513063456230012150 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ncmpc-0.27/build/config.guess0000744000076400001440000012564413063456230013116 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ncmpc-0.27/build/config.sub0000744000076400001440000010676313063456230012562 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ncmpc-0.27/build/depcomp0000744000076400001440000005601613063456230012147 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ncmpc-0.27/build/install-sh0000744000076400001440000003546313063456230012601 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ncmpc-0.27/build/missing0000744000076400001440000001533013063456230012163 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ncmpc-0.27/doc/0000755000076400001440000000000013065552243010315 500000000000000ncmpc-0.27/doc/doxygen.conf.in0000644000076400001440000021533111674605663013204 00000000000000# Doxyfile 1.7.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = ncmpc # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = @abs_top_srcdir@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. # NO seems saner, because it keeps grouped functions together. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src/ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is adviced to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the # mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called Helvetica to the output # directory and reference it in all dot files that doxygen generates. # When you want a differently looking font you can specify the font name # using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ncmpc-0.27/doc/ncmpc.10000644000076400001440000002356412755302527011434 00000000000000.TH "ncmpc" "1" "June 2005" "" "" .SH "NAME" ncmpc \- curses Music Player Daemon (MPD) client. .SH "SYNOPSIS" .B ncmpc [options] .SH "DESCRIPTION" ncmpc is a client for MPD, the Music Player Daemon. ncmpc connects to a MPD running on a machine on the local network. By default, ncmpc connects to localhost:6600. This can be changed either at compile\-time, or by exporting the MPD_HOST and MPD_PORT environment variables, or by the command line options \-\-host and \-\-port. $ ncmpc \-\-host=musicserver \-\-port=44000 To use a password with mpd, set MPD_HOST to password@host or use the command line option \-\-password. Values from the command line overrides values from the environment. Read more about MPD on http://www.musicpd.org .SH "OPTIONS" .TP .B \-?, \-\-help Display help. .TP .B \-V, \-\-version Display version information and build-time configuration. .TP .B \-c, \-\-colors Enable colors. .TP .B \-C, \-\-no\-colors Disable colors. .TP .B \-m, \-\-mouse Enable mouse. .TP .B \-M, \-\-no\-mouse Disable mouse. .TP .B \-h, \-\-host=HOSTNAME Specify MPD host. .TP .B \-p, \-\-port=PORT Connect to server on PORT. .TP .B \-P, \-\-password=PASSWORD Use password when connecting. .TP .B \-f, \-\-config=FILE Read configuration from file. .TP .B \-k, \-\-key\-file=FILE Read key bindings from FILE. .TP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .SH "CONFIGURATION" When ncmpc starts it tries to read the user's configuration file, ~/.ncmpc/config. If no user configuration file is found then ncmpc tries to load the global settings from $SYSCONFDIR/ncmpc/config (the actual path is displayed in the output of the --version option). An example configuration file (config.sample) should be provided with ncmpc. .SS Connection .TP .B host = HOST Connect to mpd running on the specified host. .TP .B port = PORT Connect to mpd on the specified port. .TP .B password = PASSWORD Connect to mpd using the specified password. .TP .B timeout = TIMEOUT Attempt to reconnect to mpd if a response to a command is not received within TIMEOUT seconds. Specifying a value in the configuration file overrides the "MPD_TIMEOUT" environment variable. If no timeout is specified in the configuration file or in the environment, the default is 5 seconds. .SS Interface .TP .B enable\-mouse = yes|no Enable mouse support (if enabled at compile time). .TP .B screen\-list = SCREEN1 SCREEN2... A list of screens to cycle through when using the previous/next screen commands. Valid choices, if enabled at compile time, are playlist, browse, artist, help, search, song, keydef, lyrics, outputs, and chat. .TP .B search\-mode = MODE Default search mode for the search screen. MODE must be one of title, artist, album, filename, and artist+title, or an interger index (0 for title, 1 for artist etc.). .TP .B auto\-center = yes|no Enable/disable auto center mode. When auto center mode is enabled ncmpc centers the current track in the playlist window. .TP .B scroll-offset = NUM Keep at least NUM lines above and below the cursor on list windows, if possible. .TP .B find\-show\-last = yes|no Show the most recent query instead of a blank line for a find. .TP .B find\-wrap = yes|no Wrapped find mode. .TP .B wrap\-around = yes|no Wrapped cursor movement. .TP .B bell\-on\-wrap = yes|no Ring bell when find wraps around. .TP .B audible\-bell = yes|no Sound audible bell on alerts. .TP .B visible\-bell = yes|no Visible bell on alerts. .TP .B crossfade\-time = CROSSFADE TIME Default crossfade time in seconds. .TP .B seek\-time = NUM Seek forward/backward by NUM seconds. .TP .B lyrics\-timeout = NUM Quits downloading lyrics of a song after the timeout of NUM seconds is reached, if NUM is greater than zero. .TP .B jump\-prefix\-only = yes|no When using the jump command, search for the prefix of an entry. That means typing "m" will start to the first entry which begins with "m". .TP .B lyrics\-autosave = yes|no Automatically save lyrics after receiving them. .TP .B lyrics\-show\-plugin = yes|no Show the name of the plugin used to receive lyrics on the lyrics screen. .TP .B text\-editor = EDITOR The text editor used for editing lyrics. .TP .B text\-editor\-ask = yes|no Ask before starting an editor. .TP .B chat\-prefix = PREFIX Prefix messages send with the chat screen with PREFIX. By default they are prefixed with the current user name enclosed by \fB<\fR and \fB>\fR and a space (i.e. " "). .TP .B second-column = yes|no Display song length in a second column. .SS Display .TP .B welcome\-screen\-list = yes|no Show a list of the screens in the top line on startup. .TP .B wide\-cursor = yes|no Make the cursor as wide as the screen. .TP .B hardware\-cursor = yes|no Use the terminal's hardware cursor instead of inverse colors. .TP .B hide\-cursor = NUM Hide the playlist cursor after NUM seconds of inactivity. .TP .B scroll = yes|no Scroll the title if it is too long for the screen. .TP .B scroll\-sep = STRING the separator to show at the end of the scrolling title. .TP .B list\-format = SONG FORMAT The format used to display songs in the main window. .TP .B search\-format = SONG FORMAT The format used to display songs in the search window. Default is to use list\-format. .TP .B status\-format = SONG FORMAT The format used to display songs on the status line. .TP .B status\-message\-time = TIME The time, in seconds, for which status messages will be displayed. .TP .B display\-time = yes|no Display the time in the status bar when idle. .TP .B timedisplay-type = elapsed/remaining Sets whether to display remaining or elapsed time in the status window. Default is elapsed. .TP .B visible\-bitrate = yes|no Show the bitrate in the status bar when playing a stream. .B .TP .B set\-xterm\-title = yes|no Change the XTerm title (ncmpc will not restore the title). .TP .B xterm\-title\-format = SONG FORMAT The format used to for the xterm title when ncmpc is playing. .SS Colors .TP .B enable\-colors = yes|no Enable/disable colors. .TP .B color background = COLOR Set the background color. If the background color is assigned to the keyword \fBnone\fR, ncmpc will not change the background color. Standard colors are: black, red, green, yellow, blue, magenta, cyan and white. Terminal specific colors can also be given as integers. .TP .B color title = COLOR[,ATTRIBUTE]... Set the text color and attributes for the title row. Text colors are the same as for the background. Valid attributes are: standout, underline, reverse, blink, dim, and bold. .TP .B color title\-bold = COLOR[,ATTRIBUTE]... Set the text color for the title row (the bold part). .TP .B color line = COLOR Set the color of the line on the second row. .TP .B color line\-flags = COLOR[,ATTRIBUTE]... Set the text color used to indicate mpd flags on the second row. .TP .B color list = COLOR[,ATTRIBUTE]... Set the text color in the main area of ncmpc. .TP .B color list\-bold = COLOR[,ATTRIBUTE]... Set the bold text color in the main area of ncmpc. .TP .B color browser-directory = COLOR[,ATTRIBUTE]... Set the text color used to display directories in the browser window. .TP .B color browser-playlist = COLOR[,ATTRIBUTE]... Set the text color used to display playlists in the browser window. .TP .B color progressbar = COLOR[,ATTRIBUTE]... Set the color of the progress indicator. .TP .B color status\-state = COLOR[,ATTRIBUTE]... Set the text color used to display mpd status in the status window. .TP .B color status\-song = COLOR[,ATTRIBUTE]... Set the text color used to display song names in the status window. .TP .B color status\-time = COLOR[,ATTRIBUTE]... Set the text color used to display time the status window. .TP .B color alert = COLOR[,ATTRIBUTE]... Set the text color used to display alerts in the status window. .TP .B colordef COLOR = R, G, B Redefine any of the base colors. The RGB values must be integer values between 0 and 1000. \fBNote\fR: Only some terminals allow redefinitions of colors! .SH "KEYS" When ncmpc starts it tries to read user-defined key bindings from the ~/.ncmpc/keys file. If no user-defined key bindings are found then ncmpc tries to load the global key bindings from $SYSCONFDIR/ncmpc/keys (the actual path is displayed on the help screen). You can view ncmpc's key bindings by pressing '1' (help) when ncmpc is running. To edit key bindings press 'K' and use the key editor in ncmpc. .SH "SONG FORMAT" Format of song display for status and the list window. The metadata delimiters are: %artist%, %albumartist%, %composer%, %performer%, %title%, %album%, %shortalbum%, %track%, %disc, %genre%, %name%, %time%, %date%, %file%, %shortfile%. The [] operators are used to group output such that if none of the metadata delimiters between '[' and ']' are matched, then none of the characters between '[' and ']' are output; literal text is always output. '&' and '|' are logical operators for AND and OR. '#' is used to escape characters. Some useful examples for format are: "%file%" and "[[%artist% \- ]%title%]|%file%" Another one is: "[%artist%|(artist n/a)] - [%title%|(title n/a)]" .SH "CHAT PROTOCOL" If ncmpc has been compiled with "chat" support, it uses the client-to-client protocol available in MPD 0.17 or higher to communicate with other clients. In order to receive messages it subscribes to the channel with the name "chat", and displays any message sent there as-is. When the user enters a message, it is first with the prefix specified by the \fBchat-prefix\fR option (or the default prefix), and then sent to the "chat" channel for others to read. .SH "BUGS" Report bugs on http://www.musicpd.org/mantis/ .SH "NOTE" Since MPD uses UTF\-8, ncmpc needs to convert characters to the charset used by the local system. If you get character conversion errors when your running ncmpc you probably need to set up your locale. This is done by setting any of the LC_CTYPE, LANG or LC_ALL environment variables (LC_CTYPE only affects character handling). .SH "SEE ALSO" mpc(1), mpd(1), locale(5), locale(7) ncmpc-0.27/doc/config.sample0000644000076400001440000001135613063774516012722 00000000000000## ## Configuration file for ncmpc (~/.ncmpc/config) ## ############## Connection ################### ## Connect to mpd running on a specified host #host = "localhost" ## Connect to mpd on the specified port. #port = 6600 ## Connect to mpd using the specified password. #password = "secret" ## Reconnect after NUM seconds of MPD not responding. #timeout = 5 ############## Interface #################### ## Enable mouse support (if enabled at compile time). #enable-mouse = no ## A list of screens to cycle through when using ## the previous/next screen commands (tab and shift+tab). ## names: playlist browse help artist search song keydef lyrics outputs chat #screen-list = playlist browse ## Default search mode for the search screen. The mode is an ## integer index, with 0 for title, 1 for artist, 2 for album, ## 3 for filename, and 4 for artist+title. #search-mode = 0 ## Auto center (center the playing track in the playlist) #auto-center = no ## Show the most recent query when using find. #find-show-last = no ## Wrapped find mode. #find-wrap = yes ## Wrapped cursor movement. #wrap-around = no ## Ring bell when find wraps around. #bell-on-wrap = yes ## Sound audible bell on alerts. #audible-bell = yes ## Enable visible bell on alerts. #visible-bell = no ## Default crossfade time in seconds. #crossfade-time = 10 ## Seek forward/backward by NUM seconds. #seek-time = 1 ############## Display ###################### ## Show a list of the screens in the top line on startup. #welcome-screen-list = yes ## Make the cursor as wide as the screen. #wide-cursor = yes ## Use the terminal's hardware cursor instead of inverse colors #hardware-cursor = yes ## Hide playlist cursor after x seconds (0 disables this feature). #hide-cursor = 5 ## Scroll the title if it is too long for the screen. #scroll = yes ## The separator to show at the end of the scrolling title. #scroll-sep = " *** " ## list-format ## The format used to display songs in the main window. #list-format = "%name%|[%artist% - ]%title%|%file%" ## The format used to display songs in the search window. #search-format = "%name%|[%artist% - ]%title%|%file%" ## The format used to display songs on the status line. #status-format = "[%artist% - ]%title%|%shortfile%" ## The time, in seconds, for which status messages will be displayed. #status-message-time = 3 ## Sets whether to display remaining or elapsed time in ## the status window. Default is elapsed. #timedisplay-type = elapsed ## Show the bitrate in the status bar when playing a stream. #visible-bitrate = no ## Change the XTerm title (ncmpc will not restore the title). #set-xterm-title = no ## The format used to for the xterm title when ncmpc is playing. #xterm-title-format = "ncmpc: [ %name%|[%artist% - ]%title%|%file%]" ## Automatically save the lyrics after receiving them. #lyrics-autosave = no ## The text editor used for editing lyrics. #text-editor = emacs ## Ask before starting an editor. #text-editor-ask = yes ## The prefix of chat messages #chat-prefix = " " ## Display song length in second column #second-column = yes ############## Colors ####################### ## colors: none, black, red, green, yellow, blue, magenta, cyan, white ## attributes: standout, underline, reverse, blink, dim, bold ## ## Colors can also be given as an integer representing a terminal specific ## color code. The special color, none, represents the terminals default color. ## Enable/disable colors. #enable-colors = no ## Set the background color. #color background = black ## Set the text color for the title row. #color title = yellow ## Set the text color for the title row (the bold part). #color title-bold = yellow,bold ## Set the color of the line on the second row. #color line = white ## Set the text color used to indicate mpd flags on the second row. #color line-flags = white,bold ## Set the text color in the main area of ncmpc. #color list = green ## Set the bold text color in the main area of ncmpc. #color list-bold = green,bold ## Sets the text color of directories in the browser #color browser-directory = yellow ## Sets the text color of playlists in the browser #color browser-playlist = red ## Set the color of the progress indicator. #color progressbar = white ## Set the text color used to display mpd status in the status window. #color status-state = yellow,bold ## Set the text color used to display song names in the status window. #color status-song = yellow ## Set the text color used to display time the status window. #color status-time = red ## Text color used to display alerts in the status window. #color alert = red,bold ## Redefine any of the base colors. ## The RGB values must be an integer value between 0 and 1000. ## Note: Only some terminals allow redefinitions of colors! #colordef yellow = 255, 140, 0 ncmpc-0.27/doc/keys.sample0000644000076400001440000000404311216360077012412 00000000000000## ## Key bindings for ncmpc (~/.ncmpc/keys) ## ## ## Its possible to bind maximum three keys to a command ## Keys can be defined with a character or a decimal/hexadecimal value. ## A command can be disabled by binding it to 0 (key bind quit = 0). ## ## Example - bind the Q key to quit in three different ways: ## (character, decimal [81], hexadecimal [51]) ## ## key quit = 'Q' ## key quit = 81 ## key quit = 0x51 ## ## Quit key quit = 'q', 'Q', 3 ## Move cursor up key up = 259, 'k' ## Move cursor down key down = 258, 'j' ## Home key home = 262, 1 ## End key end = 360, 5 ## Page up key pgup = 339 ## Page down key pgdn = 338 ## Help screen #key screen-help = '1', 265, 'h' ## Playlist screen key screen-playlist = '2', 266 ## Browse screen key screen-browse = '3', 267 ## Play/Enter directory key play = 13 ## Pause key pause = 'P' ## Stop key stop = 's', 263 ## Next track key next = 62 ## Previous track key prev = 60 ## Seek forward key seek-forward = 'f' ## Seek backward key seek-backward = 'b' ## Increase volume key volume-up = 43, 261 ## Decrease volume key volume-down = 45, 260 ## Select/deselect song in playlist key select = 32 ## Delete song from playlist key delete = 330, 'd' ## Shuffle playlist key shuffle = 'Z' ## Clear playlist key clear = 'c' ## Toggle repeat mode key repeat = 'r' ## Toggle random mode key random = 'z' ## Toggle crossfade mode key crossfade = 'x' ## Start a music database update key db-update = 21 ## Save playlist key save = 'S' ## Add url/file to playlist key add = 'a' ## Move item up key move-up = 11 ## Move item down key move-down = 10 ## Update screen key update = 12 ## Toggle find mode key wrap-mode = 'w' ## Toggle auto center mode key autocenter-mode = 'U' ## Next screen key screen-next = 9 ## Previous screen key screen-prev = 353 ## Forward find key find = 47 ## Forward find next key find-next = 'n' ## Backward find key rfind = 63 ## Backward find previous key rfind-next = 'p' ## Jump to key jump = '.' ## Key configuration screen #key screen-keyedit = 'K' ncmpc-0.27/doc/ncmpc.lirc0000644000076400001440000000447011674605663012226 00000000000000# # Sample .lirc file for usage with irpty and ncmpc # # $ irpty ./ncmpc.lirc -- ncmpc # Begin remote = * button = CD_VOL- prog = irpty repeat = 1 config = - end begin remote = * button = CD_VOL+ prog = irpty repeat = 1 config = + end Begin remote = * button = CD_SEEK_BACK prog = irpty repeat = 1 config = b end begin remote = * button = CD_SEEL_FORW prog = irpty repeat = 1 config = f end begin remote = * button = CD_STOP prog = irpty repeat = 0 config = s end begin remote = * button = CD_NEXT prog = irpty repeat = 0 config = > end begin remote = * button = CD_PREV prog = irpty repeat = 0 config = < end begin remote = * button = CD_PAUSE prog = irpty repeat = 0 config = P end begin remote = * button = CD_PLAY prog = irpty repeat = 0 config = \r end # Switch screen (Playlist/Browse) begin remote = * button = CD_EJECT prog = irpty repeat = 0 config = \x9 end # move: Up begin remote = * button = CD_2 prog = irpty repeat = 2 config = k end # move: Down begin remote = * button = CD_8 prog = irpty repeat = 2 config = j end # move: Center (update) begin remote = * button = CD_5 prog = irpty repeat = 0 config = u end # Auto center begin remote = * button = CD_CHECK prog = irpty config = U end # move: home begin remote = * button = CD_1 prog = irpty repeat = 0 config = \A end # move: end begin remote = * button = CD_7 prog = irpty repeat = 0 config = \E end # move: PgUp begin remote = * button = CD_3 prog = irpty repeat = 0 config = A end # move: PgDn begin remote = * button = CD_9 prog = irpty repeat = 0 config = B end # Add/Select song begin remote = * button = CD_INDEX_NEXT prog = irpty repeat = 0 config = \x20 end # Delete song begin remote = * button = CD_INDEX_PREV prog = irpty repeat = 0 config = d end # Clear playlist begin remote = * button = CD_CLEAR prog = irpty repeat = 0 config = c end # Random begin remote = * button = CD_RANDOM prog = irpty repeat = 0 config = z end # repeat begin remote = * button = CD_REPEAT prog = irpty repeat = 0 config = r end # crossfade begin remote = * button = CD_TIME_FADE prog = irpty repeat = 0 config = x end begin remote = * button = CD_TIME prog = irpty repeat = 0 config = t end ncmpc-0.27/doc/doxygen.conf0000644000076400001440000021533213063773007012570 00000000000000# Doxyfile 1.7.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = ncmpc # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = 0.27 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = /home/max/git/ncmpc # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. # NO seems saner, because it keeps grouped functions together. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = /home/max/git/ncmpc/src/ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is adviced to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the stylesheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the # mathjax.org site, so you can quickly see the result without installing # MathJax, but it is strongly recommended to install a local copy of MathJax # before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will write a font called Helvetica to the output # directory and reference it in all dot files that doxygen generates. # When you want a differently looking font you can specify the font name # using DOT_FONTNAME. You need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES ncmpc-0.27/lyrics/0000755000076400001440000000000013065552243011055 500000000000000ncmpc-0.27/lyrics/10-hd.sh0000744000076400001440000000167513062774214012155 00000000000000#!/bin/sh -e # # (c) 2004-2017 The Music Player Daemon Project # http://www.musicpd.org/ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # Load lyrics from the user's home directory # FILENAME=~/.lyrics/"$1 - $2".txt if [ -e "$FILENAME" ] ; then exec cat "$FILENAME" else exit 69 fi ncmpc-0.27/lyrics/20-lyricwiki.rb0000744000076400001440000000334213062774214013553 00000000000000#!/usr/bin/env ruby # # (c) 2004-2017 The Music Player Daemon Project # http://www.musicpd.org/ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # Load lyrics from lyrics.wikia.com, formerly lyricwiki.org # require 'uri' require 'open-uri' require 'cgi' # We need this because URI.escape doesn't escape ampersands. def escape(string) new = URI.escape(string) new.gsub(/&/, "%26") end url = "http://lyrics.wikia.com/api.php?action=lyrics&fmt=xml&func=getSong" + \ "&artist=#{escape(ARGV[0])}&song=#{escape(ARGV[1])}" response = open(URI.parse(url)).read if not response =~ /\s*(.*?)\s*<\/url>/im $stderr.puts "No URL in response!" exit(1) end url = $1 exit(69) if url =~ /action=edit$/ response = open(URI.parse(url)).read if not response =~ /
\s*(.*?)\s*
/im $stderr.puts "No
in lyrics page!\n" exit(1) end lyrics = $1.gsub(/
/, "\n") if lyrics.respond_to?(:force_encoding) puts CGI::unescapeHTML(lyrics.force_encoding(Encoding::UTF_8)) else $KCODE = 'U' puts CGI::unescapeHTML(lyrics) end ncmpc-0.27/m4/0000755000076400001440000000000013065552243010070 500000000000000ncmpc-0.27/m4/ax_append_compile_flags.m40000644000076400001440000000565413063455747015120 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # For every FLAG1, FLAG2 it is checked whether the compiler works with the # flag. If it does, the flag is added FLAGS-VARIABLE # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. During the check the flag is always added to the # current language's flags. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: This macro depends on the AX_APPEND_FLAG and # AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with # AX_APPEND_LINK_FLAGS. # # LICENSE # # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_APPEND_COMPILE_FLAGS], [AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) for flag in $1; do AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4]) done ])dnl AX_APPEND_COMPILE_FLAGS ncmpc-0.27/m4/ax_append_flag.m40000644000076400001440000000533113063455747013215 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_flag.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) # # DESCRIPTION # # FLAG is appended to the FLAGS-VARIABLE shell variable, with a space # added in between. # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains # FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly # FLAG. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 6 AC_DEFUN([AX_APPEND_FLAG], [dnl AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) AS_VAR_SET_IF(FLAGS,[ AS_CASE([" AS_VAR_GET(FLAGS) "], [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], [ AS_VAR_APPEND(FLAGS,[" $1"]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) ], [ AS_VAR_SET(FLAGS,[$1]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) AS_VAR_POPDEF([FLAGS])dnl ])dnl AX_APPEND_FLAG ncmpc-0.27/m4/ax_append_link_flags.m40000644000076400001440000000557013063455747014422 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # For every FLAG1, FLAG2 it is checked whether the linker works with the # flag. If it does, the flag is added FLAGS-VARIABLE # # If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is # used. During the check the flag is always added to the linker's flags. # # If EXTRA-FLAGS is defined, it is added to the linker's default flags # when the check is done. The check is thus made with the flags: "LDFLAGS # EXTRA-FLAGS FLAG". This can for example be used to force the linker to # issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG. # Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS. # # LICENSE # # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_APPEND_LINK_FLAGS], [AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) for flag in $1; do AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3], [$4]) done ])dnl AX_APPEND_LINK_FLAGS ncmpc-0.27/m4/ax_check_compile_flag.m40000644000076400001440000000640213063455747014533 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 4 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS ncmpc-0.27/m4/ax_check_link_flag.m40000644000076400001440000000615513063455747014045 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the linker or gives an error. # (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the linker's default flags # when the check is done. The check is thus made with the flags: "LDFLAGS # EXTRA-FLAGS FLAG". This can for example be used to force the linker to # issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_LINK_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 4 AC_DEFUN([AX_CHECK_LINK_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [ ax_check_save_flags=$LDFLAGS LDFLAGS="$LDFLAGS $4 $1" AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) LDFLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_LINK_FLAGS ncmpc-0.27/m4/ax_require_defined.m40000644000076400001440000000230113063455747014101 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_require_defined.html # =========================================================================== # # SYNOPSIS # # AX_REQUIRE_DEFINED(MACRO) # # DESCRIPTION # # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have # been defined and thus are available for use. This avoids random issues # where a macro isn't expanded. Instead the configure script emits a # non-fatal: # # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found # # It's like AC_REQUIRE except it doesn't expand the required macro. # # Here's an example: # # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) # # LICENSE # # Copyright (c) 2014 Mike Frysinger # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 1 AC_DEFUN([AX_REQUIRE_DEFINED], [dnl m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) ])dnl AX_REQUIRE_DEFINED ncmpc-0.27/m4/ax_with_curses.m40000644000076400001440000006642313063456132013312 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_with_curses.html # =========================================================================== # # SYNOPSIS # # AX_WITH_CURSES # # DESCRIPTION # # This macro checks whether a SysV or X/Open-compatible Curses library is # present, along with the associated header file. The NcursesW # (wide-character) library is searched for first, followed by Ncurses, # then the system-default plain Curses. The first library found is the # one returned. Finding libraries will first be attempted by using # pkg-config, and should the pkg-config files not be available, will # fallback to combinations of known flags itself. # # The following options are understood: --with-ncursesw, --with-ncurses, # --without-ncursesw, --without-ncurses. The "--with" options force the # macro to use that particular library, terminating with an error if not # found. The "--without" options simply skip the check for that library. # The effect on the search pattern is: # # (no options) - NcursesW, Ncurses, Curses # --with-ncurses --with-ncursesw - NcursesW only [*] # --without-ncurses --with-ncursesw - NcursesW only [*] # --with-ncursesw - NcursesW only [*] # --with-ncurses --without-ncursesw - Ncurses only [*] # --with-ncurses - NcursesW, Ncurses [**] # --without-ncurses --without-ncursesw - Curses only # --without-ncursesw - Ncurses, Curses # --without-ncurses - NcursesW, Curses # # [*] If the library is not found, abort the configure script. # # [**] If the second library (Ncurses) is not found, abort configure. # # The following preprocessor symbols may be defined by this macro if the # appropriate conditions are met: # # HAVE_CURSES - if any SysV or X/Open Curses library found # HAVE_CURSES_ENHANCED - if library supports X/Open Enhanced functions # HAVE_CURSES_COLOR - if library supports color (enhanced functions) # HAVE_CURSES_OBSOLETE - if library supports certain obsolete features # HAVE_NCURSESW - if NcursesW (wide char) library is to be used # HAVE_NCURSES - if the Ncurses library is to be used # # HAVE_CURSES_H - if is present and should be used # HAVE_NCURSESW_H - if should be used # HAVE_NCURSES_H - if should be used # HAVE_NCURSESW_CURSES_H - if should be used # HAVE_NCURSES_CURSES_H - if should be used # # (These preprocessor symbols are discussed later in this document.) # # The following output variables are defined by this macro; they are # precious and may be overridden on the ./configure command line: # # CURSES_LIBS - library to add to xxx_LDADD # CURSES_CFLAGS - include paths to add to xxx_CPPFLAGS # # In previous versions of this macro, the flags CURSES_LIB and # CURSES_CPPFLAGS were defined. These have been renamed, in keeping with # AX_WITH_CURSES's close bigger brother, PKG_CHECK_MODULES, which should # eventually supersede the use of AX_WITH_CURSES. Neither the library # listed in CURSES_LIBS, nor the flags in CURSES_CFLAGS are added to LIBS, # respectively CPPFLAGS, by default. You need to add both to the # appropriate xxx_LDADD/xxx_CPPFLAGS line in your Makefile.am. For # example: # # prog_LDADD = @CURSES_LIBS@ # prog_CPPFLAGS = @CURSES_CFLAGS@ # # If CURSES_LIBS is set on the configure command line (such as by running # "./configure CURSES_LIBS=-lmycurses"), then the only header searched for # is . If the user needs to specify an alternative path for a # library (such as for a non-standard NcurseW), the user should use the # LDFLAGS variable. # # The following shell variables may be defined by this macro: # # ax_cv_curses - set to "yes" if any Curses library found # ax_cv_curses_enhanced - set to "yes" if Enhanced functions present # ax_cv_curses_color - set to "yes" if color functions present # ax_cv_curses_obsolete - set to "yes" if obsolete features present # # ax_cv_ncursesw - set to "yes" if NcursesW library found # ax_cv_ncurses - set to "yes" if Ncurses library found # ax_cv_plaincurses - set to "yes" if plain Curses library found # ax_cv_curses_which - set to "ncursesw", "ncurses", "plaincurses" or "no" # # These variables can be used in your configure.ac to determine the level # of support you need from the Curses library. For example, if you must # have either Ncurses or NcursesW, you could include: # # AX_WITH_CURSES # if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then # AC_MSG_ERROR([requires either NcursesW or Ncurses library]) # fi # # If any Curses library will do (but one must be present and must support # color), you could use: # # AX_WITH_CURSES # if test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes; then # AC_MSG_ERROR([requires an X/Open-compatible Curses library with color]) # fi # # Certain preprocessor symbols and shell variables defined by this macro # can be used to determine various features of the Curses library. In # particular, HAVE_CURSES and ax_cv_curses are defined if the Curses # library found conforms to the traditional SysV and/or X/Open Base Curses # definition. Any working Curses library conforms to this level. # # HAVE_CURSES_ENHANCED and ax_cv_curses_enhanced are defined if the # library supports the X/Open Enhanced Curses definition. In particular, # the wide-character types attr_t, cchar_t and wint_t, the functions # wattr_set() and wget_wch() and the macros WA_NORMAL and _XOPEN_CURSES # are checked. The Ncurses library does NOT conform to this definition, # although NcursesW does. # # HAVE_CURSES_COLOR and ax_cv_curses_color are defined if the library # supports color functions and macros such as COLOR_PAIR, A_COLOR, # COLOR_WHITE, COLOR_RED and init_pair(). These are NOT part of the # X/Open Base Curses definition, but are part of the Enhanced set of # functions. The Ncurses library DOES support these functions, as does # NcursesW. # # HAVE_CURSES_OBSOLETE and ax_cv_curses_obsolete are defined if the # library supports certain features present in SysV and BSD Curses but not # defined in the X/Open definition. In particular, the functions # getattrs(), getcurx() and getmaxx() are checked. # # To use the HAVE_xxx_H preprocessor symbols, insert the following into # your system.h (or equivalent) header file: # # #if defined HAVE_NCURSESW_CURSES_H # # include # #elif defined HAVE_NCURSESW_H # # include # #elif defined HAVE_NCURSES_CURSES_H # # include # #elif defined HAVE_NCURSES_H # # include # #elif defined HAVE_CURSES_H # # include # #else # # error "SysV or X/Open-compatible Curses header file required" # #endif # # For previous users of this macro: you should not need to change anything # in your configure.ac or Makefile.am, as the previous (serial 10) # semantics are still valid. However, you should update your system.h (or # equivalent) header file to the fragment shown above. You are encouraged # also to make use of the extended functionality provided by this version # of AX_WITH_CURSES, as well as in the additional macros # AX_WITH_CURSES_PANEL, AX_WITH_CURSES_MENU and AX_WITH_CURSES_FORM. # # LICENSE # # Copyright (c) 2009 Mark Pulford # Copyright (c) 2009 Damian Pietras # Copyright (c) 2012 Reuben Thomas # Copyright (c) 2011 John Zaitseff # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 17 # internal function to factorize common code that is used by both ncurses # and ncursesw AC_DEFUN([_FIND_CURSES_FLAGS], [ AC_MSG_CHECKING([for $1 via pkg-config]) AX_REQUIRE_DEFINED([PKG_CHECK_EXISTS]) _PKG_CONFIG([_ax_cv_$1_libs], [libs], [$1]) _PKG_CONFIG([_ax_cv_$1_cppflags], [cflags], [$1]) AS_IF([test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"],[ AC_MSG_RESULT([no]) # No suitable .pc file found, have to find flags via fallback AC_CACHE_CHECK([for $1 via fallback], [ax_cv_$1], [ AS_ECHO() pkg_cv__ax_cv_$1_libs="-l$1" pkg_cv__ax_cv_$1_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" AC_MSG_CHECKING([for initscr() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ AC_MSG_RESULT([no]) m4_if( [$1],[ncursesw],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfow"], [$1],[ncurses],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfo"] ) LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ ax_cv_$1=no ]) ]) ],[ ax_cv_$1=no ]) ]) ],[ AC_MSG_RESULT([yes]) # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" ax_cv_$1=yes ]) ]) AU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES]) AC_DEFUN([AX_WITH_CURSES], [ AC_ARG_VAR([CURSES_LIBS], [linker library for Curses, e.g. -lcurses]) AC_ARG_VAR([CURSES_CFLAGS], [preprocessor flags for Curses, e.g. -I/usr/include/ncursesw]) AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses], [force the use of Ncurses or NcursesW])], [], [with_ncurses=check]) AC_ARG_WITH([ncursesw], [AS_HELP_STRING([--without-ncursesw], [do not use NcursesW (wide character support)])], [], [with_ncursesw=check]) ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS AS_IF([test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes], [ax_with_plaincurses=no], [ax_with_plaincurses=check]) ax_cv_curses_which=no # Test for NcursesW AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno], [ _FIND_CURSES_FLAGS([ncursesw]) AS_IF([test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes], [ AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library]) ]) AS_IF([test "x$ax_cv_ncursesw" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncursesw/curses.h], [ax_cv_header_ncursesw_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_curses_h=yes], [ax_cv_header_ncursesw_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncursesw.h], [ax_cv_header_ncursesw_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_h=yes], [ax_cv_header_ncursesw_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h_with_ncursesw], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncurses_h_with_ncursesw=yes], [ax_cv_header_ncurses_h_with_ncursesw=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno], [ AC_MSG_WARN([could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [ _FIND_CURSES_FLAGS([ncurses]) AS_IF([test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes], [ AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library]) ]) AS_IF([test "x$ax_cv_ncurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncurses/curses.h], [ax_cv_header_ncurses_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_curses_h=yes], [ax_cv_header_ncurses_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_h=yes], [ax_cv_header_ncurses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno], [ AC_MSG_WARN([could not find a working ncurses/curses.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) AS_IF([test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno], [ AS_IF([test "x$CURSES_LIBS" != x], [ LIBS="$ax_saved_LIBS $CURSES_LIBS" ], [ LIBS="$ax_saved_LIBS -lcurses" ]) AC_CACHE_CHECK([for Curses library], [ax_cv_plaincurses], [ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ax_cv_plaincurses=yes], [ax_cv_plaincurses=no]) ]) AS_IF([test "x$ax_cv_plaincurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=plaincurses AS_IF([test "x$CURSES_LIBS" = x], [ CURSES_LIBS="-lcurses" ]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) # Check for base conformance (and header file) AC_CACHE_CHECK([for working curses.h], [ax_cv_header_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ]])], [ax_cv_header_curses_h=yes], [ax_cv_header_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xyes], [ AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if is present]) # Check for X/Open Enhanced conformance AC_CACHE_CHECK([for X/Open Enhanced Curses conformance], [ax_cv_plaincurses_enhanced], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include @%:@ifndef _XOPEN_CURSES @%:@error "this Curses library is not enhanced" "this Curses library is not enhanced" @%:@endif ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_plaincurses_enhanced=yes], [ax_cv_plaincurses_enhanced=no]) ]) AS_IF([test "x$ax_cv_plaincurses_enhanced" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for color functions AC_CACHE_CHECK([for Curses color functions], [ax_cv_plaincurses_color], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_plaincurses_color=yes], [ax_cv_plaincurses_color=no]) ]) AS_IF([test "x$ax_cv_plaincurses_color" = xyes], [ ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for obsolete functions AC_CACHE_CHECK([for obsolete Curses functions], [ax_cv_plaincurses_obsolete], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ]])], [ax_cv_plaincurses_obsolete=yes], [ax_cv_plaincurses_obsolete=no]) ]) AS_IF([test "x$ax_cv_plaincurses_obsolete" = xyes], [ ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xno], [ AC_MSG_WARN([could not find a working curses.h]) ]) ]) ]) AS_IF([test "x$ax_cv_curses" != xyes], [ax_cv_curses=no]) AS_IF([test "x$ax_cv_curses_enhanced" != xyes], [ax_cv_curses_enhanced=no]) AS_IF([test "x$ax_cv_curses_color" != xyes], [ax_cv_curses_color=no]) AS_IF([test "x$ax_cv_curses_obsolete" != xyes], [ax_cv_curses_obsolete=no]) LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS ])dnl ncmpc-0.27/m4/glib-gettext.m40000644000076400001440000003272313063455747012671 00000000000000# Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ], [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) ncmpc-0.27/m4/mpd_with_flags.m40000644000076400001440000000122013063722613013232 00000000000000dnl Run code with the specified CFLAGS/CXXFLAGS and LIBS appended. dnl Restores the old values afterwards. dnl dnl Parameters: cflags, libs, code AC_DEFUN([MPD_WITH_FLAGS], [ ac_save_CFLAGS="$[]CFLAGS" ac_save_CXXFLAGS="$[]CXXFLAGS" ac_save_LIBS="$[]LIBS" CFLAGS="$[]CFLAGS $1" CXXFLAGS="$[]CXXFLAGS $1" LIBS="$[]LIBS $2" $3 CFLAGS="$[]ac_save_CFLAGS" CXXFLAGS="$[]ac_save_CXXFLAGS" LIBS="$[]ac_save_LIBS" ]) dnl Run code with the specified library's CFLAGS/CXXFLAGS and LIBS dnl appended. Restores the old values afterwards. dnl dnl Parameters: libname, code AC_DEFUN([MPD_WITH_LIBRARY], [MPD_WITH_FLAGS([$[]$1_CFLAGS], [$[]$1_LIBS], [$2])]) ncmpc-0.27/m4/nls.m40000644000076400001440000000230713063455747011061 00000000000000# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) ncmpc-0.27/m4/pkg.m40000644000076400001440000002400513063455747011045 00000000000000dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR ncmpc-0.27/m4/po.m40000644000076400001440000004503113063455747010704 00000000000000# po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) ncmpc-0.27/src/0000755000076400001440000000000013065552243010337 500000000000000ncmpc-0.27/src/net/0000755000076400001440000000000013065552243011125 500000000000000ncmpc-0.27/src/net/types.h0000644000076400001440000000306213063500151012350 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NET_TYPES_H #define NET_TYPES_H #ifdef WIN32 #include typedef SOCKET socket_t; #else typedef int socket_t; #define INVALID_SOCKET -1 #endif #endif ncmpc-0.27/src/net/socket.c0000644000076400001440000000424613063500151012474 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "socket.h" #ifndef WIN32 #include #endif static void socket_set_cloexec(socket_t fd) { #ifndef WIN32 fcntl(fd, F_SETFD, FD_CLOEXEC); #else (void)fd; #endif } static void socket_set_nonblock(socket_t fd) { #ifdef WIN32 u_long val = 1; ioctlsocket(fd, FIONBIO, &val); #else int flags = fcntl(fd, F_GETFL); if (flags >= 0) fcntl(fd, F_SETFL, flags | O_NONBLOCK); #endif } socket_t create_socket(int domain, int type, int protocol) { socket_t fd; #if defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK) fd = socket(domain, type | SOCK_CLOEXEC | SOCK_NONBLOCK, protocol); if (fd != INVALID_SOCKET || errno != EINVAL) return fd; #endif fd = socket(domain, type, protocol); if (fd != INVALID_SOCKET) { socket_set_cloexec(fd); socket_set_nonblock(fd); } return fd; } ncmpc-0.27/src/net/socket.h0000644000076400001440000000375613063500151012506 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NET_SOCKET_H #define NET_SOCKET_H #include "types.h" #include #ifndef WIN32 #include #include #include #endif socket_t create_socket(int domain, int type, int protocol); static inline void close_socket(socket_t s) { #ifdef WIN32 closesocket(s); #else close(s); #endif } static inline int last_socket_error(void) { #ifdef WIN32 return WSAGetLastError(); #else return errno; #endif } static inline bool would_block(int e) { #ifdef WIN32 return e == WSAEINPROGRESS || e == WSAEWOULDBLOCK; #else return e == EINPROGRESS || e == EAGAIN; #endif } #endif ncmpc-0.27/src/net/resolver.c0000644000076400001440000001157213063500151013045 00000000000000/* libmpdclient (c) 2003-2017 The Music Player Daemon Project This project's homepage is: http://www.musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "resolver.h" #include "config.h" #include #include #include #ifdef WIN32 # include # include #else # include # include #ifdef ENABLE_TCP # include # include # include #endif #endif struct resolver { enum { TYPE_ZERO, TYPE_ONE, TYPE_ANY } type; #ifdef ENABLE_TCP #ifdef HAVE_GETADDRINFO struct addrinfo *ai; const struct addrinfo *next; #else struct sockaddr_in sin; #endif #endif struct resolver_address current; #ifndef WIN32 struct sockaddr_un saun; #endif }; struct resolver * resolver_new(const char *host, unsigned port) { struct resolver *resolver; resolver = malloc(sizeof(*resolver)); if (resolver == NULL) return NULL; if (host[0] == '/' || host[0] == '@') { #ifndef WIN32 size_t path_length = strlen(host); if (path_length >= sizeof(resolver->saun.sun_path)) { free(resolver); return NULL; } resolver->saun.sun_family = AF_UNIX; memcpy(resolver->saun.sun_path, host, path_length + 1); if (host[0] == '@') /* abstract socket */ resolver->saun.sun_path[0] = 0; resolver->current.family = PF_UNIX; resolver->current.protocol = 0; resolver->current.addrlen = sizeof(resolver->saun); resolver->current.addr = (const struct sockaddr *)&resolver->saun; resolver->type = TYPE_ONE; #else /* WIN32 */ /* there are no UNIX domain sockets on Windows */ free(resolver); return NULL; #endif /* WIN32 */ } else { #ifdef ENABLE_TCP #ifdef HAVE_GETADDRINFO struct addrinfo hints; char service[20]; int ret; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; snprintf(service, sizeof(service), "%d", port); ret = getaddrinfo(host, service, &hints, &resolver->ai); if (ret != 0) { free(resolver); return NULL; } resolver->next = resolver->ai; resolver->type = TYPE_ANY; #else const struct hostent *he; he = gethostbyname(host); if (he == NULL) { free(resolver); return NULL; } if (he->h_addrtype != AF_INET) { free(resolver); return NULL; } memset(&resolver->sin, 0, sizeof(resolver->sin)); resolver->sin.sin_family = AF_INET; resolver->sin.sin_port = htons(port); memcpy((char *)&resolver->sin.sin_addr.s_addr, (char *)he->h_addr, he->h_length); resolver->current.family = PF_INET; resolver->current.protocol = 0; resolver->current.addrlen = sizeof(resolver->sin); resolver->current.addr = (const struct sockaddr *)&resolver->sin; resolver->type = TYPE_ONE; #endif #else /* !ENABLE_TCP */ (void)port; free(resolver); return NULL; #endif } return resolver; } void resolver_free(struct resolver *resolver) { #if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO) if (resolver->type == TYPE_ANY) freeaddrinfo(resolver->ai); #endif free(resolver); } const struct resolver_address * resolver_next(struct resolver *resolver) { if (resolver->type == TYPE_ZERO) return NULL; if (resolver->type == TYPE_ONE) { resolver->type = TYPE_ZERO; return &resolver->current; } #if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO) if (resolver->next == NULL) return NULL; resolver->current.family = resolver->next->ai_family; resolver->current.protocol = resolver->next->ai_protocol; resolver->current.addrlen = resolver->next->ai_addrlen; resolver->current.addr = resolver->next->ai_addr; resolver->next = resolver->next->ai_next; return &resolver->current; #else return NULL; #endif } ncmpc-0.27/src/net/resolver.h0000644000076400001440000000343113063500151013045 00000000000000/* libmpdclient (c) 2003-2017 The Music Player Daemon Project This project's homepage is: http://www.musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LIBMPDCLIENT_RESOLVER_H #define LIBMPDCLIENT_RESOLVER_H #include struct resolver; struct resolver_address { int family; int protocol; size_t addrlen; const struct sockaddr *addr; }; struct resolver * resolver_new(const char *host, unsigned port); void resolver_free(struct resolver *resolver); const struct resolver_address * resolver_next(struct resolver *resolver); #endif ncmpc-0.27/src/net/async_connect.c0000644000076400001440000000704413065552053014043 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "async_connect.h" #include "../Compiler.h" #include #ifdef WIN32 #include #endif #include #include #include #include struct async_connect { const struct async_connect_handler *handler; void *handler_ctx; socket_t fd; guint source_id; }; static gboolean async_connect_source_callback(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gpointer data) { struct async_connect *ac = data; const int fd = ac->fd; const struct async_connect_handler *const handler = ac->handler; void *const ctx = ac->handler_ctx; g_free(ac); int s_err = 0; socklen_t s_err_size = sizeof(s_err); if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (char*)&s_err, &s_err_size) < 0) s_err = -last_socket_error(); if (s_err == 0) { handler->success(fd, ctx); } else { close_socket(fd); char msg[256]; snprintf(msg, sizeof(msg), "Failed to connect socket: %s", strerror(-s_err)); handler->error(msg, ctx); } return false; } void async_connect_start(struct async_connect **acp, const struct sockaddr *address, size_t address_size, const struct async_connect_handler *handler, void *ctx) { socket_t fd = create_socket(address->sa_family, SOCK_STREAM, 0); if (fd == INVALID_SOCKET) { char msg[256]; snprintf(msg, sizeof(msg), "Failed to create socket: %s", strerror(errno)); handler->error(msg, ctx); return; } if (connect(fd, address, address_size) == 0) { handler->success(fd, ctx); return; } const int e = last_socket_error(); if (!would_block(e)) { close_socket(fd); char msg[256]; snprintf(msg, sizeof(msg), "Failed to connect socket: %s", strerror(e)); handler->error(msg, ctx); return; } struct async_connect *ac = g_new(struct async_connect, 1); ac->handler = handler; ac->handler_ctx = ctx; ac->fd = fd; GIOChannel *channel = g_io_channel_unix_new(fd); ac->source_id = g_io_add_watch(channel, G_IO_OUT, async_connect_source_callback, ac); g_io_channel_unref(channel); *acp = ac; } void async_connect_cancel(struct async_connect *ac) { g_source_remove(ac->source_id); close_socket(ac->fd); g_free(ac); } ncmpc-0.27/src/net/async_connect.h0000644000076400001440000000367713063500151014046 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NET_ASYNC_CONNECT_H #define NET_ASYNC_CONNECT_H #include "socket.h" #include struct sockaddr; struct async_connect; struct async_connect_handler { void (*success)(socket_t fd, void *ctx); void (*error)(const char *message, void *ctx); }; /** * Create a socket and connect it to the given address. */ void async_connect_start(struct async_connect **acp, const struct sockaddr *address, size_t address_size, const struct async_connect_handler *handler, void *ctx); void async_connect_cancel(struct async_connect *ac); #endif ncmpc-0.27/src/net/async_rconnect.c0000644000076400001440000000733413063500151014215 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "async_rconnect.h" #include "async_connect.h" #include "resolver.h" #include "../Compiler.h" #include #include #include #include struct async_rconnect { const struct async_rconnect_handler *handler; void *handler_ctx; const char *host; struct resolver *resolver; struct async_connect *connect; char *last_error; }; static void async_rconnect_next(struct async_rconnect *rc); static void async_rconnect_success(socket_t fd, void *ctx) { struct async_rconnect *rc = ctx; rc->handler->success(fd, rc->handler_ctx); g_free(rc->last_error); resolver_free(rc->resolver); g_free(rc); } static void async_rconnect_error(const char *message, void *ctx) { struct async_rconnect *rc = ctx; g_free(rc->last_error); rc->last_error = g_strdup(message); async_rconnect_next(rc); } static const struct async_connect_handler async_rconnect_connect_handler = { .success = async_rconnect_success, .error = async_rconnect_error, }; static void async_rconnect_next(struct async_rconnect *rc) { const struct resolver_address *a = resolver_next(rc->resolver); if (a == NULL) { char msg[256]; if (rc->last_error == 0) { snprintf(msg, sizeof(msg), "Host '%s' has no address", rc->host); } else { snprintf(msg, sizeof(msg), "Failed to connect to host '%s': %s", rc->host, rc->last_error); g_free(rc->last_error); } rc->handler->error(msg, rc->handler_ctx); resolver_free(rc->resolver); g_free(rc); return; } async_connect_start(&rc->connect, a->addr, a->addrlen, &async_rconnect_connect_handler, rc); } void async_rconnect_start(struct async_rconnect **rcp, const char *host, unsigned port, const struct async_rconnect_handler *handler, void *ctx) { struct resolver *r = resolver_new(host, port); if (host == NULL) host = "[default]"; if (r == NULL) { char msg[256]; snprintf(msg, sizeof(msg), "Failed to resolve host '%s'", host); handler->error(msg, ctx); return; } struct async_rconnect *rc = g_new(struct async_rconnect, 1); rc->handler = handler; rc->handler_ctx = ctx; rc->host = host; rc->resolver = r; rc->last_error = NULL; *rcp = rc; async_rconnect_next(rc); } void async_rconnect_cancel(struct async_rconnect *rc) { g_free(rc->last_error); async_connect_cancel(rc->connect); resolver_free(rc->resolver); g_free(rc); } ncmpc-0.27/src/net/async_rconnect.h0000644000076400001440000000361213063500151014215 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NET_ASYNC_RCONNECT_H #define NET_ASYNC_RCONNECT_H #include struct async_rconnect; struct async_rconnect_handler { void (*success)(int fd, void *ctx); void (*error)(const char *message, void *ctx); }; /** * Resolve a host name and connect to it asynchronously. */ void async_rconnect_start(struct async_rconnect **rcp, const char *host, unsigned port, const struct async_rconnect_handler *handler, void *ctx); void async_rconnect_cancel(struct async_rconnect *rc); #endif ncmpc-0.27/src/win/0000755000076400001440000000000013065552243011134 500000000000000ncmpc-0.27/src/win/ncmpc_win32_rc.rc.in0000644000076400001440000000164611722470314014620 00000000000000#include #define VERSION_NUMBER @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@ #define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@" NCMPC_ICON ICON "@top_srcdir@/src/win/ncmpc.ico" 1 VERSIONINFO FILETYPE VFT_APP FILEOS VOS__WINDOWS32 PRODUCTVERSION VERSION_NUMBER FILEVERSION VERSION_NUMBER BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "The Music Player Daemon Project" VALUE "ProductName", "aN Curses Music Player Client" VALUE "ProductVersion", VERSION_NUMBER_STR VALUE "InternalName", "ncmpc" VALUE "OriginalFilename", "ncmpc.exe" VALUE "FileVersion", "@VERSION@" VALUE "FileDescription", "aN Curses Music Player Client @VERSION@" VALUE "LegalCopyright", "Copyright \251 The Music Player Daemon Project" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END ncmpc-0.27/src/Compiler.h0000644000076400001440000001117113060607430012175 00000000000000/* * Copyright (C) 2003-2013 The Music Player Daemon Project * http://www.musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef COMPILER_H #define COMPILER_H #define GCC_MAKE_VERSION(major, minor, patchlevel) ((major) * 10000 + (minor) * 100 + patchlevel) #ifdef __GNUC__ # define GCC_VERSION GCC_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #else # define GCC_VERSION 0 #endif #ifdef __clang__ # define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__) #else # define CLANG_VERSION 0 #endif /** * Are we building with the specified version of gcc (not clang or any * other compiler) or newer? */ #define GCC_CHECK_VERSION(major, minor) \ (!CLANG_VERSION && \ GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0)) /** * Are we building with clang (any version) or at least the specified * gcc version? */ #define CLANG_OR_GCC_VERSION(major, minor) \ (CLANG_VERSION || GCC_CHECK_VERSION(major, minor)) /** * Are we building with gcc (not clang or any other compiler) and a * version older than the specified one? */ #define GCC_OLDER_THAN(major, minor) \ (GCC_VERSION && !CLANG_VERSION && \ GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0)) #if CLANG_OR_GCC_VERSION(4,0) /* GCC 4.x */ #define gcc_const __attribute__((const)) #define gcc_deprecated __attribute__((deprecated)) #define gcc_may_alias __attribute__((may_alias)) #define gcc_malloc __attribute__((malloc)) #define gcc_noreturn __attribute__((noreturn)) #define gcc_packed __attribute__((packed)) #define gcc_printf(a,b) __attribute__((format(printf, a, b))) #define gcc_pure __attribute__((pure)) #define gcc_sentinel __attribute__((sentinel)) #define gcc_unused __attribute__((unused)) #define gcc_warn_unused_result __attribute__((warn_unused_result)) #define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__))) #define gcc_nonnull_all __attribute__((nonnull)) #define gcc_likely(x) __builtin_expect (!!(x), 1) #define gcc_unlikely(x) __builtin_expect (!!(x), 0) #define gcc_aligned(n) __attribute__((aligned(n))) #define gcc_visibility_hidden __attribute__((visibility("hidden"))) #define gcc_visibility_default __attribute__((visibility("default"))) #define gcc_always_inline __attribute__((always_inline)) #else /* generic C compiler */ #define gcc_const #define gcc_deprecated #define gcc_may_alias #define gcc_malloc #define gcc_noreturn #define gcc_packed #define gcc_printf(a,b) #define gcc_pure #define gcc_sentinel #define gcc_unused #define gcc_warn_unused_result #define gcc_nonnull(...) #define gcc_nonnull_all #define gcc_likely(x) (x) #define gcc_unlikely(x) (x) #define gcc_aligned(n) #define gcc_visibility_hidden #define gcc_visibility_default #define gcc_always_inline inline #endif #if CLANG_OR_GCC_VERSION(4,3) #define gcc_hot __attribute__((hot)) #define gcc_cold __attribute__((cold)) #else /* ! GCC_UNUSED >= 40300 */ #define gcc_hot #define gcc_cold #endif /* ! GCC_UNUSED >= 40300 */ #if GCC_CHECK_VERSION(4,6) #define gcc_flatten __attribute__((flatten)) #else #define gcc_flatten #endif #ifndef __cplusplus /* plain C99 has "restrict" */ #define gcc_restrict restrict #elif CLANG_OR_GCC_VERSION(4,0) /* "__restrict__" is a GCC extension for C++ */ #define gcc_restrict __restrict__ #else /* disable it on other compilers */ #define gcc_restrict #endif /* C++11 features */ #if defined(__cplusplus) /* support for C++11 "override" was added in gcc 4.7 */ #if GCC_OLDER_THAN(4,7) #define override #define final #endif #if CLANG_OR_GCC_VERSION(4,8) #define gcc_alignas(T, fallback) alignas(T) #else #define gcc_alignas(T, fallback) gcc_aligned(fallback) #endif #endif #ifndef __has_feature // define dummy macro for non-clang compilers #define __has_feature(x) 0 #endif #if __has_feature(attribute_unused_on_fields) #define gcc_unused_field gcc_unused #else #define gcc_unused_field #endif #if defined(__GNUC__) || defined(__clang__) #define gcc_unreachable() __builtin_unreachable() #else #define gcc_unreachable() #endif #endif ncmpc-0.27/src/ncmpc.h0000644000076400001440000000210513063455636011534 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_H #define NCMPC_H #include "command.h" #include void begin_input_event(void); void end_input_event(void); /** * @return false if the application shall quit */ bool do_input_event(command_t cmd); #endif /* NCMPC_H */ ncmpc-0.27/src/defaults.h0000644000076400001440000000254013062774214012241 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef DEFAULTS_H #define DEFAULTS_H /* mpd crossfade time [s] */ #define DEFAULT_CROSSFADE_TIME 10 /* screen list */ #define DEFAULT_SCREEN_LIST "playlist browse" /* song format - list window */ #define DEFAULT_LIST_FORMAT "%name%|[%artist% - ][%title%|%shortfile%]" /* song format - status window */ #define DEFAULT_STATUS_FORMAT "[%artist% - ][%title%|%shortfile%]" #define DEFAULT_LYRICS_TIMEOUT 100 #define DEFAULT_MPD_TIMEOUT 5000 /* 5 seconds */ #define DEFAULT_SCROLL TRUE #define DEFAULT_SCROLL_SEP " *** " #endif ncmpc-0.27/src/ncmpc_curses.h0000644000076400001440000000227713062774214013125 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #if defined(HAVE_NCURSESW_CURSES_H) # include #elif defined(HAVE_NCURSESW_H) # include #elif defined(HAVE_NCURSES_CURSES_H) # include #elif defined(HAVE_NCURSES_H) # include #elif defined(HAVE_CURSES_H) # include #else # error "SysV or X/Open-compatible Curses header file required" #endif ncmpc-0.27/src/i18n.h0000644000076400001440000000215713062774214011215 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef I18N_H #define I18N_H #include "config.h" #ifdef ENABLE_NLS #include #define _(x) gettext(x) #ifdef gettext_noop #define N_(x) gettext_noop(x) #else #define N_(x) (x) #endif #else #define _(x) x #define N_(x) x #endif #define YES _("y") #define NO _("n") #endif ncmpc-0.27/src/main.c0000644000076400001440000002121013065543307011344 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "config.h" #include "ncmpc.h" #include "mpdclient.h" #include "callbacks.h" #include "charset.h" #include "options.h" #include "command.h" #include "ncu.h" #include "screen.h" #include "screen_status.h" #include "xterm_title.h" #include "strfsong.h" #include "i18n.h" #include "player_command.h" #include "keyboard.h" #include "lirc.h" #include "signals.h" #ifndef NCMPC_MINI #include "conf.h" #endif #ifdef ENABLE_LYRICS_SCREEN #include "lyrics.h" #endif #include #include #include #include #include #include #ifdef ENABLE_LOCALE #include #endif /* time between mpd updates [ms] */ static const guint update_interval = 500; #define BUFSIZE 1024 static struct mpdclient *mpd = NULL; static GMainLoop *main_loop; static guint reconnect_source_id, update_source_id; #ifndef NCMPC_MINI static guint check_key_bindings_source_id; #endif #ifndef NCMPC_MINI static void update_xterm_title(void) { const struct mpd_song *song = mpd->song; char tmp[BUFSIZE]; const char *new_title = NULL; if (options.xterm_title_format && mpd->playing && song) new_title = strfsong(tmp, BUFSIZE, options.xterm_title_format, song) > 0 ? tmp : NULL; if (new_title == NULL) new_title = PACKAGE " version " VERSION; static char title[BUFSIZE]; if (strncmp(title, new_title, BUFSIZE)) { g_strlcpy(title, new_title, BUFSIZE); set_xterm_title(title); } } #endif static gboolean timer_mpd_update(gpointer data); static void enable_update_timer(void) { if (update_source_id != 0) return; update_source_id = g_timeout_add(update_interval, timer_mpd_update, NULL); } static void disable_update_timer(void) { if (update_source_id == 0) return; g_source_remove(update_source_id); update_source_id = 0; } static bool should_enable_update_timer(void) { return mpd->playing; } static void auto_update_timer(void) { if (should_enable_update_timer()) enable_update_timer(); else disable_update_timer(); } static void do_mpd_update(void) { if (mpdclient_is_connected(mpd) && (mpd->events != 0 || mpd->playing)) mpdclient_update(mpd); #ifndef NCMPC_MINI if (options.enable_xterm_title) update_xterm_title(); #endif screen_update(mpd); mpd->events = 0; } /** * This timer is installed when the connection to the MPD server is * broken. It tries to recover by reconnecting periodically. */ static gboolean timer_reconnect(gcc_unused gpointer data) { assert(mpdclient_is_dead(mpd)); reconnect_source_id = 0; char *name = mpdclient_settings_name(mpd); screen_status_printf(_("Connecting to %s... [Press %s to abort]"), name, get_key_names(CMD_QUIT, false)); g_free(name); doupdate(); mpdclient_connect(mpd); return FALSE; } void mpdclient_connected_callback(void) { assert(reconnect_source_id == 0); #ifndef NCMPC_MINI /* quit if mpd is pre 0.14 - song id not supported by mpd */ struct mpd_connection *connection = mpdclient_get_connection(mpd); if (mpd_connection_cmp_server_version(connection, 0, 16, 0) < 0) { const unsigned *version = mpd_connection_get_server_version(connection); screen_status_printf(_("Error: MPD version %d.%d.%d is too old (%s needed)"), version[0], version[1], version[2], "0.16.0"); mpdclient_disconnect(mpd); doupdate(); /* try again after 30 seconds */ reconnect_source_id = g_timeout_add_seconds(30, timer_reconnect, NULL); return; } #endif screen_status_clear_message(); doupdate(); /* update immediately */ mpd->events = MPD_IDLE_ALL; do_mpd_update(); auto_update_timer(); } void mpdclient_failed_callback(void) { assert(reconnect_source_id == 0); /* try again in 5 seconds */ reconnect_source_id = g_timeout_add_seconds(5, timer_reconnect, NULL); } void mpdclient_lost_callback(void) { assert(reconnect_source_id == 0); screen_update(mpd); reconnect_source_id = g_timeout_add_seconds(1, timer_reconnect, NULL); } /** * This function is called by the gidle.c library when MPD sends us an * idle event (or when the connection dies). */ void mpdclient_idle_callback(gcc_unused enum mpd_idle events) { #ifndef NCMPC_MINI if (options.enable_xterm_title) update_xterm_title(); #endif screen_update(mpd); auto_update_timer(); } static gboolean timer_mpd_update(gcc_unused gpointer data) { do_mpd_update(); if (should_enable_update_timer()) return true; else { update_source_id = 0; return false; } } void begin_input_event(void) { } void end_input_event(void) { screen_update(mpd); mpd->events = 0; auto_update_timer(); } bool do_input_event(command_t cmd) { if (cmd == CMD_QUIT) { g_main_loop_quit(main_loop); return false; } screen_cmd(mpd, cmd); if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) /* make sure we don't update the volume yet */ disable_update_timer(); return true; } #ifndef NCMPC_MINI /** * Check the configured key bindings for errors, and display a status * message every 10 seconds. */ static gboolean timer_check_key_bindings(gcc_unused gpointer data) { char buf[256]; if (check_key_bindings(NULL, buf, sizeof(buf))) { /* no error: disable this timer for the rest of this process */ check_key_bindings_source_id = 0; return FALSE; } #ifdef ENABLE_KEYDEF_SCREEN g_strchomp(buf); g_strlcat(buf, " (", sizeof(buf)); /* to translators: a key was bound twice in the key editor, and this is a hint for the user what to press to correct that */ char comment[64]; g_snprintf(comment, sizeof(comment), _("press %s for the key editor"), get_key_names(CMD_SCREEN_KEYDEF, false)); g_strlcat(buf, comment, sizeof(buf)); g_strlcat(buf, ")", sizeof(buf)); #endif screen_status_printf("%s", buf); doupdate(); return TRUE; } #endif int main(int argc, const char *argv[]) { #ifdef ENABLE_LOCALE #ifndef ENABLE_NLS gcc_unused #endif const char *charset = NULL; /* time and date formatting */ setlocale(LC_TIME,""); /* care about sorting order etc */ setlocale(LC_COLLATE,""); /* charset */ setlocale(LC_CTYPE,""); /* initialize charset conversions */ charset = charset_init(); /* initialize i18n support */ #endif #ifdef ENABLE_NLS setlocale(LC_MESSAGES, ""); bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); #ifdef ENABLE_LOCALE bind_textdomain_codeset(GETTEXT_PACKAGE, charset); #endif textdomain(GETTEXT_PACKAGE); #endif /* initialize options */ options_init(); /* parse command line options - 1 pass get configuration files */ options_parse(argc, argv); #ifndef NCMPC_MINI /* read configuration */ read_configuration(); /* check key bindings */ check_key_bindings(NULL, NULL, 0); #endif /* parse command line options - 2 pass */ options_parse(argc, argv); ncu_init(); #ifdef ENABLE_LYRICS_SCREEN lyrics_init(); #endif /* create mpdclient instance */ mpd = mpdclient_new(options.host, options.port, options.timeout_ms, options.password); /* initialize curses */ screen_init(mpd); /* the main loop */ main_loop = g_main_loop_new(NULL, FALSE); /* watch out for keyboard input */ keyboard_init(); /* watch out for lirc input */ ncmpc_lirc_init(); signals_init(main_loop, mpd); /* attempt to connect */ reconnect_source_id = g_idle_add(timer_reconnect, NULL); auto_update_timer(); #ifndef NCMPC_MINI check_key_bindings_source_id = g_timeout_add_seconds(10, timer_check_key_bindings, NULL); #endif screen_paint(mpd, true); g_main_loop_run(main_loop); g_main_loop_unref(main_loop); /* cleanup */ cancel_seek_timer(); disable_update_timer(); if (reconnect_source_id != 0) g_source_remove(reconnect_source_id); #ifndef NCMPC_MINI if (check_key_bindings_source_id != 0) g_source_remove(check_key_bindings_source_id); #endif signals_deinit(); ncmpc_lirc_deinit(); screen_exit(); #ifndef NCMPC_MINI set_xterm_title(""); #endif printf("\n"); mpdclient_free(mpd); #ifdef ENABLE_LYRICS_SCREEN lyrics_deinit(); #endif ncu_deinit(); options_deinit(); return 0; } ncmpc-0.27/src/gidle.c0000644000076400001440000002247713062774214011524 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "gidle.h" #include "Compiler.h" #include #include #include #include #include #include struct mpd_glib_source { struct mpd_connection *connection; struct mpd_async *async; struct mpd_parser *parser; mpd_glib_callback_t callback; void *callback_ctx; GIOChannel *channel; enum mpd_async_event io_events; guint id; enum mpd_idle idle_events; /** * This flag is a hack: it is set while mpd_glib_leave() is * executed. mpd_glib_leave() might invoke the callback, and * the callback might invoke mpd_glib_enter(), awkwardly * leaving mpd_glib_leave() in idle mode. As long as this * flag is set, mpd_glib_enter() is a no-op to prevent this. */ bool leaving; /** * This flag is true when mpd_glib_free() has been called * during a callback invoked from mpd_glib_leave(). * mpd_glib_leave() will do the real g_free() call then. */ bool destroyed; }; struct mpd_glib_source * mpd_glib_new(struct mpd_connection *connection, mpd_glib_callback_t callback, void *callback_ctx) { struct mpd_glib_source *source = g_new(struct mpd_glib_source, 1); source->connection = connection; source->async = mpd_connection_get_async(connection); source->parser = mpd_parser_new(); /* XXX check source->parser!=NULL */ source->callback = callback; source->callback_ctx = callback_ctx; source->channel = g_io_channel_unix_new(mpd_async_get_fd(source->async)); source->io_events = 0; source->id = 0; source->leaving = false; source->destroyed = false; return source; } void mpd_glib_free(struct mpd_glib_source *source) { assert(!source->destroyed); if (source->id != 0) g_source_remove(source->id); g_io_channel_unref(source->channel); mpd_parser_free(source->parser); if (source->leaving) source->destroyed = true; else g_free(source); } static void mpd_glib_invoke(const struct mpd_glib_source *source) { assert(source->id == 0); assert(!source->destroyed); if (source->idle_events != 0) source->callback(MPD_ERROR_SUCCESS, 0, NULL, source->idle_events, source->callback_ctx); } static void mpd_glib_invoke_error(const struct mpd_glib_source *source, enum mpd_error error, enum mpd_server_error server_error, const char *message) { assert(source->id == 0); assert(!source->destroyed); source->callback(error, server_error, message, 0, source->callback_ctx); } static void mpd_glib_invoke_async_error(const struct mpd_glib_source *source) { assert(source->id == 0); mpd_glib_invoke_error(source, mpd_async_get_error(source->async), 0, mpd_async_get_error_message(source->async)); } /** * Converts a GIOCondition bit mask to #mpd_async_event. */ static enum mpd_async_event g_io_condition_to_mpd_async_event(GIOCondition condition) { enum mpd_async_event events = 0; if (condition & G_IO_IN) events |= MPD_ASYNC_EVENT_READ; if (condition & G_IO_OUT) events |= MPD_ASYNC_EVENT_WRITE; if (condition & G_IO_HUP) events |= MPD_ASYNC_EVENT_HUP; if (condition & G_IO_ERR) events |= MPD_ASYNC_EVENT_ERROR; return events; } /** * Converts a #mpd_async_event bit mask to GIOCondition. */ static GIOCondition mpd_async_events_to_g_io_condition(enum mpd_async_event events) { GIOCondition condition = 0; if (events & MPD_ASYNC_EVENT_READ) condition |= G_IO_IN; if (events & MPD_ASYNC_EVENT_WRITE) condition |= G_IO_OUT; if (events & MPD_ASYNC_EVENT_HUP) condition |= G_IO_HUP; if (events & MPD_ASYNC_EVENT_ERROR) condition |= G_IO_ERR; return condition; } /** * Parses a response line from MPD. * * @return true on success, false on error */ static bool mpd_glib_feed(struct mpd_glib_source *source, char *line) { enum mpd_parser_result result; result = mpd_parser_feed(source->parser, line); switch (result) { case MPD_PARSER_MALFORMED: source->id = 0; source->io_events = 0; mpd_glib_invoke_error(source, MPD_ERROR_MALFORMED, 0, "Malformed MPD response"); return false; case MPD_PARSER_SUCCESS: source->id = 0; source->io_events = 0; mpd_glib_invoke(source); return false; case MPD_PARSER_ERROR: source->id = 0; source->io_events = 0; mpd_glib_invoke_error(source, MPD_ERROR_SERVER, mpd_parser_get_server_error(source->parser), mpd_parser_get_message(source->parser)); return false; case MPD_PARSER_PAIR: if (strcmp(mpd_parser_get_name(source->parser), "changed") == 0) source->idle_events |= mpd_idle_name_parse(mpd_parser_get_value(source->parser)); break; } return true; } /** * Receives and evaluates a portion of the MPD response. * * @return true on success, false on error */ static bool mpd_glib_recv(struct mpd_glib_source *source) { char *line; while ((line = mpd_async_recv_line(source->async)) != NULL) { if (!mpd_glib_feed(source, line)) return false; } if (mpd_async_get_error(source->async) != MPD_ERROR_SUCCESS) { source->id = 0; source->io_events = 0; mpd_glib_invoke_async_error(source); return false; } return true; } static gboolean mpd_glib_source_callback(gcc_unused GIOChannel *_source, GIOCondition condition, gpointer data) { struct mpd_glib_source *source = data; assert(source->id != 0); assert(source->io_events != 0); /* let libmpdclient do some I/O */ if (!mpd_async_io(source->async, g_io_condition_to_mpd_async_event(condition))) { source->id = 0; source->io_events = 0; mpd_glib_invoke_async_error(source); return false; } /* receive the response */ if ((condition & G_IO_IN) != 0) { if (!mpd_glib_recv(source)) return false; } /* continue polling? */ enum mpd_async_event events = mpd_async_events(source->async); if (events == 0) { /* no events - disable watch */ source->id = 0; source->io_events = 0; return false; } else if (events != source->io_events) { /* different event mask: make new watch */ g_source_remove(source->id); condition = mpd_async_events_to_g_io_condition(events); source->id = g_io_add_watch(source->channel, condition, mpd_glib_source_callback, source); source->io_events = events; return false; } else /* same event mask as before, enable the old watch */ return true; } static void mpd_glib_add_watch(struct mpd_glib_source *source) { enum mpd_async_event events = mpd_async_events(source->async); assert(source->io_events == 0); assert(source->id == 0); GIOCondition condition = mpd_async_events_to_g_io_condition(events); source->id = g_io_add_watch(source->channel, condition, mpd_glib_source_callback, source); source->io_events = events; } bool mpd_glib_enter(struct mpd_glib_source *source) { assert(source->io_events == 0); assert(source->id == 0); assert(!source->destroyed); if (source->leaving) return false; source->idle_events = 0; if (!mpd_async_send_command(source->async, "idle", NULL)) { mpd_glib_invoke_async_error(source); return false; } mpd_glib_add_watch(source); return true; } bool mpd_glib_leave(struct mpd_glib_source *source) { assert(!source->destroyed); if (source->id == 0) /* already left, callback was invoked */ return true; g_source_remove(source->id); source->id = 0; source->io_events = 0; enum mpd_idle events = source->idle_events == 0 ? mpd_run_noidle(source->connection) : mpd_recv_idle(source->connection, false); source->leaving = true; if (events == 0 && mpd_connection_get_error(source->connection) != MPD_ERROR_SUCCESS) { enum mpd_error error = mpd_connection_get_error(source->connection); enum mpd_server_error server_error = error == MPD_ERROR_SERVER ? mpd_connection_get_server_error(source->connection) : 0; mpd_glib_invoke_error(source, error, server_error, mpd_connection_get_error_message(source->connection)); if (source->destroyed) { g_free(source); return false; } source->leaving = false; return true; } source->idle_events |= events; mpd_glib_invoke(source); if (source->destroyed) { g_free(source); return false; } source->leaving = false; return true; } ncmpc-0.27/src/gidle.h0000644000076400001440000000436213062774214011522 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef MPD_GLIB_SOURCE_H #define MPD_GLIB_SOURCE_H #include typedef void (*mpd_glib_callback_t)(enum mpd_error error, enum mpd_server_error server_error, const char *message, enum mpd_idle events, void *ctx); struct mpd_glib_source; struct mpd_glib_source * mpd_glib_new(struct mpd_connection *connection, mpd_glib_callback_t callback, void *callback_ctx); void mpd_glib_free(struct mpd_glib_source *source); /** * Enters idle mode. * * @return true if idle mode has been entered, false if not * (e.g. blocked during the callback, or I/O error) */ bool mpd_glib_enter(struct mpd_glib_source *source); /** * Leaves idle mode and invokes the callback if there were events. * * @return true on success, false if this object was deleted by the * callback */ bool mpd_glib_leave(struct mpd_glib_source *source); #endif ncmpc-0.27/src/mpdclient.c0000644000076400001440000005650613065545570012423 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "mpdclient.h" #include "callbacks.h" #include "filelist.h" #include "config.h" #include "gidle.h" #include "charset.h" #ifdef ENABLE_ASYNC_CONNECT #include "aconnect.h" #endif #include #include static gboolean mpdclient_enter_idle_callback(gpointer user_data) { struct mpdclient *c = user_data; assert(c->enter_idle_source_id != 0); assert(c->source != NULL); assert(!c->idle); c->enter_idle_source_id = 0; c->idle = mpd_glib_enter(c->source); return false; } static void mpdclient_schedule_enter_idle(struct mpdclient *c) { assert(c != NULL); assert(c->source != NULL); if (c->enter_idle_source_id == 0) /* automatically re-enter MPD "idle" mode */ c->enter_idle_source_id = g_idle_add(mpdclient_enter_idle_callback, c); } static void mpdclient_cancel_enter_idle(struct mpdclient *c) { if (c->enter_idle_source_id != 0) { g_source_remove(c->enter_idle_source_id); c->enter_idle_source_id = 0; } } static void mpdclient_invoke_error_callback(enum mpd_error error, const char *message) { char *allocated; if (error == MPD_ERROR_SERVER) /* server errors are UTF-8, the others are locale */ message = allocated = utf8_to_locale(message); else allocated = NULL; mpdclient_error_callback(message); g_free(allocated); } static void mpdclient_invoke_error_callback1(struct mpdclient *c) { assert(c != NULL); assert(c->connection != NULL); struct mpd_connection *connection = c->connection; enum mpd_error error = mpd_connection_get_error(connection); assert(error != MPD_ERROR_SUCCESS); mpdclient_invoke_error_callback(error, mpd_connection_get_error_message(connection)); } static void mpdclient_gidle_callback(enum mpd_error error, gcc_unused enum mpd_server_error server_error, const char *message, enum mpd_idle events, void *ctx) { struct mpdclient *c = ctx; c->idle = false; assert(mpdclient_is_connected(c)); if (error != MPD_ERROR_SUCCESS) { mpdclient_invoke_error_callback(error, message); mpdclient_disconnect(c); mpdclient_lost_callback(); return; } c->events |= events; mpdclient_update(c); mpdclient_idle_callback(c->events); c->events = 0; if (c->source != NULL) mpdclient_schedule_enter_idle(c); } /****************************************************************************/ /*** mpdclient functions ****************************************************/ /****************************************************************************/ bool mpdclient_handle_error(struct mpdclient *c) { enum mpd_error error = mpd_connection_get_error(c->connection); assert(error != MPD_ERROR_SUCCESS); if (error == MPD_ERROR_SERVER && mpd_connection_get_server_error(c->connection) == MPD_SERVER_ERROR_PERMISSION && mpdclient_auth_callback(c)) return true; mpdclient_invoke_error_callback(error, mpd_connection_get_error_message(c->connection)); if (!mpd_connection_clear_error(c->connection)) { mpdclient_disconnect(c); mpdclient_lost_callback(); } return false; } #ifdef ENABLE_ASYNC_CONNECT #ifndef WIN32 static bool is_local_socket(const char *host) { return *host == '/' || *host == '@'; } static bool settings_is_local_socket(const struct mpd_settings *settings) { const char *host = mpd_settings_get_host(settings); return host != NULL && is_local_socket(host); } #endif #endif struct mpdclient * mpdclient_new(const gchar *host, unsigned port, unsigned timeout_ms, const gchar *password) { struct mpdclient *c = g_new0(struct mpdclient, 1); #ifdef ENABLE_ASYNC_CONNECT c->settings = mpd_settings_new(host, port, timeout_ms, NULL, NULL); if (c->settings == NULL) g_error("Out of memory"); #ifndef WIN32 c->settings2 = host == NULL && port == 0 && settings_is_local_socket(c->settings) ? mpd_settings_new(host, 6600, timeout_ms, NULL, NULL) : NULL; #endif #else c->host = host; c->port = port; #endif c->timeout_ms = timeout_ms; c->password = password; playlist_init(&c->playlist); c->volume = -1; c->events = 0; c->playing = false; return c; } void mpdclient_free(struct mpdclient *c) { mpdclient_disconnect(c); mpdclient_playlist_free(&c->playlist); #ifdef ENABLE_ASYNC_CONNECT mpd_settings_free(c->settings); #ifndef WIN32 if (c->settings2 != NULL) mpd_settings_free(c->settings2); #endif #endif g_free(c); } static char * settings_name(const struct mpd_settings *settings) { assert(settings != NULL); const char *host = mpd_settings_get_host(settings); if (host == NULL) host = "unknown"; if (host[0] == '/') return g_strdup(host); unsigned port = mpd_settings_get_port(settings); if (port == 0 || port == 6600) return g_strdup(host); return g_strdup_printf("%s:%u", host, port); } char * mpdclient_settings_name(const struct mpdclient *c) { assert(c != NULL); #ifdef ENABLE_ASYNC_CONNECT return settings_name(c->settings); #else struct mpd_settings *settings = mpd_settings_new(c->host, c->port, 0, NULL, NULL); if (settings == NULL) return g_strdup("unknown"); char *name = settings_name(settings); mpd_settings_free(settings); return name; #endif } static void mpdclient_status_free(struct mpdclient *c) { if (c->status == NULL) return; mpd_status_free(c->status); c->status = NULL; c->volume = -1; c->playing = false; } void mpdclient_disconnect(struct mpdclient *c) { #ifdef ENABLE_ASYNC_CONNECT if (c->async_connect != NULL) { aconnect_cancel(c->async_connect); c->async_connect = NULL; } #endif mpdclient_cancel_enter_idle(c); if (c->source != NULL) { mpd_glib_free(c->source); c->source = NULL; c->idle = false; } if (c->connection) { mpd_connection_free(c->connection); ++c->connection_id; } c->connection = NULL; mpdclient_status_free(c); playlist_clear(&c->playlist); if (c->song) c->song = NULL; /* everything has changed after a disconnect */ c->events |= MPD_IDLE_ALL; } static bool mpdclient_connected(struct mpdclient *c, struct mpd_connection *connection) { c->connection = connection; if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) { mpdclient_invoke_error_callback1(c); mpdclient_disconnect(c); mpdclient_failed_callback(); return false; } #ifdef ENABLE_ASYNC_CONNECT if (c->timeout_ms > 0) mpd_connection_set_timeout(connection, c->timeout_ms); #endif /* send password */ if (c->password != NULL && !mpd_run_password(connection, c->password)) { mpdclient_invoke_error_callback1(c); mpdclient_disconnect(c); mpdclient_failed_callback(); return false; } c->source = mpd_glib_new(connection, mpdclient_gidle_callback, c); mpdclient_schedule_enter_idle(c); ++c->connection_id; mpdclient_connected_callback(); return true; } #ifdef ENABLE_ASYNC_CONNECT static void mpdclient_aconnect_start(struct mpdclient *c, const struct mpd_settings *settings); static void mpdclient_connect_success(struct mpd_connection *connection, void *ctx) { struct mpdclient *c = ctx; assert(c->async_connect != NULL); c->async_connect = NULL; mpdclient_connected(c, connection); } static void mpdclient_connect_error(const char *message, void *ctx) { struct mpdclient *c = ctx; assert(c->async_connect != NULL); c->async_connect = NULL; #ifndef WIN32 if (!c->connecting2 && c->settings2 != NULL) { c->connecting2 = true; mpdclient_aconnect_start(c, c->settings2); return; } #endif mpdclient_error_callback(message); mpdclient_failed_callback(); } static const struct aconnect_handler mpdclient_connect_handler = { .success = mpdclient_connect_success, .error = mpdclient_connect_error, }; static void mpdclient_aconnect_start(struct mpdclient *c, const struct mpd_settings *settings) { aconnect_start(&c->async_connect, mpd_settings_get_host(settings), mpd_settings_get_port(settings), &mpdclient_connect_handler, c); } #endif void mpdclient_connect(struct mpdclient *c) { /* close any open connection */ mpdclient_disconnect(c); #ifdef ENABLE_ASYNC_CONNECT #ifndef WIN32 c->connecting2 = false; #endif mpdclient_aconnect_start(c, c->settings); #else /* connect to MPD */ struct mpd_connection *connection = mpd_connection_new(c->host, c->port, c->timeout_ms); if (connection == NULL) g_error("Out of memory"); mpdclient_connected(c, connection); #endif } bool mpdclient_update(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; /* free the old status */ mpdclient_status_free(c); /* retrieve new status */ c->status = mpd_run_status(connection); if (c->status == NULL) return mpdclient_handle_error(c); c->volume = mpd_status_get_volume(c->status); c->playing = mpd_status_get_state(c->status) == MPD_STATE_PLAY; /* check if the playlist needs an update */ if (c->playlist.version != mpd_status_get_queue_version(c->status)) { bool retval; if (!playlist_is_empty(&c->playlist)) retval = mpdclient_playlist_update_changes(c); else retval = mpdclient_playlist_update(c); if (!retval) return false; } /* update the current song */ if (!c->song || mpd_status_get_song_id(c->status) >= 0) { c->song = playlist_get_song(&c->playlist, mpd_status_get_song_pos(c->status)); } return true; } struct mpd_connection * mpdclient_get_connection(struct mpdclient *c) { if (c->source != NULL && c->idle) { c->idle = false; mpd_glib_leave(c->source); mpdclient_schedule_enter_idle(c); } return c->connection; } static struct mpd_status * mpdclient_recv_status(struct mpdclient *c) { assert(c->connection != NULL); struct mpd_status *status = mpd_recv_status(c->connection); if (status == NULL) { mpdclient_handle_error(c); return NULL; } if (c->status != NULL) mpd_status_free(c->status); return c->status = status; } /****************************************************************************/ /*** MPD Commands **********************************************************/ /****************************************************************************/ bool mpdclient_cmd_crop(struct mpdclient *c) { if (!mpdclient_is_playing(c)) return false; int length = mpd_status_get_queue_length(c->status); int current = mpd_status_get_song_pos(c->status); if (current < 0 || mpd_status_get_queue_length(c->status) < 2) return true; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; mpd_command_list_begin(connection, false); if (current < length - 1) mpd_send_delete_range(connection, current + 1, length); if (current > 0) mpd_send_delete_range(connection, 0, current); mpd_command_list_end(connection); return mpdclient_finish_command(c); } bool mpdclient_cmd_clear(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; /* send "clear" and "status" */ if (!mpd_command_list_begin(connection, false) || !mpd_send_clear(connection) || !mpd_send_status(connection) || !mpd_command_list_end(connection)) return mpdclient_handle_error(c); /* receive the new status, store it in the mpdclient struct */ struct mpd_status *status = mpdclient_recv_status(c); if (status == NULL) return false; if (!mpd_response_finish(connection)) return mpdclient_handle_error(c); /* update mpdclient.playlist */ if (mpd_status_get_queue_length(status) == 0) { /* after the "clear" command, the queue is really empty - this means we can clear it locally, reducing the UI latency */ playlist_clear(&c->playlist); c->playlist.version = mpd_status_get_queue_version(status); c->song = NULL; } c->events |= MPD_IDLE_QUEUE; return true; } bool mpdclient_cmd_volume(struct mpdclient *c, gint value) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; mpd_send_set_volume(connection, value); return mpdclient_finish_command(c); } bool mpdclient_cmd_volume_up(struct mpdclient *c) { if (c->volume < 0 || c->volume >= 100) return true; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; return mpdclient_cmd_volume(c, ++c->volume); } bool mpdclient_cmd_volume_down(struct mpdclient *c) { if (c->volume <= 0) return true; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; return mpdclient_cmd_volume(c, --c->volume); } bool mpdclient_cmd_add_path(struct mpdclient *c, const gchar *path_utf8) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; return mpd_send_add(connection, path_utf8)? mpdclient_finish_command(c) : false; } bool mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song) { assert(c != NULL); assert(song != NULL); struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL || c->status == NULL) return false; /* send the add command to mpd; at the same time, get the new status (to verify the new playlist id) and the last song (we hope that's the song we just added) */ if (!mpd_command_list_begin(connection, true) || !mpd_send_add(connection, mpd_song_get_uri(song)) || !mpd_send_status(connection) || !mpd_send_get_queue_song_pos(connection, playlist_length(&c->playlist)) || !mpd_command_list_end(connection) || !mpd_response_next(connection)) return mpdclient_handle_error(c); c->events |= MPD_IDLE_QUEUE; struct mpd_status *status = mpdclient_recv_status(c); if (status == NULL) return false; if (!mpd_response_next(connection)) return mpdclient_handle_error(c); struct mpd_song *new_song = mpd_recv_song(connection); if (!mpd_response_finish(connection) || new_song == NULL) { if (new_song != NULL) mpd_song_free(new_song); return mpd_connection_clear_error(connection) || mpdclient_handle_error(c); } if (mpd_status_get_queue_length(status) == playlist_length(&c->playlist) + 1 && mpd_status_get_queue_version(status) == c->playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ c->playlist.version = mpd_status_get_queue_version(status); /* the song we just received has the correct id; append it to the local playlist */ playlist_append(&c->playlist, new_song); } mpd_song_free(new_song); return true; } bool mpdclient_cmd_delete(struct mpdclient *c, gint idx) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL || c->status == NULL) return false; if (idx < 0 || (guint)idx >= playlist_length(&c->playlist)) return false; const struct mpd_song *song = playlist_get(&c->playlist, idx); /* send the delete command to mpd; at the same time, get the new status (to verify the playlist id) */ if (!mpd_command_list_begin(connection, false) || !mpd_send_delete_id(connection, mpd_song_get_id(song)) || !mpd_send_status(connection) || !mpd_command_list_end(connection)) return mpdclient_handle_error(c); c->events |= MPD_IDLE_QUEUE; struct mpd_status *status = mpdclient_recv_status(c); if (status == NULL) return false; if (!mpd_response_finish(connection)) return mpdclient_handle_error(c); if (mpd_status_get_queue_length(status) == playlist_length(&c->playlist) - 1 && mpd_status_get_queue_version(status) == c->playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ c->playlist.version = mpd_status_get_queue_version(status); /* remove the song from the local playlist */ playlist_remove(&c->playlist, idx); /* remove references to the song */ if (c->song == song) c->song = NULL; } return true; } bool mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end) { if (end == start + 1) /* if that's not really a range, we choose to use the safer "deleteid" version */ return mpdclient_cmd_delete(c, start); struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; /* send the delete command to mpd; at the same time, get the new status (to verify the playlist id) */ if (!mpd_command_list_begin(connection, false) || !mpd_send_delete_range(connection, start, end) || !mpd_send_status(connection) || !mpd_command_list_end(connection)) return mpdclient_handle_error(c); c->events |= MPD_IDLE_QUEUE; struct mpd_status *status = mpdclient_recv_status(c); if (status == NULL) return false; if (!mpd_response_finish(connection)) return mpdclient_handle_error(c); if (mpd_status_get_queue_length(status) == playlist_length(&c->playlist) - (end - start) && mpd_status_get_queue_version(status) == c->playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ c->playlist.version = mpd_status_get_queue_version(status); /* remove the song from the local playlist */ while (end > start) { --end; /* remove references to the song */ if (c->song == playlist_get(&c->playlist, end)) c->song = NULL; playlist_remove(&c->playlist, end); } } return true; } bool mpdclient_cmd_move(struct mpdclient *c, unsigned dest_pos, unsigned src_pos) { if (dest_pos == src_pos) return true; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; /* send the "move" command to MPD; at the same time, get the new status (to verify the playlist id) */ if (!mpd_command_list_begin(connection, false) || !mpd_send_move(connection, src_pos, dest_pos) || !mpd_send_status(connection) || !mpd_command_list_end(connection)) return mpdclient_handle_error(c); c->events |= MPD_IDLE_QUEUE; struct mpd_status *status = mpdclient_recv_status(c); if (status == NULL) return false; if (!mpd_response_finish(connection)) return mpdclient_handle_error(c); if (mpd_status_get_queue_length(status) == playlist_length(&c->playlist) && mpd_status_get_queue_version(status) == c->playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ c->playlist.version = mpd_status_get_queue_version(status); /* swap songs in the local playlist */ playlist_move(&c->playlist, dest_pos, src_pos); } return true; } /* The client-to-client protocol (MPD 0.17.0) */ bool mpdclient_cmd_subscribe(struct mpdclient *c, const char *channel) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; if (!mpd_send_subscribe(connection, channel)) return mpdclient_handle_error(c); return mpdclient_finish_command(c); } bool mpdclient_cmd_unsubscribe(struct mpdclient *c, const char *channel) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; if (!mpd_send_unsubscribe(connection, channel)) return mpdclient_handle_error(c); return mpdclient_finish_command(c); } bool mpdclient_cmd_send_message(struct mpdclient *c, const char *channel, const char *text) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; if (!mpd_send_send_message(connection, channel, text)) return mpdclient_handle_error(c); return mpdclient_finish_command(c); } bool mpdclient_send_read_messages(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; return mpd_send_read_messages(connection)? true : mpdclient_handle_error(c); } struct mpd_message * mpdclient_recv_message(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; struct mpd_message *message = mpd_recv_message(connection); if (message == NULL && mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) mpdclient_handle_error(c); return message; } /****************************************************************************/ /*** Playlist management functions ******************************************/ /****************************************************************************/ /* update playlist */ bool mpdclient_playlist_update(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; playlist_clear(&c->playlist); mpd_send_list_queue_meta(connection); struct mpd_entity *entity; while ((entity = mpd_recv_entity(connection))) { if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) playlist_append(&c->playlist, mpd_entity_get_song(entity)); mpd_entity_free(entity); } c->playlist.version = mpd_status_get_queue_version(c->status); c->song = NULL; return mpdclient_finish_command(c); } /* update playlist (plchanges) */ bool mpdclient_playlist_update_changes(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; mpd_send_queue_changes_meta(connection, c->playlist.version); struct mpd_song *song; while ((song = mpd_recv_song(connection)) != NULL) { int pos = mpd_song_get_pos(song); if (pos >= 0 && (guint)pos < c->playlist.list->len) { /* update song */ playlist_replace(&c->playlist, pos, song); } else { /* add a new song */ playlist_append(&c->playlist, song); } mpd_song_free(song); } /* remove trailing songs */ unsigned length = mpd_status_get_queue_length(c->status); while (length < c->playlist.list->len) { guint pos = c->playlist.list->len - 1; /* Remove the last playlist entry */ playlist_remove(&c->playlist, pos); } c->song = NULL; c->playlist.version = mpd_status_get_queue_version(c->status); return mpdclient_finish_command(c); } /****************************************************************************/ /*** Filelist functions *****************************************************/ /****************************************************************************/ bool mpdclient_filelist_add_all(struct mpdclient *c, struct filelist *fl) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; if (filelist_is_empty(fl)) return true; mpd_command_list_begin(connection, false); for (unsigned i = 0; i < filelist_length(fl); ++i) { struct filelist_entry *entry = filelist_get(fl, i); struct mpd_entity *entity = entry->entity; if (entity != NULL && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const struct mpd_song *song = mpd_entity_get_song(entity); mpd_send_add(connection, mpd_song_get_uri(song)); } } mpd_command_list_end(connection); return mpdclient_finish_command(c); } ncmpc-0.27/src/mpdclient.h0000644000076400001440000001217313065545364012421 00000000000000#ifndef MPDCLIENT_H #define MPDCLIENT_H #include "config.h" #include "playlist.h" #include "Compiler.h" #include struct filelist; struct mpdclient { #ifdef ENABLE_ASYNC_CONNECT /** * These settings are used to connect to MPD asynchronously. */ struct mpd_settings *settings; #ifndef WIN32 /** * A second set of settings, just in case #settings did not * work. This is only used if #settings refers to a local * socket path, and this one is supposed to be a fallback to * IP on the default port (6600). */ struct mpd_settings *settings2; #endif #else const char *host; unsigned port; #endif unsigned timeout_ms; const char *password; /* playlist */ struct mpdclient_playlist playlist; #ifdef ENABLE_ASYNC_CONNECT struct aconnect *async_connect; #endif struct mpd_connection *connection; /** * Tracks idle events. It is automatically called by * mpdclient_get_connection(). */ struct mpd_glib_source *source; struct mpd_status *status; const struct mpd_song *song; /** * The GLib source id which re-enters MPD idle mode before the * next main loop interation. */ unsigned enter_idle_source_id; /** * This attribute is incremented whenever the connection changes * (i.e. on disconnection and (re-)connection). */ unsigned connection_id; int volume; /** * A bit mask of idle events occurred since the last update. */ enum mpd_idle events; #if defined(ENABLE_ASYNC_CONNECT) && !defined(WIN32) bool connecting2; #endif /** * This attribute is true when the connection is currently in * "idle" mode, and the #mpd_glib_source waits for an event. */ bool idle; /** * Is MPD currently playing? */ bool playing; }; enum { /** * all idle events the version of libmpdclient, ncmpc is compiled * against, supports */ MPD_IDLE_ALL = MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST | MPD_IDLE_QUEUE | MPD_IDLE_PLAYER | MPD_IDLE_MIXER | MPD_IDLE_OUTPUT | MPD_IDLE_OPTIONS | MPD_IDLE_UPDATE | MPD_IDLE_STICKER | MPD_IDLE_SUBSCRIPTION | MPD_IDLE_MESSAGE }; /** functions ***************************************************************/ bool mpdclient_handle_error(struct mpdclient *c); static inline bool mpdclient_finish_command(struct mpdclient *c) { return mpd_response_finish(c->connection) ? true : mpdclient_handle_error(c); } struct mpdclient * mpdclient_new(const gchar *host, unsigned port, unsigned timeout_ms, const gchar *password); void mpdclient_free(struct mpdclient *c); /** * Determine a human-readable "name" of the settings currently used to * connect to MPD. * * @return an allocated string that needs to be freed (with g_free()) * by the caller */ char * mpdclient_settings_name(const struct mpdclient *c); gcc_pure static inline bool mpdclient_is_connected(const struct mpdclient *c) { return c->connection != NULL; } /** * Is this object "dead"? i.e. not connected and not currently doing * anything to connect. */ gcc_pure static inline bool mpdclient_is_dead(const struct mpdclient *c) { return c->connection == NULL #ifdef ENABLE_ASYNC_CONNECT && c->async_connect == NULL #endif ; } gcc_pure static inline bool mpdclient_is_playing(const struct mpdclient *c) { return c->status != NULL && (mpd_status_get_state(c->status) == MPD_STATE_PLAY || mpd_status_get_state(c->status) == MPD_STATE_PAUSE); } gcc_pure static inline const struct mpd_song * mpdclient_get_current_song(const struct mpdclient *c) { return c->song != NULL && mpdclient_is_playing(c) ? c->song : NULL; } void mpdclient_connect(struct mpdclient *c); void mpdclient_disconnect(struct mpdclient *c); bool mpdclient_update(struct mpdclient *c); struct mpd_connection * mpdclient_get_connection(struct mpdclient *c); /*** MPD Commands **********************************************************/ bool mpdclient_cmd_crop(struct mpdclient *c); bool mpdclient_cmd_clear(struct mpdclient *c); bool mpdclient_cmd_volume(struct mpdclient *c, gint value); bool mpdclient_cmd_volume_up(struct mpdclient *c); bool mpdclient_cmd_volume_down(struct mpdclient *c); bool mpdclient_cmd_add_path(struct mpdclient *c, const gchar *path); bool mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song); bool mpdclient_cmd_delete(struct mpdclient *c, gint index); bool mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end); bool mpdclient_cmd_move(struct mpdclient *c, unsigned dest, unsigned src); bool mpdclient_cmd_subscribe(struct mpdclient *c, const char *channel); bool mpdclient_cmd_unsubscribe(struct mpdclient *c, const char *channel); bool mpdclient_cmd_send_message(struct mpdclient *c, const char *channel, const char *text); bool mpdclient_send_read_messages(struct mpdclient *c); struct mpd_message * mpdclient_recv_message(struct mpdclient *c); /*** playlist functions **************************************************/ /* update the complete playlist */ bool mpdclient_playlist_update(struct mpdclient *c); /* get playlist changes */ bool mpdclient_playlist_update_changes(struct mpdclient *c); /* add all songs in filelist to the playlist */ bool mpdclient_filelist_add_all(struct mpdclient *c, struct filelist *fl); #endif ncmpc-0.27/src/callbacks.c0000644000076400001440000000345413063057006012343 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "callbacks.h" #include "screen_utils.h" #include "screen_status.h" #include "mpdclient.h" static bool _mpdclient_auth_callback(struct mpdclient *c, gint recursion) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; mpd_connection_clear_error(connection); if (recursion > 2) return false; char *password = screen_read_password(NULL); if (password == NULL) return false; mpd_send_password(connection, password); g_free(password); mpd_response_finish(connection); mpdclient_update(c); if (mpd_connection_get_error(connection) == MPD_ERROR_SERVER && mpd_connection_get_server_error(connection) == MPD_SERVER_ERROR_PASSWORD) return _mpdclient_auth_callback(c, ++recursion); return true; } bool mpdclient_auth_callback(struct mpdclient *c) { return _mpdclient_auth_callback(c, 0); } void mpdclient_error_callback(const char *message) { screen_status_message(message); screen_bell(); doupdate(); } ncmpc-0.27/src/callbacks.h0000644000076400001440000000326513063062241012345 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_CALLBACKS_H #define NCMPC_CALLBACKS_H #include #include struct mpdclient; /** * A connection to MPD has been established. */ void mpdclient_connected_callback(void); /** * An attempt to connect to MPD has failed. * mpdclient_error_callback() has been called already. */ void mpdclient_failed_callback(void); /** * The connection to MPD was lost. If this was due to an error, then * mpdclient_error_callback() has already been called. */ void mpdclient_lost_callback(void); /** * To be implemented by the application: mpdclient.c calls this to * display an error message. * * @param message a human-readable error message in the locale charset */ void mpdclient_error_callback(const char *message); bool mpdclient_auth_callback(struct mpdclient *c); void mpdclient_idle_callback(enum mpd_idle events); #endif ncmpc-0.27/src/playlist.c0000644000076400001440000000734713062774214012300 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "playlist.h" #include void playlist_init(struct mpdclient_playlist *playlist) { playlist->version = 0; playlist->list = g_ptr_array_sized_new(1024); } void playlist_clear(struct mpdclient_playlist *playlist) { playlist->version = 0; for (unsigned i = 0; i < playlist->list->len; ++i) { struct mpd_song *song = playlist_get(playlist, i); mpd_song_free(song); } g_ptr_array_set_size(playlist->list, 0); } gint mpdclient_playlist_free(struct mpdclient_playlist *playlist) { if (playlist->list != NULL) { playlist_clear(playlist); g_ptr_array_free(playlist->list, TRUE); } memset(playlist, 0, sizeof(*playlist)); return 0; } const struct mpd_song * playlist_get_song(const struct mpdclient_playlist *playlist, gint idx) { if (idx < 0 || (guint)idx >= playlist_length(playlist)) return NULL; return playlist_get(playlist, idx); } void playlist_move(struct mpdclient_playlist *playlist, unsigned dest, unsigned src) { assert(playlist != NULL); assert(src < playlist_length(playlist)); assert(dest < playlist_length(playlist)); assert(src != dest); struct mpd_song *song = playlist_get(playlist, src); if (src < dest) { memmove(&playlist->list->pdata[src], &playlist->list->pdata[src + 1], sizeof(playlist->list->pdata[0]) * (dest - src)); playlist->list->pdata[dest] = song; } else { memmove(&playlist->list->pdata[dest + 1], &playlist->list->pdata[dest], sizeof(playlist->list->pdata[0]) * (src - dest)); playlist->list->pdata[dest] = song; } } const struct mpd_song * playlist_lookup_song(const struct mpdclient_playlist *playlist, unsigned id) { for (guint i = 0; i < playlist_length(playlist); ++i) { struct mpd_song *song = playlist_get(playlist, i); if (mpd_song_get_id(song) == id) return song; } return NULL; } gint playlist_get_index(const struct mpdclient_playlist *playlist, const struct mpd_song *song) { for (guint i = 0; i < playlist_length(playlist); ++i) { if (playlist_get(playlist, i) == song) return (gint)i; } return -1; } gint playlist_get_index_from_id(const struct mpdclient_playlist *playlist, unsigned id) { for (guint i = 0; i < playlist_length(playlist); ++i) { const struct mpd_song *song = playlist_get(playlist, i); if (mpd_song_get_id(song) == id) return (gint)i; } return -1; } gint playlist_get_index_from_file(const struct mpdclient_playlist *playlist, const gchar *filename) { for (guint i = 0; i < playlist_length(playlist); ++i) { const struct mpd_song *song = playlist_get(playlist, i); if (strcmp(mpd_song_get_uri(song), filename) == 0) return (gint)i; } return -1; } gint playlist_get_id_from_uri(const struct mpdclient_playlist *playlist, const gchar *uri) { for (guint i = 0; i < playlist_length(playlist); ++i) { const struct mpd_song *song = playlist_get(playlist, i); if (strcmp(mpd_song_get_uri(song), uri) == 0) return mpd_song_get_id(song); } return -1; } ncmpc-0.27/src/playlist.h0000644000076400001440000000752213062774214012300 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef MPDCLIENT_PLAYLIST_H #define MPDCLIENT_PLAYLIST_H #include "Compiler.h" #include #include #include struct mpdclient_playlist { /* queue version number (obtained from mpd_status) */ unsigned version; /* the list */ GPtrArray *list; }; void playlist_init(struct mpdclient_playlist *playlist); /** remove and free all songs in the playlist */ void playlist_clear(struct mpdclient_playlist *playlist); /* free a playlist */ gint mpdclient_playlist_free(struct mpdclient_playlist *playlist); static inline guint playlist_length(const struct mpdclient_playlist *playlist) { assert(playlist != NULL); assert(playlist->list != NULL); return playlist->list->len; } static inline gboolean playlist_is_empty(const struct mpdclient_playlist *playlist) { return playlist_length(playlist) == 0; } static inline struct mpd_song * playlist_get(const struct mpdclient_playlist *playlist, guint idx) { assert(idx < playlist_length(playlist)); return g_ptr_array_index(playlist->list, idx); } static inline void playlist_append(struct mpdclient_playlist *playlist, const struct mpd_song *song) { g_ptr_array_add(playlist->list, mpd_song_dup(song)); } static inline void playlist_set(const struct mpdclient_playlist *playlist, guint idx, const struct mpd_song *song) { assert(idx < playlist_length(playlist)); g_ptr_array_index(playlist->list, idx) = mpd_song_dup(song); } static inline void playlist_replace(struct mpdclient_playlist *playlist, guint idx, const struct mpd_song *song) { mpd_song_free(playlist_get(playlist, idx)); playlist_set(playlist, idx, song); } static inline struct mpd_song * playlist_remove_reuse(struct mpdclient_playlist *playlist, guint idx) { return g_ptr_array_remove_index(playlist->list, idx); } static inline void playlist_remove(struct mpdclient_playlist *playlist, guint idx) { mpd_song_free(playlist_remove_reuse(playlist, idx)); } void playlist_move(struct mpdclient_playlist *playlist, unsigned dest, unsigned src); const struct mpd_song * playlist_lookup_song(const struct mpdclient_playlist *playlist, unsigned id); const struct mpd_song * playlist_get_song(const struct mpdclient_playlist *playlist, gint index); gint playlist_get_index(const struct mpdclient_playlist *playlist, const struct mpd_song *song); gint playlist_get_index_from_id(const struct mpdclient_playlist *playlist, unsigned id); gint playlist_get_index_from_file(const struct mpdclient_playlist *playlist, const gchar *filename); static inline gint playlist_get_index_from_same_song(const struct mpdclient_playlist *playlist, const struct mpd_song *song) { return playlist_get_index_from_file(playlist, mpd_song_get_uri(song)); } gcc_pure gint playlist_get_id_from_uri(const struct mpdclient_playlist *playlist, const gchar *uri); gcc_pure static inline gint playlist_get_id_from_same_song(const struct mpdclient_playlist *playlist, const struct mpd_song *song) { return playlist_get_id_from_uri(playlist, mpd_song_get_uri(song)); } #endif ncmpc-0.27/src/filelist.c0000644000076400001440000001536613062774214012252 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "filelist.h" #include #include #include #include struct filelist * filelist_new(void) { struct filelist *filelist = g_malloc(sizeof(*filelist)); filelist->entries = g_ptr_array_new(); return filelist; } void filelist_free(struct filelist *filelist) { for (unsigned i = 0; i < filelist_length(filelist); ++i) { struct filelist_entry *entry = filelist_get(filelist, i); if (entry->entity) mpd_entity_free(entry->entity); g_slice_free(struct filelist_entry, entry); } g_ptr_array_free(filelist->entries, TRUE); g_free(filelist); } struct filelist_entry * filelist_append(struct filelist *filelist, struct mpd_entity *entity) { struct filelist_entry *entry = g_slice_new(struct filelist_entry); entry->flags = 0; entry->entity = entity; g_ptr_array_add(filelist->entries, entry); return entry; } void filelist_move(struct filelist *filelist, struct filelist *from) { for (unsigned i = 0; i < filelist_length(from); ++i) g_ptr_array_add(filelist->entries, g_ptr_array_index(from->entries, i)); g_ptr_array_set_size(from->entries, 0); } static gint filelist_compare_indirect(gconstpointer ap, gconstpointer bp, gpointer data) { GCompareFunc compare_func = data; gconstpointer a = *(const gconstpointer*)ap; gconstpointer b = *(const gconstpointer*)bp; return compare_func(a, b); } gint compare_filelist_entry_path(gconstpointer filelist_entry1, gconstpointer filelist_entry2) { const struct mpd_entity *e1, *e2; e1 = ((const struct filelist_entry *)filelist_entry1)->entity; e2 = ((const struct filelist_entry *)filelist_entry2)->entity; int n = 0; if (e1 != NULL && e2 != NULL && mpd_entity_get_type(e1) == mpd_entity_get_type(e2)) { switch (mpd_entity_get_type(e1)) { case MPD_ENTITY_TYPE_UNKNOWN: break; case MPD_ENTITY_TYPE_DIRECTORY: n = g_utf8_collate(mpd_directory_get_path(mpd_entity_get_directory(e1)), mpd_directory_get_path(mpd_entity_get_directory(e2))); break; case MPD_ENTITY_TYPE_SONG: break; case MPD_ENTITY_TYPE_PLAYLIST: n = g_utf8_collate(mpd_playlist_get_path(mpd_entity_get_playlist(e1)), mpd_playlist_get_path(mpd_entity_get_playlist(e2))); } } return n; } /* Sorts the whole filelist, at the moment used by filelist_search */ void filelist_sort_all(struct filelist *filelist, GCompareFunc compare_func) { g_ptr_array_sort_with_data(filelist->entries, filelist_compare_indirect, compare_func); } /* Only sorts the directories and playlist files. * The songs stay in the order it came from mpd. */ void filelist_sort_dir_play(struct filelist *filelist, GCompareFunc compare_func) { const struct mpd_entity *iter; assert(filelist && filelist->entries); if (filelist->entries->len < 2) return; /* If the first entry is NULL, skip it, because NULL stands for "[..]" */ iter = ((struct filelist_entry*) g_ptr_array_index(filelist->entries, 0))->entity; unsigned first = iter == NULL ? 1 : 0, last; /* find the last directory entry */ for (last = first+1; last < filelist->entries->len; last++) { iter = ((struct filelist_entry*) g_ptr_array_index(filelist->entries, last))->entity; if (mpd_entity_get_type(iter) != MPD_ENTITY_TYPE_DIRECTORY) break; } if (last == filelist->entries->len - 1) last++; /* sort the directories */ if (last - first > 1) g_qsort_with_data(filelist->entries->pdata + first, last - first, sizeof(gpointer), filelist_compare_indirect, compare_func); /* find the first playlist entry */ for (first = last; first < filelist->entries->len; first++) { iter = ((struct filelist_entry*) g_ptr_array_index(filelist->entries, first))->entity; if (mpd_entity_get_type(iter) == MPD_ENTITY_TYPE_PLAYLIST) break; } /* sort the playlist entries */ if (filelist->entries->len - first > 1) g_qsort_with_data(filelist->entries->pdata + first, filelist->entries->len - first, sizeof(gpointer), filelist_compare_indirect, compare_func); } void filelist_no_duplicates(struct filelist *filelist) { for (int i = filelist_length(filelist) - 1; i >= 0; --i) { struct filelist_entry *entry = filelist_get(filelist, i); const struct mpd_song *song; if (entry->entity == NULL || mpd_entity_get_type(entry->entity) != MPD_ENTITY_TYPE_SONG) continue; song = mpd_entity_get_song(entry->entity); if (filelist_find_song(filelist, song) < i) { g_ptr_array_remove_index(filelist->entries, i); mpd_entity_free(entry->entity); g_slice_free(struct filelist_entry, entry); } } } static bool same_song(const struct mpd_song *a, const struct mpd_song *b) { return strcmp(mpd_song_get_uri(a), mpd_song_get_uri(b)) == 0; } int filelist_find_song(const struct filelist *fl, const struct mpd_song *song) { assert(song != NULL); for (unsigned i = 0; i < filelist_length(fl); ++i) { struct filelist_entry *entry = filelist_get(fl, i); const struct mpd_entity *entity = entry->entity; if (entity != NULL && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const struct mpd_song *song2 = mpd_entity_get_song(entity); if (same_song(song, song2)) return i; } } return -1; } int filelist_find_directory(const struct filelist *filelist, const char *name) { assert(name != NULL); for (unsigned i = 0; i < filelist_length(filelist); ++i) { struct filelist_entry *entry = filelist_get(filelist, i); const struct mpd_entity *entity = entry->entity; if (entity != NULL && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && strcmp(mpd_directory_get_path(mpd_entity_get_directory(entity)), name) == 0) return i; } return -1; } void filelist_recv(struct filelist *filelist, struct mpd_connection *connection) { struct mpd_entity *entity; while ((entity = mpd_recv_entity(connection)) != NULL) filelist_append(filelist, entity); } struct filelist * filelist_new_recv(struct mpd_connection *connection) { struct filelist *filelist = filelist_new(); filelist_recv(filelist, connection); return filelist; } ncmpc-0.27/src/filelist.h0000644000076400001440000000560713062774214012254 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef FILELIST_H #define FILELIST_H #include "Compiler.h" #include struct mpd_connection; struct mpd_song; struct filelist_entry { guint flags; struct mpd_entity *entity; }; struct filelist { /* the list */ GPtrArray *entries; }; struct filelist * filelist_new(void); void filelist_free(struct filelist *filelist); static inline guint filelist_length(const struct filelist *filelist) { return filelist->entries->len; } static inline gboolean filelist_is_empty(const struct filelist *filelist) { return filelist_length(filelist) == 0; } gcc_pure static inline struct filelist_entry * filelist_get(const struct filelist *filelist, guint i) { return g_ptr_array_index(filelist->entries, i); } struct filelist_entry * filelist_append(struct filelist *filelist, struct mpd_entity *entity); void filelist_move(struct filelist *filelist, struct filelist *from); gcc_pure gint compare_filelist_entry_path(gconstpointer filelist_entry1, gconstpointer filelist_entry2); /* Sorts the whole filelist, at the moment used by filelist_search */ void filelist_sort_all(struct filelist *filelist, GCompareFunc compare_func); /* Only sorts the directories and playlist files. * The songs stay in the order it came from mpd. */ void filelist_sort_dir_play(struct filelist *filelist, GCompareFunc compare_func); /** * Eliminates duplicate songs from the filelist. */ void filelist_no_duplicates(struct filelist *filelist); gcc_pure int filelist_find_song(const struct filelist *flist, const struct mpd_song *song); gcc_pure int filelist_find_directory(const struct filelist *filelist, const char *name); /** * Receives entities from the connection, and appends them to the * specified filelist. This does not finish the response, and does * not check for errors. */ void filelist_recv(struct filelist *filelist, struct mpd_connection *connection); /** * Creates a new filelist and receives entities from the connection. * This does not finish the response, and does not check for errors. */ struct filelist * filelist_new_recv(struct mpd_connection *connection); #endif ncmpc-0.27/src/options.c0000644000076400001440000002365113062774214012126 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "options.h" #include "config.h" #include "defaults.h" #include "charset.h" #include "command.h" #include "conf.h" #include "i18n.h" #include #include #include #include #define ERROR_UNKNOWN_OPTION 0x01 #define ERROR_BAD_ARGUMENT 0x02 #define ERROR_GOT_ARGUMENT 0x03 #define ERROR_MISSING_ARGUMENT 0x04 typedef struct { int shortopt; const char *longopt; const char *argument; const char *descrition; } arg_opt_t; typedef void (*option_callback_fn_t)(int c, const char *arg); options_t options = { .crossfade_time = DEFAULT_CROSSFADE_TIME, .seek_time = 1, #ifdef ENABLE_LYRICS_SCREEN .lyrics_timeout = DEFAULT_LYRICS_TIMEOUT, .lyrics_autosave = false, .lyrics_show_plugin = false, .text_editor_ask = true, #endif .find_wrap = true, .scroll_offset = 0, .wide_cursor = true, .audible_bell = true, .bell_on_wrap = true, .status_message_time = 3, .timeout_ms = DEFAULT_MPD_TIMEOUT, #ifndef NCMPC_MINI .scroll = DEFAULT_SCROLL, .welcome_screen_list = true, .jump_prefix_only = true, .second_column = true, #endif }; static const arg_opt_t option_table[] = { { '?', "help", NULL, "Show this help message" }, { 'V', "version", NULL, "Display version information" }, { 'c', "colors", NULL, "Enable colors" }, { 'C', "no-colors", NULL, "Disable colors" }, #ifdef HAVE_GETMOUSE { 'm', "mouse", NULL, "Enable mouse" }, { 'M', "no-mouse", NULL, "Disable mouse" }, #endif { 'e', "exit", NULL, "Exit on connection errors" }, { 'p', "port", "PORT", "Connect to server on port" }, { 'h', "host", "HOST", "Connect to server on host" }, { 'P', "password","PASSWORD", "Connect with password" }, { 'f', "config", "FILE", "Read configuration from file" }, { 'k', "key-file","FILE", "Read key bindings from file" }, #ifndef NDEBUG { 'K', "dump-keys", NULL, "Dump key bindings to stdout" }, #endif }; static const unsigned option_table_size = sizeof(option_table) / sizeof(option_table[0]); static const arg_opt_t * lookup_option(int s, char *l) { unsigned i; for (i = 0; i < option_table_size; ++i) { if (l && strcmp(l, option_table[i].longopt) == 0) return &option_table[i]; if (s && s == option_table[i].shortopt) return &option_table[i]; } return NULL; } static void option_error(int error, const char *option, const char *arg) { switch (error) { case ERROR_UNKNOWN_OPTION: fprintf(stderr, PACKAGE ": invalid option %s\n", option); break; case ERROR_BAD_ARGUMENT: fprintf(stderr, PACKAGE ": bad argument: %s\n", option); break; case ERROR_GOT_ARGUMENT: fprintf(stderr, PACKAGE ": invalid option %s=%s\n", option, arg); break; case ERROR_MISSING_ARGUMENT: fprintf(stderr, PACKAGE ": missing value for %s option\n", option); break; default: fprintf(stderr, PACKAGE ": internal error %d\n", error); break; } exit(EXIT_FAILURE); } static void display_help(void) { printf("Usage: %s [OPTION]...\n", PACKAGE); for (unsigned i = 0; i < option_table_size; ++i) { char tmp[32]; if (option_table[i].argument) g_snprintf(tmp, sizeof(tmp), "%s=%s", option_table[i].longopt, option_table[i].argument); else g_strlcpy(tmp, option_table[i].longopt, 64); printf(" -%c, --%-20s %s\n", option_table[i].shortopt, tmp, option_table[i].descrition); } } static void handle_option(int c, const char *arg) { switch (c) { case '?': /* --help */ display_help(); exit(EXIT_SUCCESS); case 'V': /* --version */ puts(PACKAGE " version: " VERSION "\n" "build options:" #ifdef NCMPC_MINI " mini" #endif #ifndef NDEBUG " debug" #endif #ifdef ENABLE_MULTIBYTE " multibyte" #endif #ifdef HAVE_CURSES_ENHANCED " wide" #endif #ifdef ENABLE_LOCALE " locale" #endif #ifdef ENABLE_NLS " nls" #endif #ifdef ENABLE_COLORS " colors" #else " no-colors" #endif #ifdef ENABLE_LIRC " lirc" #endif #ifdef HAVE_GETMOUSE " getmouse" #endif #ifdef ENABLE_ARTIST_SCREEN " artist-screen" #endif #ifdef ENABLE_HELP_SCREEN " help-screen" #endif #ifdef ENABLE_SEARCH_SCREEN " search-screen" #endif #ifdef ENABLE_SONG_SCREEN " song-screen" #endif #ifdef ENABLE_KEYDEF_SCREEN " key-screen" #endif #ifdef ENABLE_LYRICS_SCREEN " lyrics-screen" #endif #ifdef ENABLE_OUTPUTS_SCREEN " outputs-screen" #endif #ifdef ENABLE_CHAT_SCREEN " chat-screen" #endif "\n"); #ifndef NCMPC_MINI { char *user_conf = build_user_conf_filename(); char *system_conf = build_system_conf_filename(); printf("configuration files:\n %s\n %s\n\n", user_conf, system_conf); g_free(user_conf); g_free(system_conf); } if (strcmp("translator-credits", _("translator-credits")) != 0) /* To translators: these credits are shown when ncmpc is started with "--version" */ printf("\n%s\n", _("translator-credits")); #endif exit(EXIT_SUCCESS); case 'c': /* --colors */ #ifdef ENABLE_COLORS options.enable_colors = true; #endif break; case 'C': /* --no-colors */ #ifdef ENABLE_COLORS options.enable_colors = false; #endif break; case 'm': /* --mouse */ #ifdef HAVE_GETMOUSE options.enable_mouse = true; #endif break; case 'M': /* --no-mouse */ #ifdef HAVE_GETMOUSE options.enable_mouse = false; #endif break; case 'e': /* --exit */ /* deprecated */ break; case 'p': /* --port */ options.port = atoi(arg); break; case 'h': /* --host */ g_free(options.host); options.host = g_strdup(arg); break; case 'P': /* --password */ g_free(options.password); options.password = locale_to_utf8(arg); break; case 'f': /* --config */ g_free(options.config_file); options.config_file = g_strdup(arg); break; case 'k': /* --key-file */ g_free(options.key_file); options.key_file = g_strdup(arg); break; #if !defined(NDEBUG) && !defined(NCMPC_MINI) case 'K': /* --dump-keys */ read_configuration(); write_key_bindings(stdout, KEYDEF_WRITE_ALL | KEYDEF_COMMENT_ALL); exit(EXIT_SUCCESS); break; #endif default: fprintf(stderr,"Unknown Option %c = %s\n", c, arg); break; } } void options_parse(int argc, const char *argv[]) { const arg_opt_t *opt = NULL; option_callback_fn_t option_cb = handle_option; for (int i = 1; i < argc; i++) { const char *arg = argv[i]; size_t len = strlen(arg); /* check for a long option */ if (g_str_has_prefix(arg, "--")) { char *name, *value; /* make sure we got an argument for the previous option */ if( opt && opt->argument ) option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); /* retrieve a option argument */ if ((value=g_strrstr(arg+2, "="))) { *value = '\0'; name = g_strdup(arg); *value = '='; value++; } else name = g_strdup(arg); /* check if the option exists */ if( (opt=lookup_option(0, name+2)) == NULL ) option_error(ERROR_UNKNOWN_OPTION, name, NULL); g_free(name); /* abort if we got an argument to the option and don't want one */ if( value && opt->argument==NULL ) option_error(ERROR_GOT_ARGUMENT, arg, value); /* execute option callback */ if (value || opt->argument==NULL) { option_cb (opt->shortopt, value); opt = NULL; } } /* check for short options */ else if (len>=2 && g_str_has_prefix(arg, "-")) { size_t j; for(j=1; jargument) option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); /* check if the option exists */ if ((opt=lookup_option(arg[j], NULL)) == NULL) option_error(ERROR_UNKNOWN_OPTION, arg, NULL); /* if no option argument is needed execute callback */ if (opt->argument == NULL) { option_cb (opt->shortopt, NULL); opt = NULL; } } } else { /* is this a option argument? */ if (opt && opt->argument) { option_cb (opt->shortopt, arg); opt = NULL; } else option_error(ERROR_BAD_ARGUMENT, arg, NULL); } } if (opt && opt->argument == NULL) option_cb (opt->shortopt, NULL); else if (opt && opt->argument) option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); if (!options.host && getenv("MPD_HOST")) { g_free(options.host); options.host = g_strdup(getenv("MPD_HOST")); } } void options_init(void) { /* default option values */ options.list_format = g_strdup(DEFAULT_LIST_FORMAT); options.search_format = NULL; options.status_format = g_strdup(DEFAULT_STATUS_FORMAT); options.screen_list = g_strsplit_set(DEFAULT_SCREEN_LIST, " ", 0); #ifndef NCMPC_MINI options.scroll_sep = g_strdup(DEFAULT_SCROLL_SEP); #endif if (getenv("MPD_TIMEOUT") != NULL) /* let libmpdclient parse the environment variable */ options.timeout_ms = 0; } void options_deinit(void) { g_free(options.host); g_free(options.username); g_free(options.password); g_free(options.config_file); g_free(options.key_file); g_free(options.list_format); g_free(options.search_format); g_free(options.status_format); g_strfreev(options.screen_list); #ifndef NCMPC_MINI g_free(options.xterm_title_format); g_free(options.scroll_sep); #endif #ifdef ENABLE_LYRICS_SCREEN g_free(options.text_editor); #endif #ifdef ENABLE_CHAT_SCREEN g_free(options.chat_prefix); #endif } ncmpc-0.27/src/options.h0000644000076400001440000000423113063774537012135 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef OPTIONS_H #define OPTIONS_H #include "config.h" #include #include typedef struct { char *host; char *username; char *password; char *config_file; char *key_file; char *list_format; char *search_format; char *status_format; #ifndef NCMPC_MINI char *xterm_title_format; char *scroll_sep; #endif char **screen_list; bool display_remaining_time; int port; int timeout_ms; int crossfade_time; int search_mode; int hide_cursor; int seek_time; #ifdef ENABLE_LYRICS_SCREEN int lyrics_timeout; bool lyrics_autosave; bool lyrics_show_plugin; char *text_editor; bool text_editor_ask; #endif #ifdef ENABLE_CHAT_SCREEN char *chat_prefix; #endif bool find_wrap; bool find_show_last_pattern; bool list_wrap; int scroll_offset; bool auto_center; bool wide_cursor; bool hardware_cursor; #ifdef ENABLE_COLORS bool enable_colors; #endif bool audible_bell; bool visible_bell; bool bell_on_wrap; GTime status_message_time; #ifndef NCMPC_MINI bool enable_xterm_title; #endif #ifdef HAVE_GETMOUSE bool enable_mouse; #endif #ifndef NCMPC_MINI bool scroll; bool visible_bitrate; bool welcome_screen_list; bool jump_prefix_only; bool second_column; #endif } options_t; extern options_t options; void options_init(void); void options_deinit(void); void options_parse(int argc, const char **argv); #endif ncmpc-0.27/src/command.c0000644000076400001440000003303613063735331012045 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "command.h" #include "i18n.h" #include "ncmpc_curses.h" #include #include #include #include #include #include #include #include #define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */ #define BS KEY_BACKSPACE #define DEL KEY_DC #define UP KEY_UP #define DWN KEY_DOWN #define LEFT KEY_LEFT #define RGHT KEY_RIGHT #define HOME KEY_HOME #define END KEY_END #define PGDN KEY_NPAGE #define PGUP KEY_PPAGE #define TAB 0x09 #define STAB 0x161 #define ESC 0x1B #define RET '\r' #define F1 KEY_F(1) #define F2 KEY_F(2) #define F3 KEY_F(3) #define F4 KEY_F(4) #define F5 KEY_F(5) #define F6 KEY_F(6) #define F7 KEY_F(7) #define F8 KEY_F(8) #define F9 KEY_F(9) #define C(x) KEY_CTL(x) static command_definition_t cmds[] = { #ifdef ENABLE_KEYDEF_SCREEN { {'K', 0, 0 }, 0, CMD_SCREEN_KEYDEF, "screen-keyedit", N_("Key configuration screen") }, #endif { { 'q', 'Q', C('C') }, 0, CMD_QUIT, "quit", N_("Quit") }, /* movement */ { { UP, 'k', 0 }, 0, CMD_LIST_PREVIOUS, "up", N_("Move cursor up") }, { { DWN, 'j', 0 }, 0, CMD_LIST_NEXT, "down", N_("Move cursor down") }, { { 'H', 0, 0 }, 0, CMD_LIST_TOP, "top", N_("Move cursor to the top of screen") }, { { 'M', 0, 0 }, 0, CMD_LIST_MIDDLE, "middle", N_("Move cursor to the middle of screen") }, { { 'L', 0, 0 }, 0, CMD_LIST_BOTTOM, "bottom", N_("Move cursor to the bottom of screen") }, { { HOME, C('A'), 0 }, 0, CMD_LIST_FIRST, "home", N_("Move cursor to the top of the list") }, { { END, C('E'), 0 }, 0, CMD_LIST_LAST, "end", N_("Move cursor to the bottom of the list") }, { { PGUP, 0, 0 }, 0, CMD_LIST_PREVIOUS_PAGE, "pgup", N_("Page up") }, { { PGDN, 0, 0 }, 0, CMD_LIST_NEXT_PAGE, "pgdn", N_("Page down") }, { { 'v', 0, 0 }, 0, CMD_LIST_RANGE_SELECT, "range-select", N_("Range selection") }, { { C('N'), 0, 0 }, 0, CMD_LIST_SCROLL_DOWN_LINE, "scroll-down-line", N_("Scroll down one line") }, { { C('B'), 0, 0 }, 0, CMD_LIST_SCROLL_UP_LINE, "scroll-up-line", N_("Scroll up one line") }, { { 'N', 0, 0 }, 0, CMD_LIST_SCROLL_DOWN_HALF, "scroll-down-half", N_("Scroll up half a screen") }, { { 'B', 0, 0 }, 0, CMD_LIST_SCROLL_UP_HALF, "scroll-up-half", N_("Scroll down half a screen") }, { { 'l', 0, 0 }, 0, CMD_SELECT_PLAYING, "select-playing", N_("Select currently playing song") }, /* basic screens */ { { '1', F1, 'h' }, 0, CMD_SCREEN_HELP, "screen-help", N_("Help screen") }, { { '2', F2, 0 }, 0, CMD_SCREEN_PLAY, "screen-playlist", N_("Queue screen") }, { { '3', F3, 0 }, 0, CMD_SCREEN_FILE, "screen-browse", N_("Browse screen") }, /* player commands */ { { RET, 0, 0 }, 0, CMD_PLAY, "play", N_("Play/Enter directory") }, { { 'P', 0, 0 }, 0, CMD_PAUSE,"pause", N_("Pause") }, { { 's', BS, 0 }, 0, CMD_STOP, "stop", N_("Stop") }, { { 'o', 0, 0 }, 0, CMD_CROP, "crop", N_("Crop") }, { { '>', 0, 0 }, 0, CMD_TRACK_NEXT, "next", N_("Next track") }, { { '<', 0, 0 }, 0, CMD_TRACK_PREVIOUS, "prev", N_("Previous track") }, { { 'f', 0, 0 }, 0, CMD_SEEK_FORWARD, "seek-forward", N_("Seek forward") }, { { 'b', 0, 0 }, 0, CMD_SEEK_BACKWARD, "seek-backward", N_("Seek backward") }, { { '+', RGHT, 0 }, 0, CMD_VOLUME_UP, "volume-up", N_("Increase volume") }, { { '-', LEFT, 0 }, 0, CMD_VOLUME_DOWN, "volume-down", N_("Decrease volume") }, { { ' ', 0, 0 }, 0, CMD_SELECT, "select", N_("Select/deselect song in queue") }, { { 't', 0, 0 }, 0, CMD_SELECT_ALL, "select_all", N_("Select all listed items") }, { { DEL, 'd', 0 }, 0, CMD_DELETE, "delete", N_("Delete song from queue") }, { { 'Z', 0, 0 }, 0, CMD_SHUFFLE, "shuffle", N_("Shuffle queue") }, { { 'c', 0, 0 }, 0, CMD_CLEAR, "clear", N_("Clear queue") }, { { 'r', 0, 0 }, 0, CMD_REPEAT, "repeat", N_("Toggle repeat mode") }, { { 'z', 0, 0 }, 0, CMD_RANDOM, "random", N_("Toggle random mode") }, { { 'y', 0, 0 }, 0, CMD_SINGLE, "single", N_("Toggle single mode") }, { { 'C', 0, 0 }, 0, CMD_CONSUME, "consume", N_("Toggle consume mode") }, { { 'x', 0, 0 }, 0, CMD_CROSSFADE, "crossfade", N_("Toggle crossfade mode") }, { { C('U'), 0, 0 }, 0, CMD_DB_UPDATE, "db-update", N_("Start a music database update") }, { { 'S', 0, 0 }, 0, CMD_SAVE_PLAYLIST, "save", N_("Save queue") }, { { 'a', 0, 0 }, 0, CMD_ADD, "add", N_("Add url/file to queue") }, { { '!', 0, 0 }, 0, CMD_GO_ROOT_DIRECTORY, "go-root-directory", N_("Go to root directory") }, { { '"', 0, 0 }, 0, CMD_GO_PARENT_DIRECTORY, "go-parent-directory", N_("Go to parent directory") }, { { 'G', 0, 0 }, 0, CMD_LOCATE, "locate", N_("Locate song in browser") }, /* lists */ { { C('K'), 0, 0 }, 0, CMD_LIST_MOVE_UP, "move-up", N_("Move item up") }, { { C('J'), 0, 0 }, 0, CMD_LIST_MOVE_DOWN, "move-down", N_("Move item down") }, { { C('L'), 0, 0 }, 0, CMD_SCREEN_UPDATE, "update", N_("Refresh screen") }, /* ncmpc options */ { { 'w', 0, 0 }, 0, CMD_TOGGLE_FIND_WRAP, "wrap-mode", /* translators: toggle between wrapping and non-wrapping search */ N_("Toggle find mode") }, { { 'U', 0, 0 }, 0, CMD_TOGGLE_AUTOCENTER, "autocenter-mode", /* translators: the auto center mode always centers the song currently being played */ N_("Toggle auto center mode") }, /* change screen */ { { TAB, 0, 0 }, 0, CMD_SCREEN_NEXT, "screen-next", N_("Next screen") }, { { STAB, 0, 0 }, 0, CMD_SCREEN_PREVIOUS, "screen-prev", N_("Previous screen") }, { { '`', 0, 0 }, 0, CMD_SCREEN_SWAP, "screen-swap", N_("Swap to most recent screen") }, /* find */ { { '/', 0, 0 }, 0, CMD_LIST_FIND, "find", N_("Forward find") }, { { 'n', 0, 0 }, 0, CMD_LIST_FIND_NEXT, "find-next", N_("Forward find next") }, { { '?', 0, 0 }, 0, CMD_LIST_RFIND, "rfind", N_("Backward find") }, { { 'p', 0, 0 }, 0, CMD_LIST_RFIND_NEXT, "rfind-next", N_("Backward find previous") }, { { '.', 0, 0 }, 0, CMD_LIST_JUMP, "jump", /* translators: this queries the user for a string * and jumps directly (while the user is typing) * to the entry which begins with this string */ N_("Jump to") }, /* extra screens */ #ifdef ENABLE_ARTIST_SCREEN { {'4', F4, 0 }, 0, CMD_SCREEN_ARTIST, "screen-artist", N_("Artist screen") }, #endif #ifdef ENABLE_SEARCH_SCREEN { {'5', F5, 0 }, 0, CMD_SCREEN_SEARCH, "screen-search", N_("Search screen") }, { {'m', 0, 0 }, 0, CMD_SEARCH_MODE, "search-mode", N_("Change search mode") }, #endif #ifdef ENABLE_SONG_SCREEN { { 'i', 0, 0 }, 0, CMD_SCREEN_SONG, "view", N_("View the selected and the currently playing song") }, #endif #ifdef ENABLE_LYRICS_SCREEN { {'7', F7, 0 }, 0, CMD_SCREEN_LYRICS, "screen-lyrics", N_("Lyrics screen") }, { {ESC, 0, 0 }, 0, CMD_INTERRUPT, "lyrics-interrupt", /* translators: interrupt the current background action, e.g. stop loading lyrics from the internet */ N_("Interrupt action") }, { {'u', 0, 0 }, 0, CMD_LYRICS_UPDATE, "lyrics-update", N_("Update Lyrics") }, /* this command may move out of #ifdef ENABLE_LYRICS_SCREEN at some point */ { {'e', 0, 0 }, 0, CMD_EDIT, "edit", N_("Edit the current item") }, #endif #ifdef ENABLE_OUTPUTS_SCREEN { {'8', F8, 0 }, 0, CMD_SCREEN_OUTPUTS, "screen-outputs", N_("Outputs screen") }, #endif #ifdef ENABLE_CHAT_SCREEN { {'9', F9, 0}, 0, CMD_SCREEN_CHAT, "screen-chat", N_("Chat screen") }, #endif { { -1, -1, -1 }, 0, CMD_NONE, NULL, NULL } }; #ifdef ENABLE_KEYDEF_SCREEN command_definition_t * get_command_definitions(void) { return cmds; } size_t get_cmds_max_name_width(command_definition_t *c) { static size_t max = 0; if (max != 0) return max; for (command_definition_t *p = c; p->name != NULL; p++) { /* * width and length are considered the same here, as command * names are not translated. */ size_t len = strlen(p->name); if (len > max) max = len; } return max; } #endif const char * key2str(int key) { switch(key) { static char buf[32]; case 0: return _("Undefined"); case ' ': return _("Space"); case RET: return _("Enter"); case BS: return _("Backspace"); case DEL: return _("Delete"); case UP: return _("Up"); case DWN: return _("Down"); case LEFT: return _("Left"); case RGHT: return _("Right"); case HOME: return _("Home"); case END: return _("End"); case PGDN: return _("PageDown"); case PGUP: return _("PageUp"); case TAB: return _("Tab"); case STAB: return _("Shift+Tab"); case ESC: return _("Esc"); case KEY_IC: return _("Insert"); default: for (int i = 0; i <= 63; i++) if (key == KEY_F(i)) { g_snprintf(buf, 32, _("F%d"), i ); return buf; } if (!(key & ~037)) g_snprintf(buf, 32, _("Ctrl-%c"), 'A'+(key & 037)-1 ); else if ((key & ~037) == 224) g_snprintf(buf, 32, _("Alt-%c"), 'A'+(key & 037)-1 ); else if (key > 32 && key < 256) g_snprintf(buf, 32, "%c", key); else g_snprintf(buf, 32, "0x%03X", key); return buf; } } void command_dump_keys(void) { for (size_t i = 0; cmds[i].description; i++) if (cmds[i].command != CMD_NONE) printf(" %20s : %s\n", get_key_names(cmds[i].command, true), cmds[i].name); } #ifndef NCMPC_MINI static void set_key_flags(command_definition_t *cp, command_t command, int flags) { for (size_t i = 0; cp[i].name; i++) { if (cp[i].command == command) { cp[i].flags |= flags; break; } } } #endif const char * get_key_names(command_t command, bool all) { for (int i = 0; cmds[i].description; i++) { if (cmds[i].command == command) { static char keystr[80]; g_strlcpy(keystr, key2str(cmds[i].keys[0]), sizeof(keystr)); if (!all) return keystr; for (unsigned j = 1; j < MAX_COMMAND_KEYS && cmds[i].keys[j] > 0; j++) { g_strlcat(keystr, " ", sizeof(keystr)); g_strlcat(keystr, key2str(cmds[i].keys[j]), sizeof(keystr)); } return keystr; } } return NULL; } const char * get_key_description(command_t command) { for (size_t i = 0; cmds[i].description; i++) if (cmds[i].command == command) return _(cmds[i].description); return NULL; } const char * get_key_command_name(command_t command) { for (size_t i = 0; cmds[i].name; i++) if (cmds[i].command == command) return cmds[i].name; return NULL; } command_t get_key_command_from_name(const char *name) { for (size_t i = 0; cmds[i].name; i++) if (strcmp(name, cmds[i].name) == 0) return cmds[i].command; return CMD_NONE; } command_t find_key_command(int key, const command_definition_t *c) { assert(key != 0); assert(c != NULL); for (size_t i = 0; c[i].name; i++) { for (int j = 0; j < MAX_COMMAND_KEYS; j++) if (c[i].keys[j] == key) return c[i].command; } return CMD_NONE; } command_t get_key_command(int key) { return find_key_command(key, cmds); } bool assign_keys(command_t command, int keys[MAX_COMMAND_KEYS]) { for (size_t i = 0; cmds[i].name; i++) { if (cmds[i].command == command) { memcpy(cmds[i].keys, keys, sizeof(int)*MAX_COMMAND_KEYS); #ifndef NCMPC_MINI cmds[i].flags |= COMMAND_KEY_MODIFIED; #endif return true; } } return false; } #ifndef NCMPC_MINI bool check_key_bindings(command_definition_t *cp, char *buf, size_t bufsize) { bool success = true; if (cp == NULL) cp = cmds; for (size_t i = 0; cp[i].name; i++) cp[i].flags &= ~COMMAND_KEY_CONFLICT; for (size_t i = 0; cp[i].name; i++) { int j; command_t cmd; for(j=0; j #include #ifndef NCMPC_MINI #include #endif #define MAX_COMMAND_KEYS 3 /* commands */ typedef enum { CMD_NONE = 0, CMD_PLAY, CMD_SELECT, CMD_SELECT_ALL, CMD_PAUSE, CMD_STOP, CMD_CROP, CMD_TRACK_NEXT, CMD_TRACK_PREVIOUS, CMD_SEEK_FORWARD, CMD_SEEK_BACKWARD, CMD_SHUFFLE, CMD_RANDOM, CMD_CLEAR, CMD_DELETE, CMD_REPEAT, CMD_SINGLE, CMD_CONSUME, CMD_CROSSFADE, CMD_DB_UPDATE, CMD_VOLUME_UP, CMD_VOLUME_DOWN, CMD_ADD, CMD_SAVE_PLAYLIST, CMD_TOGGLE_FIND_WRAP, CMD_TOGGLE_AUTOCENTER, CMD_SELECT_PLAYING, CMD_SEARCH_MODE, CMD_LIST_PREVIOUS, CMD_LIST_NEXT, CMD_LIST_TOP, CMD_LIST_MIDDLE, CMD_LIST_BOTTOM, CMD_LIST_FIRST, CMD_LIST_LAST, CMD_LIST_NEXT_PAGE, CMD_LIST_PREVIOUS_PAGE, CMD_LIST_FIND, CMD_LIST_FIND_NEXT, CMD_LIST_RFIND, CMD_LIST_RFIND_NEXT, CMD_LIST_JUMP, CMD_LIST_MOVE_UP, CMD_LIST_MOVE_DOWN, CMD_LIST_RANGE_SELECT, CMD_LIST_SCROLL_UP_LINE, CMD_LIST_SCROLL_DOWN_LINE, CMD_LIST_SCROLL_UP_HALF, CMD_LIST_SCROLL_DOWN_HALF, CMD_MOUSE_EVENT, CMD_SCREEN_UPDATE, CMD_SCREEN_PREVIOUS, CMD_SCREEN_NEXT, CMD_SCREEN_SWAP, CMD_SCREEN_PLAY, CMD_SCREEN_FILE, CMD_SCREEN_ARTIST, CMD_SCREEN_SEARCH, CMD_SCREEN_SONG, CMD_SCREEN_KEYDEF, CMD_SCREEN_HELP, CMD_SCREEN_LYRICS, CMD_SCREEN_OUTPUTS, CMD_SCREEN_CHAT, CMD_LYRICS_UPDATE, CMD_EDIT, CMD_INTERRUPT, CMD_GO_ROOT_DIRECTORY, CMD_GO_PARENT_DIRECTORY, CMD_LOCATE, CMD_QUIT } command_t; #ifndef NCMPC_MINI /* command definition flags */ #define COMMAND_KEY_MODIFIED 0x01 #define COMMAND_KEY_CONFLICT 0x02 #endif /* write key bindings flags */ #define KEYDEF_WRITE_HEADER 0x01 #define KEYDEF_WRITE_ALL 0x02 #define KEYDEF_COMMENT_ALL 0x04 typedef struct { int keys[MAX_COMMAND_KEYS]; char flags; command_t command; const char *name; const char *description; } command_definition_t; #ifdef ENABLE_KEYDEF_SCREEN command_definition_t *get_command_definitions(void); size_t get_cmds_max_name_width(command_definition_t *cmds); #endif gcc_pure command_t find_key_command(int key, const command_definition_t *cmds); void command_dump_keys(void); #ifndef NCMPC_MINI /** * @return true on success, false on error */ bool check_key_bindings(command_definition_t *cmds, char *buf, size_t size); /** * @return true on success, false on error */ bool write_key_bindings(FILE *f, int all); #endif gcc_pure const char *key2str(int key); gcc_pure const char *get_key_description(command_t command); gcc_pure const char *get_key_command_name(command_t command); gcc_pure const char *get_key_names(command_t command, bool all); gcc_pure command_t get_key_command(int key); gcc_pure command_t get_key_command_from_name(const char *name); /** * @return true on success, false on error */ bool assign_keys(command_t command, int keys[MAX_COMMAND_KEYS]); #endif ncmpc-0.27/src/keyboard.c0000644000076400001440000000366613064041305012225 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "keyboard.h" #include "command.h" #include "ncmpc.h" #include "ncmpc_curses.h" #include "screen.h" #include "Compiler.h" #include #include static bool ignore_key(int key) { return key == ERR || key == '\0'; } gcc_pure static command_t translate_key(int key) { #ifdef HAVE_GETMOUSE if (key == KEY_MOUSE) return CMD_MOUSE_EVENT; #endif return get_key_command(key); } static gboolean keyboard_event(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gcc_unused gpointer data) { int key = wgetch(screen.main_window.w); if (ignore_key(key)) return true; command_t cmd = translate_key(key); if (cmd == CMD_NONE) return true; begin_input_event(); if (!do_input_event(cmd)) return FALSE; end_input_event(); return TRUE; } void keyboard_init(void) { GIOChannel *channel = g_io_channel_unix_new(STDIN_FILENO); g_io_add_watch(channel, G_IO_IN, keyboard_event, NULL); g_io_channel_unref(channel); } void keyboard_unread(int key) { if (ignore_key(key)) return; command_t cmd = translate_key(key); if (cmd != CMD_NONE) do_input_event(cmd); } ncmpc-0.27/src/keyboard.h0000644000076400001440000000166513063734741012243 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef KEYBOARD_H #define KEYBOARD_H void keyboard_init(void); void keyboard_unread(int key); #endif ncmpc-0.27/src/ncfix.h0000644000076400001440000000240513062774214011541 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * Workarounds for libncurses oddities. */ #ifndef NCFIX_H #define NCFIX_H #include "ncmpc_curses.h" /** * Workaround for "comparison will always evaluate as 'true' for the * address of ...". By wrapping the macro in this inline function, * gcc stops bitching about this. */ static inline int fix_wattr_get(WINDOW *win, attr_t *attrs, short *pair, void *opts) { (void)opts; return wattr_get(win, attrs, pair, opts); } #endif ncmpc-0.27/src/ncu.c0000644000076400001440000000310613063726371011213 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ncu.h" #include "config.h" #include "ncmpc_curses.h" #ifdef ENABLE_COLORS #include "colors.h" #endif #ifdef HAVE_GETMOUSE #include "options.h" #endif static SCREEN *ncu_screen; void ncu_init(void) { /* initialize the curses library */ ncu_screen = newterm(NULL, stdout, stdin); /* initialize color support */ #ifdef ENABLE_COLORS colors_start(); #endif /* tell curses not to do NL->CR/NL on output */ nonl(); /* don't echo input */ noecho(); /* set cursor invisible */ curs_set(0); /* enable extra keys */ keypad(stdscr, TRUE); /* initialize mouse support */ #ifdef HAVE_GETMOUSE if (options.enable_mouse) mousemask(ALL_MOUSE_EVENTS, NULL); #endif refresh(); } void ncu_deinit(void) { endwin(); delscreen(ncu_screen); } ncmpc-0.27/src/ncu.h0000644000076400001440000000171213062774214011217 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * Basic libnucrses initialization. */ #ifndef NCU_H #define NCU_H void ncu_init(void); void ncu_deinit(void); #endif ncmpc-0.27/src/player_command.c0000644000076400001440000001266713063467765013445 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "player_command.h" #include "mpdclient.h" #include "options.h" #include "i18n.h" #include "screen_client.h" #include "screen_status.h" int seek_id = -1; int seek_target_time; static guint seek_source_id; static void commit_seek(struct mpdclient *c) { if (seek_id < 0) return; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) { seek_id = -1; return; } if (c->song != NULL && (unsigned)seek_id == mpd_song_get_id(c->song)) if (!mpd_run_seek_id(connection, seek_id, seek_target_time)) mpdclient_handle_error(c); seek_id = -1; } /** * This timer is invoked after seeking when the user hasn't typed a * key for 500ms. It is used to do the real seeking. */ static gboolean seek_timer(gpointer data) { struct mpdclient *c = data; seek_source_id = 0; commit_seek(c); return false; } static void schedule_seek_timer(struct mpdclient *c) { assert(seek_source_id == 0); seek_source_id = g_timeout_add(500, seek_timer, c); } void cancel_seek_timer(void) { if (seek_source_id != 0) { g_source_remove(seek_source_id); seek_source_id = 0; } } static bool setup_seek(struct mpdclient *c) { if (!mpdclient_is_playing(c)) return false; if (seek_id != (int)mpd_status_get_song_id(c->status)) { seek_id = mpd_status_get_song_id(c->status); seek_target_time = mpd_status_get_elapsed_time(c->status); } schedule_seek_timer(c); return true; } bool handle_player_command(struct mpdclient *c, command_t cmd) { if (!mpdclient_is_connected(c) || c->status == NULL) return false; cancel_seek_timer(); switch(cmd) { struct mpd_connection *connection; /* case CMD_PLAY: mpdclient_cmd_play(c, MPD_PLAY_AT_BEGINNING); break; */ case CMD_PAUSE: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_pause(connection, mpd_status_get_state(c->status) != MPD_STATE_PAUSE)) mpdclient_handle_error(c); break; case CMD_STOP: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_stop(connection)) mpdclient_handle_error(c); break; case CMD_CROP: mpdclient_cmd_crop(c); break; case CMD_SEEK_FORWARD: if (!setup_seek(c)) break; seek_target_time += options.seek_time; if (seek_target_time > (int)mpd_status_get_total_time(c->status)) seek_target_time = mpd_status_get_total_time(c->status); break; case CMD_TRACK_NEXT: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_next(connection)) mpdclient_handle_error(c); break; case CMD_SEEK_BACKWARD: if (!setup_seek(c)) break; seek_target_time -= options.seek_time; if (seek_target_time < 0) seek_target_time = 0; break; case CMD_TRACK_PREVIOUS: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_previous(connection)) mpdclient_handle_error(c); break; case CMD_SHUFFLE: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (mpd_run_shuffle(connection)) screen_status_message(_("Shuffled queue")); else mpdclient_handle_error(c); break; case CMD_CLEAR: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (mpdclient_cmd_clear(c)) screen_status_message(_("Cleared queue")); break; case CMD_REPEAT: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_repeat(connection, !mpd_status_get_repeat(c->status))) mpdclient_handle_error(c); break; case CMD_RANDOM: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_random(connection, !mpd_status_get_random(c->status))) mpdclient_handle_error(c); break; case CMD_SINGLE: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_single(connection, !mpd_status_get_single(c->status))) mpdclient_handle_error(c); break; case CMD_CONSUME: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_consume(connection, !mpd_status_get_consume(c->status))) mpdclient_handle_error(c); break; case CMD_CROSSFADE: connection = mpdclient_get_connection(c); if (connection == NULL) break; if (!mpd_run_crossfade(connection, mpd_status_get_crossfade(c->status) > 0 ? 0 : options.crossfade_time)) mpdclient_handle_error(c); break; case CMD_DB_UPDATE: screen_database_update(c, NULL); break; case CMD_VOLUME_UP: mpdclient_cmd_volume_up(c); break; case CMD_VOLUME_DOWN: mpdclient_cmd_volume_down(c); break; default: return false; } return true; } ncmpc-0.27/src/player_command.h0000644000076400001440000000227513062774214013431 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_PLAYER_COMMAND_H #define NCMPC_PLAYER_COMMAND_H #include "command.h" #include struct mpdclient; extern int seek_id; extern int seek_target_time; /** * Call this before exiting; it will unschedule the timer for delayed * seeking. */ void cancel_seek_timer(void); bool handle_player_command(struct mpdclient *c, command_t cmd); #endif ncmpc-0.27/src/title_bar.c0000644000076400001440000000700513062774214012373 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "title_bar.h" #include "colors.h" #include "command.h" #include "i18n.h" #include "charset.h" #include "config.h" #include #include #include #include #ifndef NCMPC_MINI static void print_hotkey(WINDOW *w, command_t cmd, const char *label) { colors_use(w, COLOR_TITLE_BOLD); waddstr(w, get_key_names(cmd, false)); colors_use(w, COLOR_TITLE); waddch(w, ':'); waddstr(w, label); waddch(w, ' '); waddch(w, ' '); } #endif static inline int get_volume(const struct mpd_status *status) { return status != NULL ? mpd_status_get_volume(status) : -1; } void title_bar_paint(const struct title_bar *p, const char *title, const struct mpd_status *status) { WINDOW *w = p->window.w; assert(p != NULL); wmove(w, 0, 0); wclrtoeol(w); if (title[0]) { colors_use(w, COLOR_TITLE_BOLD); mvwaddstr(w, 0, 0, title); #ifndef NCMPC_MINI } else { #ifdef ENABLE_HELP_SCREEN print_hotkey(w, CMD_SCREEN_HELP, _("Help")); #endif print_hotkey(w, CMD_SCREEN_PLAY, _("Queue")); print_hotkey(w, CMD_SCREEN_FILE, _("Browse")); #ifdef ENABLE_ARTIST_SCREEN print_hotkey(w, CMD_SCREEN_ARTIST, _("Artist")); #endif #ifdef ENABLE_SEARCH_SCREEN print_hotkey(w, CMD_SCREEN_SEARCH, _("Search")); #endif #ifdef ENABLE_LYRICS_SCREEN print_hotkey(w, CMD_SCREEN_LYRICS, _("Lyrics")); #endif #ifdef ENABLE_OUTPUTS_SCREEN print_hotkey(w, CMD_SCREEN_OUTPUTS, _("Outputs")); #endif #ifdef ENABLE_CHAT_SCREEN print_hotkey(w, CMD_SCREEN_CHAT, _("Chat")); #endif #endif } int volume = get_volume(status); char buf[32]; if (volume < 0) g_snprintf(buf, 32, _("Volume n/a")); else g_snprintf(buf, 32, _("Volume %d%%"), volume); colors_use(w, COLOR_TITLE); mvwaddstr(w, 0, p->window.cols - utf8_width(buf), buf); char flags[5]; flags[0] = 0; if (status != NULL) { if (mpd_status_get_repeat(status)) g_strlcat(flags, "r", sizeof(flags)); if (mpd_status_get_random(status)) g_strlcat(flags, "z", sizeof(flags)); if (mpd_status_get_single(status)) g_strlcat(flags, "s", sizeof(flags)); if (mpd_status_get_consume(status)) g_strlcat(flags, "c", sizeof(flags)); if (mpd_status_get_crossfade(status)) g_strlcat(flags, "x", sizeof(flags)); if (mpd_status_get_update_id(status) != 0) g_strlcat(flags, "U", sizeof(flags)); } colors_use(w, COLOR_LINE); mvwhline(w, 1, 0, ACS_HLINE, p->window.cols); if (flags[0]) { wmove(w, 1, p->window.cols - strlen(flags) - 3); waddch(w, '['); colors_use(w, COLOR_LINE_FLAGS); waddstr(w, flags); colors_use(w, COLOR_LINE); waddch(w, ']'); } wnoutrefresh(w); } void title_bar_resize(struct title_bar *p, unsigned width) { assert(p != NULL); p->window.cols = width; wresize(p->window.w, 2, width); } ncmpc-0.27/src/title_bar.h0000644000076400001440000000265413062774214012405 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_TITLE_BAR_H #define NCMPC_TITLE_BAR_H #include "window.h" #include struct mpd_status; struct title_bar { struct window window; }; static inline void title_bar_init(struct title_bar *p, unsigned width, int y, int x) { window_init(&p->window, 2, width, y, x); leaveok(p->window.w, true); keypad(p->window.w, true); } static inline void title_bar_deinit(struct title_bar *p) { delwin(p->window.w); } void title_bar_paint(const struct title_bar *p, const char *title, const struct mpd_status *status); void title_bar_resize(struct title_bar *p, unsigned width); #endif ncmpc-0.27/src/progress_bar.c0000644000076400001440000000364513062774214013124 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "progress_bar.h" #include void progress_bar_paint(const struct progress_bar *p) { assert(p != NULL); mvwhline(p->window.w, 0, 0, ACS_HLINE, p->window.cols); if (p->max > 0) { assert(p->width < p->window.cols); if (p->width > 0) whline(p->window.w, '=', p->width); mvwaddch(p->window.w, 0, p->width, 'O'); } wnoutrefresh(p->window.w); } static bool progress_bar_calc(struct progress_bar *p) { if (p->max == 0) return false; unsigned old_width = p->width; p->width = (p->window.cols * p->current) / (p->max + 1); assert(p->width < p->window.cols); return p->width != old_width; } void progress_bar_resize(struct progress_bar *p, unsigned width, int y, int x) { assert(p != NULL); p->window.cols = width; wresize(p->window.w, 1, width); mvwin(p->window.w, y, x); progress_bar_calc(p); } bool progress_bar_set(struct progress_bar *p, unsigned current, unsigned max) { assert(p != NULL); if (current > max) current = max; bool modified = (max == 0) != (p->max == 0); p->max = max; p->current = current; return progress_bar_calc(p) || modified; } ncmpc-0.27/src/progress_bar.h0000644000076400001440000000303513062774214013122 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_PROGRESS_BAR_H #define NCMPC_PROGRESS_BAR_H #include "window.h" #include struct progress_bar { struct window window; unsigned current, max; unsigned width; }; static inline void progress_bar_init(struct progress_bar *p, unsigned width, int y, int x) { window_init(&p->window, 1, width, y, x); leaveok(p->window.w, TRUE); p->current = 0; p->max = 0; p->width = 0; } static inline void progress_bar_deinit(struct progress_bar *p) { delwin(p->window.w); } void progress_bar_paint(const struct progress_bar *p); void progress_bar_resize(struct progress_bar *p, unsigned width, int y, int x); bool progress_bar_set(struct progress_bar *p, unsigned current, unsigned max); #endif ncmpc-0.27/src/status_bar.c0000644000076400001440000001356313064317246012603 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "status_bar.h" #include "options.h" #include "colors.h" #include "i18n.h" #include "charset.h" #include "strfsong.h" #include "player_command.h" #include "time_format.h" #include #include #include void status_bar_init(struct status_bar *p, unsigned width, int y, int x) { window_init(&p->window, 1, width, y, x); leaveok(p->window.w, false); keypad(p->window.w, true); p->message_source_id = 0; #ifndef NCMPC_MINI if (options.scroll) hscroll_init(&p->hscroll, p->window.w, options.scroll_sep); p->prev_status = NULL; p->prev_song = NULL; #endif } void status_bar_deinit(struct status_bar *p) { delwin(p->window.w); #ifndef NCMPC_MINI if (options.scroll) hscroll_clear(&p->hscroll); #endif } void status_bar_clear_message(struct status_bar *p) { assert(p != NULL); if (p->message_source_id != 0) { g_source_remove(p->message_source_id); p->message_source_id = 0; } WINDOW *w = p->window.w; wmove(w, 0, 0); wclrtoeol(w); wrefresh(w); } #ifndef NCMPC_MINI static void format_bitrate(char *p, size_t max_length, const struct mpd_status *status) { if (options.visible_bitrate && mpd_status_get_kbit_rate(status) > 0) g_snprintf(p, max_length, " [%d kbps]", mpd_status_get_kbit_rate(status)); else p[0] = '\0'; } #endif /* !NCMPC_MINI */ void status_bar_paint(struct status_bar *p, const struct mpd_status *status, const struct mpd_song *song) { WINDOW *w = p->window.w; char buffer[p->window.cols * 4 + 1]; #ifndef NCMPC_MINI p->prev_status = status; p->prev_song = song; #endif if (p->message_source_id != 0) return; wmove(w, 0, 0); wclrtoeol(w); colors_use(w, COLOR_STATUS_BOLD); enum mpd_state state = status == NULL ? MPD_STATE_UNKNOWN : mpd_status_get_state(status); const char *str = NULL; switch (state) { case MPD_STATE_PLAY: str = _("Playing:"); break; case MPD_STATE_PAUSE: str = _("[Paused]"); break; case MPD_STATE_STOP: default: break; } int x = 0; if (str) { waddstr(w, str); x += utf8_width(str) + 1; } /* create time string */ if (state == MPD_STATE_PLAY || state == MPD_STATE_PAUSE) { int elapsedTime = seek_id >= 0 && seek_id == mpd_status_get_song_id(status) ? (unsigned)seek_target_time : mpd_status_get_elapsed_time(status); int total_time = mpd_status_get_total_time(status); if (elapsedTime > 0 || total_time > 0) { #ifdef NCMPC_MINI static const char bitrate[1]; #else char bitrate[16]; #endif char elapsed_string[32], duration_string[32]; /*checks the conf to see whether to display elapsed or remaining time */ if (options.display_remaining_time) elapsedTime = elapsedTime < total_time ? total_time - elapsedTime : 0; /* display bitrate if visible-bitrate is true */ #ifndef NCMPC_MINI format_bitrate(bitrate, sizeof(bitrate), status); #endif /* write out the time */ format_duration_short(elapsed_string, sizeof(elapsed_string), elapsedTime); format_duration_short(duration_string, sizeof(duration_string), total_time); g_snprintf(buffer, sizeof(buffer), "%s [%s/%s]", bitrate, elapsed_string, duration_string); #ifndef NCMPC_MINI } else { format_bitrate(buffer, sizeof(buffer), status); #else buffer[0] = 0; #endif } } else { buffer[0] = 0; } /* display song */ if (state == MPD_STATE_PLAY || state == MPD_STATE_PAUSE) { char songname[p->window.cols * 4 + 1]; #ifndef NCMPC_MINI int width = COLS - x - utf8_width(buffer); #endif if (song) strfsong(songname, sizeof(songname), options.status_format, song); else songname[0] = '\0'; colors_use(w, COLOR_STATUS); /* scroll if the song name is to long */ #ifndef NCMPC_MINI if (options.scroll && utf8_width(songname) > (unsigned)width) { hscroll_set(&p->hscroll, x, 0, width, songname); hscroll_draw(&p->hscroll); } else { if (options.scroll) hscroll_clear(&p->hscroll); mvwaddstr(w, 0, x, songname); } #else mvwaddstr(w, 0, x, songname); #endif #ifndef NCMPC_MINI } else if (options.scroll) { hscroll_clear(&p->hscroll); #endif } /* display time string */ if (buffer[0] != 0) { x = p->window.cols - strlen(buffer); colors_use(w, COLOR_STATUS_TIME); mvwaddstr(w, 0, x, buffer); } wnoutrefresh(w); } void status_bar_resize(struct status_bar *p, unsigned width, int y, int x) { p->window.cols = width; wresize(p->window.w, 1, width); mvwin(p->window.w, y, x); } static gboolean status_bar_clear_message_cb(gpointer data) { struct status_bar *p = data; assert(p->message_source_id != 0); p->message_source_id = 0; status_bar_clear_message(p); return false; } void status_bar_message(struct status_bar *p, const char *msg) { WINDOW *w = p->window.w; #ifndef NCMPC_MINI if (options.scroll) hscroll_clear(&p->hscroll); #endif wmove(w, 0, 0); wclrtoeol(w); colors_use(w, COLOR_STATUS_ALERT); waddstr(w, msg); wnoutrefresh(w); if (p->message_source_id != 0) g_source_remove(p->message_source_id); p->message_source_id = g_timeout_add_seconds(options.status_message_time, status_bar_clear_message_cb, p); } ncmpc-0.27/src/status_bar.h0000644000076400001440000000317513062774214012606 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_STATUS_BAR_H #define NCMPC_STATUS_BAR_H #include "window.h" #ifndef NCMPC_MINI #include "hscroll.h" #endif #include struct mpd_status; struct mpd_song; struct status_bar { struct window window; guint message_source_id; #ifndef NCMPC_MINI struct hscroll hscroll; const struct mpd_status *prev_status; const struct mpd_song *prev_song; #endif }; void status_bar_init(struct status_bar *p, unsigned width, int y, int x); void status_bar_deinit(struct status_bar *p); void status_bar_paint(struct status_bar *p, const struct mpd_status *status, const struct mpd_song *song); void status_bar_resize(struct status_bar *p, unsigned width, int y, int x); void status_bar_message(struct status_bar *p, const char *msg); void status_bar_clear_message(struct status_bar *p); #endif ncmpc-0.27/src/screen.c0000644000076400001440000001746313064031740011706 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen.h" #include "screen_interface.h" #include "screen_list.h" #include "screen_status.h" #include "config.h" #include "i18n.h" #include "charset.h" #include "mpdclient.h" #include "options.h" #include "player_command.h" #include "screen_help.h" #include "screen_queue.h" #include "screen_file.h" #include "screen_artist.h" #include "screen_search.h" #include "screen_song.h" #include "screen_keydef.h" #include "screen_lyrics.h" #include "screen_outputs.h" #include "screen_chat.h" #include #include #include #include #include /* screens */ struct screen screen = { .current_page = &screen_queue, }; static const struct screen_functions *mode_fn_prev = &screen_queue; void screen_switch(const struct screen_functions *sf, struct mpdclient *c) { assert(sf != NULL); if (sf == screen.current_page) return; mode_fn_prev = screen.current_page; /* close the old mode */ if (screen.current_page->close != NULL) screen.current_page->close(); /* get functions for the new mode */ screen.current_page = sf; /* open the new mode */ if (sf->open != NULL) sf->open(c); screen_paint(c, true); } void screen_swap(struct mpdclient *c, const struct mpd_song *song) { if (song != NULL) { if (false) { /* just a hack to make the ifdefs less ugly */ } #ifdef ENABLE_SONG_SCREEN if (mode_fn_prev == &screen_song) screen_song_switch(c, song); #endif #ifdef ENABLE_LYRICS_SCREEN else if (mode_fn_prev == &screen_lyrics) screen_lyrics_switch(c, song, true); #endif else screen_switch(mode_fn_prev, c); } else screen_switch(mode_fn_prev, c); } static int find_configured_screen(const char *name) { unsigned i; for (i = 0; options.screen_list[i] != NULL; ++i) if (strcmp(options.screen_list[i], name) == 0) return i; return -1; } static void screen_next_mode(struct mpdclient *c, int offset) { int max = g_strv_length(options.screen_list); /* find current screen */ int current = find_configured_screen(screen_get_name(screen.current_page)); int next = current + offset; if (next<0) next = max-1; else if (next>=max) next = 0; const struct screen_functions *sf = screen_lookup_name(options.screen_list[next]); if (sf != NULL) screen_switch(sf, c); } void screen_update(struct mpdclient *c) { #ifndef NCMPC_MINI static bool was_connected; static bool initialized = false; static bool repeat; static bool random_enabled; static bool single; static bool consume; static unsigned crossfade; /* print a message if mpd status has changed */ if ((c->events & MPD_IDLE_OPTIONS) && c->status != NULL) { if (!initialized) { repeat = mpd_status_get_repeat(c->status); random_enabled = mpd_status_get_random(c->status); single = mpd_status_get_single(c->status); consume = mpd_status_get_consume(c->status); crossfade = mpd_status_get_crossfade(c->status); initialized = true; } if (repeat != mpd_status_get_repeat(c->status)) screen_status_printf(mpd_status_get_repeat(c->status) ? _("Repeat mode is on") : _("Repeat mode is off")); if (random_enabled != mpd_status_get_random(c->status)) screen_status_printf(mpd_status_get_random(c->status) ? _("Random mode is on") : _("Random mode is off")); if (single != mpd_status_get_single(c->status)) screen_status_printf(mpd_status_get_single(c->status) ? /* "single" mode means that MPD will automatically stop after playing one single song */ _("Single mode is on") : _("Single mode is off")); if (consume != mpd_status_get_consume(c->status)) screen_status_printf(mpd_status_get_consume(c->status) ? /* "consume" mode means that MPD removes each song which has finished playing */ _("Consume mode is on") : _("Consume mode is off")); if (crossfade != mpd_status_get_crossfade(c->status)) screen_status_printf(_("Crossfade %d seconds"), mpd_status_get_crossfade(c->status)); repeat = mpd_status_get_repeat(c->status); random_enabled = mpd_status_get_random(c->status); single = mpd_status_get_single(c->status); consume = mpd_status_get_consume(c->status); crossfade = mpd_status_get_crossfade(c->status); } if ((c->events & MPD_IDLE_DATABASE) != 0 && was_connected && mpdclient_is_connected(c)) screen_status_printf(_("Database updated")); was_connected = mpdclient_is_connected(c); #endif /* update the main window */ if (screen.current_page->update != NULL) screen.current_page->update(c); screen_paint(c, false); } #ifdef HAVE_GETMOUSE int screen_get_mouse_event(struct mpdclient *c, unsigned long *bstate, int *row) { MEVENT event; /* retrieve the mouse event from curses */ #ifdef PDCURSES nc_getmouse(&event); #else getmouse(&event); #endif /* calculate the selected row in the list window */ *row = event.y - screen.title_bar.window.rows; /* copy button state bits */ *bstate = event.bstate; /* if button 2 was pressed switch screen */ if (event.bstate & BUTTON2_CLICKED) { screen_cmd(c, CMD_SCREEN_NEXT); return 1; } return 0; } #endif void screen_cmd(struct mpdclient *c, command_t cmd) { #ifndef NCMPC_MINI if (screen.welcome_source_id != 0) { g_source_remove(screen.welcome_source_id); screen.welcome_source_id = 0; } #endif if (screen.current_page->cmd != NULL && screen.current_page->cmd(c, cmd)) return; if (handle_player_command(c, cmd)) return; switch(cmd) { case CMD_TOGGLE_FIND_WRAP: options.find_wrap = !options.find_wrap; screen_status_printf(options.find_wrap ? _("Find mode: Wrapped") : _("Find mode: Normal")); break; case CMD_TOGGLE_AUTOCENTER: options.auto_center = !options.auto_center; screen_status_printf(options.auto_center ? _("Auto center mode: On") : _("Auto center mode: Off")); break; case CMD_SCREEN_UPDATE: screen_paint(c, true); break; case CMD_SCREEN_PREVIOUS: screen_next_mode(c, -1); break; case CMD_SCREEN_NEXT: screen_next_mode(c, 1); break; case CMD_SCREEN_PLAY: screen_switch(&screen_queue, c); break; case CMD_SCREEN_FILE: screen_switch(&screen_browse, c); break; #ifdef ENABLE_HELP_SCREEN case CMD_SCREEN_HELP: screen_switch(&screen_help, c); break; #endif #ifdef ENABLE_SEARCH_SCREEN case CMD_SCREEN_SEARCH: screen_switch(&screen_search, c); break; #endif #ifdef ENABLE_ARTIST_SCREEN case CMD_SCREEN_ARTIST: screen_switch(&screen_artist, c); break; #endif #ifdef ENABLE_SONG_SCREEN case CMD_SCREEN_SONG: screen_switch(&screen_song, c); break; #endif #ifdef ENABLE_KEYDEF_SCREEN case CMD_SCREEN_KEYDEF: screen_switch(&screen_keydef, c); break; #endif #ifdef ENABLE_LYRICS_SCREEN case CMD_SCREEN_LYRICS: screen_switch(&screen_lyrics, c); break; #endif #ifdef ENABLE_OUTPUTS_SCREEN case CMD_SCREEN_OUTPUTS: screen_switch(&screen_outputs, c); break; #endif #ifdef ENABLE_CHAT_SCREEN case CMD_SCREEN_CHAT: screen_switch(&screen_chat, c); break; #endif case CMD_SCREEN_SWAP: screen_swap(c, NULL); break; default: break; } } ncmpc-0.27/src/screen.h0000644000076400001440000000433713064041305011705 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SCREEN_H #define SCREEN_H #include "config.h" #include "command.h" #include "window.h" #include "title_bar.h" #include "progress_bar.h" #include "status_bar.h" #include "ncmpc_curses.h" #include #include #include struct mpdclient; struct screen_functions; struct screen { struct title_bar title_bar; struct window main_window; struct progress_bar progress_bar; struct status_bar status_bar; const struct screen_functions *current_page; char *buf; size_t buf_size; char *findbuf; GList *find_history; #ifndef NCMPC_MINI /** * Non-zero when the welcome message is currently being * displayed. The associated timer will disable it. */ guint welcome_source_id; #endif }; extern struct screen screen; void screen_init(struct mpdclient *c); void screen_exit(void); void screen_resize(struct mpdclient *c); void paint_top_window(const struct mpdclient *c); void screen_paint(struct mpdclient *c, bool main_dirty); void screen_update(struct mpdclient *c); void screen_cmd(struct mpdclient *c, command_t cmd); void screen_switch(const struct screen_functions *sf, struct mpdclient *c); void screen_swap(struct mpdclient *c, const struct mpd_song *song); static inline bool screen_is_visible(const struct screen_functions *sf) { return sf == screen.current_page; } int screen_get_mouse_event(struct mpdclient *c, unsigned long *bstate, int *row); #endif ncmpc-0.27/src/screen_interface.h0000644000076400001440000000277213064002204013721 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_INTERFACE_H #define NCMPC_SCREEN_INTERFACE_H #include "config.h" #include "command.h" #include "ncmpc_curses.h" #include #include struct mpdclient; struct screen_functions { void (*init)(WINDOW *w, unsigned cols, unsigned rows); void (*exit)(void); void (*open)(struct mpdclient *c); void (*close)(void); void (*resize)(unsigned cols, unsigned rows); void (*paint)(void); void (*update)(struct mpdclient *c); /** * Handle a command. * * @returns true if the command should not be handled by the ncmpc core. */ bool (*cmd)(struct mpdclient *c, command_t cmd); const char *(*get_title)(char *s, size_t size); }; #endif ncmpc-0.27/src/screen_init.c0000644000076400001440000001062213064041305012715 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen.h" #include "screen_interface.h" #include "screen_list.h" #include "config.h" #include "i18n.h" #include "utils.h" #include "options.h" #include "colors.h" #include #ifndef NCMPC_MINI /** welcome message time [s] */ static const GTime SCREEN_WELCOME_TIME = 10; #endif /* minimum window size */ static const unsigned SCREEN_MIN_COLS = 14; static const unsigned SCREEN_MIN_ROWS = 5; void screen_exit(void) { if (screen.current_page->close != NULL) screen.current_page->close(); screen_list_exit(); string_list_free(screen.find_history); g_free(screen.buf); g_free(screen.findbuf); title_bar_deinit(&screen.title_bar); delwin(screen.main_window.w); progress_bar_deinit(&screen.progress_bar); status_bar_deinit(&screen.status_bar); #ifndef NCMPC_MINI if (screen.welcome_source_id != 0) g_source_remove(screen.welcome_source_id); #endif } void screen_resize(struct mpdclient *c) { const unsigned cols = COLS, rows = LINES; if (cols < SCREEN_MIN_COLS || rows < SCREEN_MIN_ROWS) { screen_exit(); fprintf(stderr, "%s\n", _("Error: Screen too small")); exit(EXIT_FAILURE); } #ifdef PDCURSES resize_term(rows, cols); #else resizeterm(rows, cols); #endif title_bar_resize(&screen.title_bar, cols); /* main window */ screen.main_window.cols = cols; screen.main_window.rows = rows - 4; wresize(screen.main_window.w, screen.main_window.rows, cols); /* progress window */ progress_bar_resize(&screen.progress_bar, cols, rows - 2, 0); /* status window */ status_bar_resize(&screen.status_bar, cols, rows - 1, 0); screen.buf_size = cols; g_free(screen.buf); screen.buf = g_malloc(cols); /* resize all screens */ screen_list_resize(screen.main_window.cols, screen.main_window.rows); /* ? - without this the cursor becomes visible with aterm & Eterm */ curs_set(1); curs_set(0); screen_paint(c, true); } #ifndef NCMPC_MINI static gboolean welcome_timer_callback(gpointer data) { struct mpdclient *c = data; screen.welcome_source_id = 0; paint_top_window(c); doupdate(); return false; } #endif void screen_init(struct mpdclient *c) { const unsigned cols = COLS, rows = LINES; if (cols < SCREEN_MIN_COLS || rows < SCREEN_MIN_ROWS) { fprintf(stderr, "%s\n", _("Error: Screen too small")); exit(EXIT_FAILURE); } screen.buf = g_malloc(cols); screen.buf_size = cols; screen.findbuf = NULL; #ifndef NCMPC_MINI if (options.welcome_screen_list) screen.welcome_source_id = g_timeout_add_seconds(SCREEN_WELCOME_TIME, welcome_timer_callback, c); #endif /* create top window */ title_bar_init(&screen.title_bar, cols, 0, 0); /* create main window */ window_init(&screen.main_window, rows - 4, cols, 2, 0); if (!options.hardware_cursor) leaveok(screen.main_window.w, TRUE); keypad(screen.main_window.w, TRUE); /* create progress window */ progress_bar_init(&screen.progress_bar, cols, rows - 2, 0); /* create status window */ status_bar_init(&screen.status_bar, cols, rows - 1, 0); #ifdef ENABLE_COLORS if (options.enable_colors) { /* set background attributes */ wbkgd(stdscr, COLOR_PAIR(COLOR_LIST)); wbkgd(screen.main_window.w, COLOR_PAIR(COLOR_LIST)); wbkgd(screen.title_bar.window.w, COLOR_PAIR(COLOR_TITLE)); wbkgd(screen.progress_bar.window.w, COLOR_PAIR(COLOR_PROGRESSBAR)); wbkgd(screen.status_bar.window.w, COLOR_PAIR(COLOR_STATUS)); colors_use(screen.progress_bar.window.w, COLOR_PROGRESSBAR); } #endif /* initialize screens */ screen_list_init(screen.main_window.w, screen.main_window.cols, screen.main_window.rows); if (screen.current_page->open != NULL) screen.current_page->open(c); } ncmpc-0.27/src/screen_paint.c0000644000076400001440000000464013064041305013070 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen.h" #include "screen_interface.h" #include "config.h" #include "mpdclient.h" #include "options.h" #include "player_command.h" #include #include void paint_top_window(const struct mpdclient *c) { const char *title = #ifndef NCMPC_MINI screen.welcome_source_id == 0 && #endif screen.current_page->get_title != NULL ? screen.current_page->get_title(screen.buf, screen.buf_size) : ""; assert(title != NULL); title_bar_paint(&screen.title_bar, title, c->status); } static void update_progress_window(struct mpdclient *c, bool repaint) { unsigned elapsed; if (c->status == NULL) elapsed = 0; else if (seek_id >= 0 && seek_id == mpd_status_get_song_id(c->status)) elapsed = seek_target_time; else elapsed = mpd_status_get_elapsed_time(c->status); unsigned duration = mpdclient_is_playing(c) ? mpd_status_get_total_time(c->status) : 0; if (progress_bar_set(&screen.progress_bar, elapsed, duration) || repaint) progress_bar_paint(&screen.progress_bar); } void screen_paint(struct mpdclient *c, bool main_dirty) { /* update title/header window */ paint_top_window(c); /* paint the bottom window */ update_progress_window(c, true); status_bar_paint(&screen.status_bar, c->status, c->song); /* paint the main window */ if (main_dirty) { wclear(screen.main_window.w); if (screen.current_page->paint != NULL) screen.current_page->paint(); } /* move the cursor to the origin */ if (!options.hardware_cursor) wmove(screen.main_window.w, 0, 0); wnoutrefresh(screen.main_window.w); /* tell curses to update */ doupdate(); } ncmpc-0.27/src/screen_utils.c0000644000076400001440000000661413064033364013126 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_utils.h" #include "screen.h" #include "mpdclient.h" #include "config.h" #include "i18n.h" #include "options.h" #include "colors.h" #include "wreadln.h" #include #include void screen_bell(void) { if (options.audible_bell) beep(); if (options.visible_bell) flash(); } static bool ignore_key(int key) { return #ifdef HAVE_GETMOUSE /* ignore mouse events */ key == KEY_MOUSE || #endif key == ERR; } int screen_getch(const char *prompt) { WINDOW *w = screen.status_bar.window.w; colors_use(w, COLOR_STATUS_ALERT); werase(w); wmove(w, 0, 0); waddstr(w, prompt); echo(); curs_set(1); int key; while (ignore_key(key = wgetch(w))) {} noecho(); curs_set(0); return key; } bool screen_get_yesno(const char *_prompt, bool def) { /* NOTE: if one day a translator decides to use a multi-byte character for one of the yes/no keys, we'll have to parse it properly */ char *prompt = g_strdup_printf(_("%s [%s/%s] "), _prompt, YES, NO); int key = tolower(screen_getch(prompt)); g_free(prompt); if (key == YES[0]) return true; else if (key == NO[0]) return false; else return def; } char * screen_readln(const char *prompt, const char *value, GList **history, GCompletion *gcmp) { struct window *window = &screen.status_bar.window; WINDOW *w = window->w; char *line = NULL; wmove(w, 0,0); curs_set(1); colors_use(w, COLOR_STATUS_ALERT); line = wreadln(w, prompt, value, window->cols, history, gcmp); curs_set(0); return line; } char * screen_read_password(const char *prompt) { struct window *window = &screen.status_bar.window; WINDOW *w = window->w; wmove(w, 0,0); curs_set(1); colors_use(w, COLOR_STATUS_ALERT); if (prompt == NULL) prompt = _("Password"); char *ret = wreadln_masked(w, prompt, NULL, window->cols, NULL, NULL); curs_set(0); return ret; } void screen_display_completion_list(GList *list) { static GList *prev_list = NULL; static guint prev_length = 0; static guint offset = 0; WINDOW *w = screen.main_window.w; unsigned length = g_list_length(list); if (list == prev_list && length == prev_length) { offset += screen.main_window.rows; if (offset >= length) offset = 0; } else { prev_list = list; prev_length = length; offset = 0; } colors_use(w, COLOR_STATUS_ALERT); unsigned y = 0; while (y < screen.main_window.rows) { GList *item = g_list_nth(list, y+offset); wmove(w, y++, 0); wclrtoeol(w); if (item) { gchar *tmp = g_strdup(item->data); waddstr(w, g_basename(tmp)); g_free(tmp); } } wrefresh(w); colors_use(w, COLOR_LIST); } ncmpc-0.27/src/screen_utils.h0000644000076400001440000000321413063776267013143 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SCREEN_UTILS_H #define SCREEN_UTILS_H #include "config.h" #include "list_window.h" #include "command.h" struct mpdclient; /* sound an audible and/or visible bell */ void screen_bell(void); /* read a character from the status window */ int screen_getch(const char *prompt); /** * display a prompt, wait for the user to press a key, and compare it with * the default keys for "yes" and "no" (and their upper-case pendants). * * @returns true, if the user pressed the key for "yes"; false, if the user * pressed the key for "no"; def otherwise */ bool screen_get_yesno(const char *prompt, bool def); char * screen_read_password(const char *prompt); char *screen_readln(const char *prompt, const char *value, GList **history, GCompletion *gcmp); void screen_display_completion_list(GList *list); #endif ncmpc-0.27/src/screen_status.c0000644000076400001440000000240713062774214013311 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_status.h" #include "screen.h" #include void screen_status_clear_message(void) { status_bar_clear_message(&screen.status_bar); } void screen_status_message(const char *msg) { status_bar_message(&screen.status_bar, msg); } void screen_status_printf(const char *format, ...) { va_list ap; va_start(ap,format); char *msg = g_strdup_vprintf(format,ap); va_end(ap); screen_status_message(msg); g_free(msg); } ncmpc-0.27/src/screen_status.h0000644000076400001440000000203413062774214013312 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_STATUS_H #define NCMPC_SCREEN_STATUS_H void screen_status_clear_message(void); void screen_status_message(const char *msg); void screen_status_printf(const char *format, ...); #endif ncmpc-0.27/src/screen_list.c0000644000076400001440000000557213062774214012747 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_list.h" #include "screen_interface.h" #include "screen.h" #include "screen_help.h" #include "screen_queue.h" #include "screen_file.h" #include "screen_artist.h" #include "screen_search.h" #include "screen_song.h" #include "screen_keydef.h" #include "screen_lyrics.h" #include "screen_outputs.h" #include "screen_chat.h" #include static const struct { const char *name; const struct screen_functions *functions; } screens[] = { { "playlist", &screen_queue }, { "browse", &screen_browse }, #ifdef ENABLE_ARTIST_SCREEN { "artist", &screen_artist }, #endif #ifdef ENABLE_HELP_SCREEN { "help", &screen_help }, #endif #ifdef ENABLE_SEARCH_SCREEN { "search", &screen_search }, #endif #ifdef ENABLE_SONG_SCREEN { "song", &screen_song }, #endif #ifdef ENABLE_KEYDEF_SCREEN { "keydef", &screen_keydef }, #endif #ifdef ENABLE_LYRICS_SCREEN { "lyrics", &screen_lyrics }, #endif #ifdef ENABLE_OUTPUTS_SCREEN { "outputs", &screen_outputs }, #endif #ifdef ENABLE_CHAT_SCREEN { "chat", &screen_chat }, #endif }; void screen_list_init(WINDOW *w, unsigned cols, unsigned rows) { for (unsigned i = 0; i < G_N_ELEMENTS(screens); ++i) { const struct screen_functions *sf = screens[i].functions; if (sf->init) sf->init(w, cols, rows); } } void screen_list_exit(void) { for (unsigned i = 0; i < G_N_ELEMENTS(screens); ++i) { const struct screen_functions *sf = screens[i].functions; if (sf->exit) sf->exit(); } } void screen_list_resize(unsigned cols, unsigned rows) { for (unsigned i = 0; i < G_N_ELEMENTS(screens); ++i) { const struct screen_functions *sf = screens[i].functions; if (sf->resize) sf->resize(cols, rows); } } const char * screen_get_name(const struct screen_functions *sf) { for (unsigned i = 0; i < G_N_ELEMENTS(screens); ++i) if (screens[i].functions == sf) return screens[i].name; return NULL; } const struct screen_functions * screen_lookup_name(const char *name) { for (unsigned i = 0; i < G_N_ELEMENTS(screens); ++i) if (strcmp(name, screens[i].name) == 0) return screens[i].functions; return NULL; } ncmpc-0.27/src/screen_list.h0000644000076400001440000000235113062774214012744 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SCREEN_LIST_H #define SCREEN_LIST_H #include "config.h" #include "ncmpc_curses.h" struct screen_functions; void screen_list_init(WINDOW *w, unsigned cols, unsigned rows); void screen_list_exit(void); void screen_list_resize(unsigned cols, unsigned rows); const char * screen_get_name(const struct screen_functions *sf); const struct screen_functions * screen_lookup_name(const char *name); #endif ncmpc-0.27/src/screen_find.c0000644000076400001440000001020013063734741012676 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_find.h" #include "screen_utils.h" #include "screen_status.h" #include "screen.h" #include "keyboard.h" #include "i18n.h" #include "options.h" #include "ncmpc.h" #define FIND_PROMPT _("Find") #define RFIND_PROMPT _("Find backward") #define JUMP_PROMPT _("Jump") /* query user for a string and find it in a list window */ bool screen_find(struct list_window *lw, command_t findcmd, list_window_callback_fn_t callback_fn, void *callback_data) { bool found; const char *prompt = FIND_PROMPT; const bool reversed = findcmd == CMD_LIST_RFIND || findcmd == CMD_LIST_RFIND_NEXT; if (reversed) prompt = RFIND_PROMPT; switch (findcmd) { case CMD_LIST_FIND: case CMD_LIST_RFIND: if (screen.findbuf) { g_free(screen.findbuf); screen.findbuf=NULL; } /* fall through */ case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: if (!screen.findbuf) { char *value = options.find_show_last_pattern ? (char *) -1 : NULL; screen.findbuf=screen_readln(prompt, value, &screen.find_history, NULL); } if (screen.findbuf == NULL) return 1; found = reversed ? list_window_rfind(lw, callback_fn, callback_data, screen.findbuf, options.find_wrap, options.bell_on_wrap) : list_window_find(lw, callback_fn, callback_data, screen.findbuf, options.find_wrap, options.bell_on_wrap); if (!found) { screen_status_printf(_("Unable to find \'%s\'"), screen.findbuf); screen_bell(); } return 1; default: break; } return 0; } /* query user for a string and jump to the entry * which begins with this string while the users types */ void screen_jump(struct list_window *lw, list_window_callback_fn_t callback_fn, void *callback_data, list_window_paint_callback_t paint_callback, void *paint_data) { const int WRLN_MAX_LINE_SIZE = 1024; int key = 65; if (screen.findbuf) { g_free(screen.findbuf); screen.findbuf = NULL; } screen.findbuf = g_malloc0(WRLN_MAX_LINE_SIZE); /* In screen.findbuf is the whole string which is displayed in the status_window * and search_str is the string the user entered (without the prompt) */ char *search_str = screen.findbuf + g_snprintf(screen.findbuf, WRLN_MAX_LINE_SIZE, "%s: ", JUMP_PROMPT); char *iter = search_str; while(1) { key = screen_getch(screen.findbuf); /* if backspace or delete was pressed, process instead of ending loop */ if (key == KEY_BACKSPACE || key == KEY_DC) { int i; if (search_str <= g_utf8_find_prev_char(screen.findbuf, iter)) iter = g_utf8_find_prev_char(screen.findbuf, iter); for (i = 0; *(iter + i) != '\0'; i++) *(iter + i) = '\0'; continue; } /* if a control key was pressed, end loop */ else if (g_ascii_iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) { break; } else { *iter = key; if (iter < screen.findbuf + WRLN_MAX_LINE_SIZE - 3) ++iter; } list_window_jump(lw, callback_fn, callback_data, search_str); /* repaint the list_window */ if (paint_callback != NULL) list_window_paint2(lw, paint_callback, paint_data); else list_window_paint(lw, callback_fn, callback_data); wrefresh(lw->w); } char *temp = g_strdup(search_str); g_free(screen.findbuf); screen.findbuf = temp; /* ncmpc should get the command */ keyboard_unread(key); } ncmpc-0.27/src/screen_find.h0000644000076400001440000000325513062774214012715 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_FIND_H #define NCMPC_SCREEN_FIND_H #include "command.h" #include "list_window.h" /** * query user for a string and find it in a list window * * @param lw the list window to search * @param findcmd the search command/mode * @param callback_fn a function returning the text of a given line * @param callback_data a pointer passed to callback_fn * @return true if the command has been handled, false if not */ bool screen_find(struct list_window *lw, command_t findcmd, list_window_callback_fn_t callback_fn, void *callback_data); /* query user for a string and jump to the entry * which begins with this string while the users types */ void screen_jump(struct list_window *lw, list_window_callback_fn_t callback_fn, void *callback_data, list_window_paint_callback_t paint_callback, void *paint_data); #endif ncmpc-0.27/src/screen_client.c0000644000076400001440000000340413063060744013237 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_client.h" #include "screen_status.h" #include "mpdclient.h" #include "i18n.h" #include "charset.h" void screen_database_update(struct mpdclient *c, const char *path) { assert(c != NULL); assert(mpdclient_is_connected(c)); struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return; unsigned id = mpd_run_update(connection, path); if (id == 0) { if (mpd_connection_get_error(connection) == MPD_ERROR_SERVER && mpd_connection_get_server_error(connection) == MPD_SERVER_ERROR_UPDATE_ALREADY && mpd_connection_clear_error(connection)) screen_status_printf(_("Database update running...")); else mpdclient_handle_error(c); return; } if (path != NULL && *path != 0) { char *path_locale = utf8_to_locale(path); screen_status_printf(_("Database update of %s started"), path); g_free(path_locale); } else screen_status_message(_("Database update started")); } ncmpc-0.27/src/screen_client.h0000644000076400001440000000217213063051265013243 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_CLIENT_H #define NCMPC_SCREEN_CLIENT_H #include struct mpdclient; bool screen_auth(struct mpdclient *c); /** * Starts a (server-side) database update and displays a status * message. */ void screen_database_update(struct mpdclient *c, const char *path); #endif ncmpc-0.27/src/screen_queue.c0000644000076400001440000003664713064315734013127 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_queue.h" #include "screen_interface.h" #include "screen_file.h" #include "screen_status.h" #include "screen_find.h" #include "save_playlist.h" #include "config.h" #include "i18n.h" #include "charset.h" #include "options.h" #include "mpdclient.h" #include "utils.h" #include "strfsong.h" #include "wreadln.h" #include "song_paint.h" #include "screen.h" #include "screen_utils.h" #include "screen_song.h" #include "screen_lyrics.h" #include "db_completion.h" #include "Compiler.h" #ifndef NCMPC_MINI #include "hscroll.h" #endif #include #include #include #include #define MAX_SONG_LENGTH 512 #ifndef NCMPC_MINI typedef struct { GList **list; GList **dir_list; struct mpdclient *c; } completion_callback_data_t; static struct hscroll hscroll; #endif static struct mpdclient_playlist *playlist; static int current_song_id = -1; static int selected_song_id = -1; static struct list_window *lw; static guint timer_hide_cursor_id; static void screen_queue_paint(void); static void screen_queue_repaint(void) { screen_queue_paint(); wrefresh(lw->w); } static const struct mpd_song * screen_queue_selected_song(void) { return !lw->range_selection && lw->selected < playlist_length(playlist) ? playlist_get(playlist, lw->selected) : NULL; } static void screen_queue_save_selection(void) { selected_song_id = screen_queue_selected_song() != NULL ? (int)mpd_song_get_id(screen_queue_selected_song()) : -1; } static void screen_queue_restore_selection(void) { list_window_set_length(lw, playlist_length(playlist)); if (selected_song_id < 0) /* there was no selection */ return; const struct mpd_song *song = screen_queue_selected_song(); if (song != NULL && mpd_song_get_id(song) == (unsigned)selected_song_id) /* selection is still valid */ return; int pos = playlist_get_index_from_id(playlist, selected_song_id); if (pos >= 0) list_window_set_cursor(lw, pos); screen_queue_save_selection(); } static const char * screen_queue_lw_callback(unsigned idx, gcc_unused void *data) { static char songname[MAX_SONG_LENGTH]; assert(playlist != NULL); assert(idx < playlist_length(playlist)); struct mpd_song *song = playlist_get(playlist, idx); strfsong(songname, MAX_SONG_LENGTH, options.list_format, song); return songname; } static void center_playing_item(const struct mpd_status *status, bool center_cursor) { if (status == NULL || (mpd_status_get_state(status) != MPD_STATE_PLAY && mpd_status_get_state(status) != MPD_STATE_PAUSE)) return; /* try to center the song that are playing */ int idx = mpd_status_get_song_pos(status); if (idx < 0) return; list_window_center(lw, idx); if (center_cursor) { list_window_set_cursor(lw, idx); return; } /* make sure the cursor is in the window */ list_window_fetch_cursor(lw); } gcc_pure static int get_current_song_id(const struct mpd_status *status) { return status != NULL && (mpd_status_get_state(status) == MPD_STATE_PLAY || mpd_status_get_state(status) == MPD_STATE_PAUSE) ? (int)mpd_status_get_song_id(status) : -1; } static bool screen_queue_song_change(const struct mpd_status *status) { if (get_current_song_id(status) == current_song_id) return false; current_song_id = get_current_song_id(status); /* center the cursor */ if (options.auto_center && !lw->range_selection) center_playing_item(status, false); return true; } #ifndef NCMPC_MINI /** * Wrapper for strncmp(). We are not allowed to pass &strncmp to * g_completion_set_compare(), because strncmp() takes size_t where * g_completion_set_compare passes a gsize value. */ static gint completion_strncmp(const gchar *s1, const gchar *s2, gsize n) { return strncmp(s1, s2, n); } #endif #ifndef NCMPC_MINI static void add_dir(GCompletion *gcmp, gchar *dir, GList **dir_list, GList **list, struct mpdclient *c) { g_completion_remove_items(gcmp, *list); *list = string_list_remove(*list, dir); *list = gcmp_list_from_path(c, dir, *list, GCMP_TYPE_RFILE); g_completion_add_items(gcmp, *list); *dir_list = g_list_append(*dir_list, g_strdup(dir)); } static void add_pre_completion_cb(GCompletion *gcmp, gchar *line, void *data) { completion_callback_data_t *tmp = (completion_callback_data_t *)data; GList **dir_list = tmp->dir_list; GList **list = tmp->list; struct mpdclient *c = tmp->c; if (*list == NULL) { /* create initial list */ *list = gcmp_list_from_path(c, "", NULL, GCMP_TYPE_RFILE); g_completion_add_items(gcmp, *list); } else if (line && line[0] && line[strlen(line)-1]=='/' && string_list_find(*dir_list, line) == NULL) { /* add directory content to list */ add_dir(gcmp, line, dir_list, list, c); } } static void add_post_completion_cb(GCompletion *gcmp, gchar *line, GList *items, void *data) { completion_callback_data_t *tmp = (completion_callback_data_t *)data; GList **dir_list = tmp->dir_list; GList **list = tmp->list; struct mpdclient *c = tmp->c; if (g_list_length(items) >= 1) screen_display_completion_list(items); if (line && line[0] && line[strlen(line) - 1] == '/' && string_list_find(*dir_list, line) == NULL) { /* add directory content to list */ add_dir(gcmp, line, dir_list, list, c); } } #endif static int handle_add_to_playlist(struct mpdclient *c) { #ifndef NCMPC_MINI /* initialize completion support */ GCompletion *gcmp = g_completion_new(NULL); g_completion_set_compare(gcmp, completion_strncmp); GList *list = NULL; GList *dir_list = NULL; completion_callback_data_t data = { .list = &list, .dir_list = &dir_list, .c = c, }; wrln_completion_callback_data = &data; wrln_pre_completion_callback = add_pre_completion_cb; wrln_post_completion_callback = add_post_completion_cb; #else GCompletion *gcmp = NULL; #endif /* get path */ char *path = screen_readln(_("Add"), NULL, NULL, gcmp); /* destroy completion data */ #ifndef NCMPC_MINI wrln_completion_callback_data = NULL; wrln_pre_completion_callback = NULL; wrln_post_completion_callback = NULL; g_completion_free(gcmp); string_list_free(list); string_list_free(dir_list); #endif /* add the path to the playlist */ if (path != NULL) { char *path_utf8 = locale_to_utf8(path); mpdclient_cmd_add_path(c, path_utf8); g_free(path_utf8); } g_free(path); return 0; } static void screen_queue_init(WINDOW *w, unsigned cols, unsigned rows) { lw = list_window_init(w, cols, rows); #ifndef NCMPC_MINI if (options.scroll) hscroll_init(&hscroll, w, options.scroll_sep); #endif } static gboolean timer_hide_cursor(gpointer data) { struct mpdclient *c = data; assert(options.hide_cursor > 0); assert(timer_hide_cursor_id != 0); timer_hide_cursor_id = 0; /* hide the cursor when mpd is playing and the user is inactive */ if (c->status != NULL && mpd_status_get_state(c->status) == MPD_STATE_PLAY) { lw->hide_cursor = true; screen_queue_repaint(); } else timer_hide_cursor_id = g_timeout_add_seconds(options.hide_cursor, timer_hide_cursor, c); return FALSE; } static void screen_queue_open(struct mpdclient *c) { playlist = &c->playlist; assert(timer_hide_cursor_id == 0); if (options.hide_cursor > 0) { lw->hide_cursor = false; timer_hide_cursor_id = g_timeout_add_seconds(options.hide_cursor, timer_hide_cursor, c); } screen_queue_restore_selection(); screen_queue_song_change(c->status); } static void screen_queue_close(void) { if (timer_hide_cursor_id != 0) { g_source_remove(timer_hide_cursor_id); timer_hide_cursor_id = 0; } #ifndef NCMPC_MINI if (options.scroll) hscroll_clear(&hscroll); #endif } static void screen_queue_resize(unsigned cols, unsigned rows) { list_window_resize(lw, cols, rows); } static void screen_queue_exit(void) { list_window_free(lw); } static const char * screen_queue_title(char *str, size_t size) { if (options.host == NULL) return _("Queue"); g_snprintf(str, size, _("Queue on %s"), options.host); return str; } static void screen_queue_paint_callback(WINDOW *w, unsigned i, unsigned y, unsigned width, bool selected, gcc_unused const void *data) { assert(playlist != NULL); assert(i < playlist_length(playlist)); const struct mpd_song *song = playlist_get(playlist, i); struct hscroll *row_hscroll = NULL; #ifndef NCMPC_MINI row_hscroll = selected && options.scroll && lw->selected == i ? &hscroll : NULL; #endif paint_song_row(w, y, width, selected, (int)mpd_song_get_id(song) == current_song_id, song, row_hscroll, options.list_format); } static void screen_queue_paint(void) { #ifndef NCMPC_MINI if (options.scroll) hscroll_clear(&hscroll); #endif list_window_paint2(lw, screen_queue_paint_callback, NULL); } static void screen_queue_update(struct mpdclient *c) { if (c->events & MPD_IDLE_QUEUE) screen_queue_restore_selection(); else /* the queue size may have changed, even if we havn't received the QUEUE idle event yet */ list_window_set_length(lw, playlist_length(playlist)); if (((c->events & MPD_IDLE_PLAYER) != 0 && screen_queue_song_change(c->status)) || c->events & MPD_IDLE_QUEUE) /* the queue or the current song has changed, we must paint the new version */ screen_queue_paint(); } #ifdef HAVE_GETMOUSE static bool handle_mouse_event(struct mpdclient *c) { unsigned long bstate; int row; if (screen_get_mouse_event(c, &bstate, &row) || list_window_mouse(lw, bstate, row)) { screen_queue_paint(); return true; } if (bstate & BUTTON1_DOUBLE_CLICKED) { /* stop */ screen_cmd(c, CMD_STOP); return true; } const unsigned old_selected = lw->selected; list_window_set_cursor(lw, lw->start + row); if (bstate & BUTTON1_CLICKED) { /* play */ const struct mpd_song *song = screen_queue_selected_song(); if (song != NULL) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection != NULL && !mpd_run_play_id(connection, mpd_song_get_id(song))) mpdclient_handle_error(c); } } else if (bstate & BUTTON3_CLICKED) { /* delete */ if (lw->selected == old_selected) mpdclient_cmd_delete(c, lw->selected); list_window_set_length(lw, playlist_length(playlist)); } screen_queue_save_selection(); screen_queue_paint(); return true; } #endif static bool screen_queue_cmd(struct mpdclient *c, command_t cmd) { struct mpd_connection *connection; static command_t cached_cmd = CMD_NONE; const command_t prev_cmd = cached_cmd; cached_cmd = cmd; lw->hide_cursor = false; if (options.hide_cursor > 0) { if (timer_hide_cursor_id != 0) g_source_remove(timer_hide_cursor_id); timer_hide_cursor_id = g_timeout_add_seconds(options.hide_cursor, timer_hide_cursor, c); } if (list_window_cmd(lw, cmd)) { screen_queue_save_selection(); screen_queue_paint(); return true; } switch(cmd) { case CMD_SCREEN_UPDATE: center_playing_item(c->status, prev_cmd == CMD_SCREEN_UPDATE); screen_queue_paint(); return false; case CMD_SELECT_PLAYING: list_window_set_cursor(lw, playlist_get_index(&c->playlist, c->song)); screen_queue_save_selection(); screen_queue_paint(); return true; case CMD_LIST_FIND: case CMD_LIST_RFIND: case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: screen_find(lw, cmd, screen_queue_lw_callback, NULL); screen_queue_save_selection(); screen_queue_paint(); return true; case CMD_LIST_JUMP: screen_jump(lw, screen_queue_lw_callback, NULL, NULL, NULL); screen_queue_save_selection(); screen_queue_paint(); return true; #ifdef HAVE_GETMOUSE case CMD_MOUSE_EVENT: return handle_mouse_event(c); #endif #ifdef ENABLE_SONG_SCREEN case CMD_SCREEN_SONG: if (screen_queue_selected_song() != NULL) { screen_song_switch(c, screen_queue_selected_song()); return true; } break; #endif #ifdef ENABLE_LYRICS_SCREEN case CMD_SCREEN_LYRICS: if (lw->selected < playlist_length(&c->playlist)) { struct mpd_song *selected = playlist_get(&c->playlist, lw->selected); bool follow = false; if (c->song && selected && !strcmp(mpd_song_get_uri(selected), mpd_song_get_uri(c->song))) follow = true; screen_lyrics_switch(c, selected, follow); return true; } break; #endif case CMD_SCREEN_SWAP: if (playlist_length(&c->playlist) > 0) screen_swap(c, playlist_get(&c->playlist, lw->selected)); else screen_swap(c, NULL); return true; default: break; } if (!mpdclient_is_connected(c)) return false; switch(cmd) { const struct mpd_song *song; struct list_window_range range; case CMD_PLAY: song = screen_queue_selected_song(); if (song == NULL) return false; connection = mpdclient_get_connection(c); if (connection != NULL && !mpd_run_play_id(connection, mpd_song_get_id(song))) mpdclient_handle_error(c); return true; case CMD_DELETE: list_window_get_range(lw, &range); mpdclient_cmd_delete_range(c, range.start, range.end); list_window_set_cursor(lw, range.start); return true; case CMD_SAVE_PLAYLIST: playlist_save(c, NULL, NULL); return true; case CMD_ADD: handle_add_to_playlist(c); return true; case CMD_SHUFFLE: list_window_get_range(lw, &range); if (range.end <= range.start + 1) /* No range selection, shuffle all list. */ break; connection = mpdclient_get_connection(c); if (connection == NULL) return true; if (mpd_run_shuffle_range(connection, range.start, range.end)) screen_status_message(_("Shuffled queue")); else mpdclient_handle_error(c); return true; case CMD_LIST_MOVE_UP: list_window_get_range(lw, &range); if (range.start == 0 || range.end <= range.start) return false; if (!mpdclient_cmd_move(c, range.end - 1, range.start - 1)) return true; lw->selected--; lw->range_base--; if (lw->range_selection) list_window_scroll_to(lw, lw->range_base); list_window_scroll_to(lw, lw->selected); screen_queue_save_selection(); return true; case CMD_LIST_MOVE_DOWN: list_window_get_range(lw, &range); if (range.end >= playlist_length(&c->playlist)) return false; if (!mpdclient_cmd_move(c, range.start, range.end)) return true; lw->selected++; lw->range_base++; if (lw->range_selection) list_window_scroll_to(lw, lw->range_base); list_window_scroll_to(lw, lw->selected); screen_queue_save_selection(); return true; case CMD_LOCATE: if (screen_queue_selected_song() != NULL) { screen_file_goto_song(c, screen_queue_selected_song()); return true; } break; default: break; } return false; } const struct screen_functions screen_queue = { .init = screen_queue_init, .exit = screen_queue_exit, .open = screen_queue_open, .close = screen_queue_close, .resize = screen_queue_resize, .paint = screen_queue_paint, .update = screen_queue_update, .cmd = screen_queue_cmd, .get_title = screen_queue_title, }; ncmpc-0.27/src/screen_queue.h0000644000076400001440000000170213064037773013120 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_QUEUE_H #define NCMPC_SCREEN_QUEUE_H extern const struct screen_functions screen_queue; #endif ncmpc-0.27/src/screen_browser.c0000644000076400001440000003325313062774214013454 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "config.h" #include "screen_browser.h" #include "screen_file.h" #include "screen_song.h" #include "screen_lyrics.h" #include "screen_status.h" #include "screen_find.h" #include "screen.h" #include "i18n.h" #include "options.h" #include "charset.h" #include "strfsong.h" #include "mpdclient.h" #include "filelist.h" #include "colors.h" #include "paint.h" #include "song_paint.h" #include #include #define BUFSIZE 1024 #ifndef NCMPC_MINI #define HIGHLIGHT (0x01) #endif #ifndef NCMPC_MINI /* sync highlight flags with playlist */ void screen_browser_sync_highlights(struct filelist *fl, const struct mpdclient_playlist *playlist) { for (unsigned i = 0; i < filelist_length(fl); ++i) { struct filelist_entry *entry = filelist_get(fl, i); const struct mpd_entity *entity = entry->entity; if (entity != NULL && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const struct mpd_song *song = mpd_entity_get_song(entity); if (playlist_get_index_from_same_song(playlist, song) >= 0) entry->flags |= HIGHLIGHT; else entry->flags &= ~HIGHLIGHT; } } } #endif /* list_window callback */ static const char * browser_lw_callback(unsigned idx, void *data) { const struct filelist *fl = (const struct filelist *) data; static char buf[BUFSIZE]; assert(fl != NULL); assert(idx < filelist_length(fl)); const struct filelist_entry *entry = filelist_get(fl, idx); assert(entry != NULL); const struct mpd_entity *entity = entry->entity; if( entity == NULL ) return ".."; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY) { const struct mpd_directory *dir = mpd_entity_get_directory(entity); char *directory = utf8_to_locale(g_basename(mpd_directory_get_path(dir))); g_strlcpy(buf, directory, sizeof(buf)); g_free(directory); return buf; } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const struct mpd_song *song = mpd_entity_get_song(entity); strfsong(buf, BUFSIZE, options.list_format, song); return buf; } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) { const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); char *filename = utf8_to_locale(g_basename(mpd_playlist_get_path(playlist))); g_strlcpy(buf, filename, sizeof(buf)); g_free(filename); return buf; } return "Error: Unknown entry!"; } static bool load_playlist(struct mpdclient *c, const struct mpd_playlist *playlist) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; if (mpd_run_load(connection, mpd_playlist_get_path(playlist))) { char *filename = utf8_to_locale(mpd_playlist_get_path(playlist)); screen_status_printf(_("Loading playlist %s..."), g_basename(filename)); g_free(filename); c->events |= MPD_IDLE_QUEUE; } else mpdclient_handle_error(c); return true; } static bool enqueue_and_play(struct mpdclient *c, struct filelist_entry *entry) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; const struct mpd_song *song = mpd_entity_get_song(entry->entity); int id; #ifndef NCMPC_MINI if (!(entry->flags & HIGHLIGHT)) id = -1; else #endif id = playlist_get_id_from_same_song(&c->playlist, song); if (id < 0) { char buf[BUFSIZE]; id = mpd_run_add_id(connection, mpd_song_get_uri(song)); if (id < 0) { mpdclient_handle_error(c); return false; } #ifndef NCMPC_MINI entry->flags |= HIGHLIGHT; #endif strfsong(buf, BUFSIZE, options.list_format, song); screen_status_printf(_("Adding \'%s\' to queue"), buf); } if (!mpd_run_play_id(connection, id)) { mpdclient_handle_error(c); return false; } return true; } struct filelist_entry * browser_get_selected_entry(const struct screen_browser *browser) { struct list_window_range range; list_window_get_range(browser->lw, &range); if (browser->filelist == NULL || range.end <= range.start || range.end > range.start + 1 || range.start >= filelist_length(browser->filelist)) return NULL; return filelist_get(browser->filelist, range.start); } static const struct mpd_entity * browser_get_selected_entity(const struct screen_browser *browser) { const struct filelist_entry *entry = browser_get_selected_entry(browser); return entry != NULL ? entry->entity : NULL; } static const struct mpd_song * browser_get_selected_song(const struct screen_browser *browser) { const struct mpd_entity *entity = browser_get_selected_entity(browser); return entity != NULL && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG ? mpd_entity_get_song(entity) : NULL; } static struct filelist_entry * browser_get_index(const struct screen_browser *browser, unsigned i) { if (browser->filelist == NULL || i >= filelist_length(browser->filelist)) return NULL; return filelist_get(browser->filelist, i); } static bool browser_handle_enter(struct screen_browser *browser, struct mpdclient *c) { struct filelist_entry *entry = browser_get_selected_entry(browser); if (entry == NULL) return false; struct mpd_entity *entity = entry->entity; if (entity == NULL) return false; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) return load_playlist(c, mpd_entity_get_playlist(entity)); else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) return enqueue_and_play(c, entry); return false; } static bool browser_select_entry(struct mpdclient *c, struct filelist_entry *entry, gcc_unused gboolean toggle) { assert(entry != NULL); assert(entry->entity != NULL); if (mpd_entity_get_type(entry->entity) == MPD_ENTITY_TYPE_PLAYLIST) return load_playlist(c, mpd_entity_get_playlist(entry->entity)); if (mpd_entity_get_type(entry->entity) == MPD_ENTITY_TYPE_DIRECTORY) { const struct mpd_directory *dir = mpd_entity_get_directory(entry->entity); if (mpdclient_cmd_add_path(c, mpd_directory_get_path(dir))) { char *tmp = utf8_to_locale(mpd_directory_get_path(dir)); screen_status_printf(_("Adding \'%s\' to queue"), tmp); g_free(tmp); } return true; } if (mpd_entity_get_type(entry->entity) != MPD_ENTITY_TYPE_SONG) return false; #ifndef NCMPC_MINI if (!toggle || (entry->flags & HIGHLIGHT) == 0) #endif { const struct mpd_song *song = mpd_entity_get_song(entry->entity); #ifndef NCMPC_MINI entry->flags |= HIGHLIGHT; #endif if (mpdclient_cmd_add(c, song)) { char buf[BUFSIZE]; strfsong(buf, BUFSIZE, options.list_format, song); screen_status_printf(_("Adding \'%s\' to queue"), buf); } #ifndef NCMPC_MINI } else { /* remove song from playlist */ const struct mpd_song *song = mpd_entity_get_song(entry->entity); int idx; entry->flags &= ~HIGHLIGHT; while ((idx = playlist_get_index_from_same_song(&c->playlist, song)) >= 0) mpdclient_cmd_delete(c, idx); #endif } return true; } static bool browser_handle_select(struct screen_browser *browser, struct mpdclient *c) { struct list_window_range range; bool success = false; list_window_get_range(browser->lw, &range); for (unsigned i = range.start; i < range.end; ++i) { struct filelist_entry *entry = browser_get_index(browser, i); if (entry != NULL && entry->entity != NULL) success = browser_select_entry(c, entry, TRUE); } return range.end == range.start + 1 && success; } static bool browser_handle_add(struct screen_browser *browser, struct mpdclient *c) { struct list_window_range range; bool success = false; list_window_get_range(browser->lw, &range); for (unsigned i = range.start; i < range.end; ++i) { struct filelist_entry *entry = browser_get_index(browser, i); if (entry != NULL && entry->entity != NULL) success = browser_select_entry(c, entry, FALSE) || success; } return range.end == range.start + 1 && success; } static void browser_handle_select_all(struct screen_browser *browser, struct mpdclient *c) { if (browser->filelist == NULL) return; for (unsigned i = 0; i < filelist_length(browser->filelist); ++i) { struct filelist_entry *entry = filelist_get(browser->filelist, i); if (entry != NULL && entry->entity != NULL) browser_select_entry(c, entry, FALSE); } } #ifdef HAVE_GETMOUSE static int browser_handle_mouse_event(struct screen_browser *browser, struct mpdclient *c) { int row; unsigned prev_selected = browser->lw->selected; unsigned long bstate; if (screen_get_mouse_event(c, &bstate, &row) || list_window_mouse(browser->lw, bstate, row)) return 1; list_window_set_cursor(browser->lw, browser->lw->start + row); if( bstate & BUTTON1_CLICKED ) { if (prev_selected == browser->lw->selected) browser_handle_enter(browser, c); } else if (bstate & BUTTON3_CLICKED) { if (prev_selected == browser->lw->selected) browser_handle_select(browser, c); } return 1; } #endif static void screen_browser_paint_callback(WINDOW *w, unsigned i, unsigned y, unsigned width, bool selected, const void *data); bool browser_cmd(struct screen_browser *browser, struct mpdclient *c, command_t cmd) { if (browser->filelist == NULL) return false; if (list_window_cmd(browser->lw, cmd)) return true; switch (cmd) { #if defined(ENABLE_SONG_SCREEN) || defined(ENABLE_LYRICS_SCREEN) const struct mpd_song *song; #endif case CMD_LIST_FIND: case CMD_LIST_RFIND: case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: screen_find(browser->lw, cmd, browser_lw_callback, browser->filelist); return true; case CMD_LIST_JUMP: screen_jump(browser->lw, browser_lw_callback, browser->filelist, screen_browser_paint_callback, browser); return true; #ifdef HAVE_GETMOUSE case CMD_MOUSE_EVENT: browser_handle_mouse_event(browser, c); return true; #endif #ifdef ENABLE_SONG_SCREEN case CMD_SCREEN_SONG: song = browser_get_selected_song(browser); if (song == NULL) return false; screen_song_switch(c, song); return true; #endif #ifdef ENABLE_LYRICS_SCREEN case CMD_SCREEN_LYRICS: song = browser_get_selected_song(browser); if (song == NULL) return false; screen_lyrics_switch(c, song, false); return true; #endif case CMD_SCREEN_SWAP: screen_swap(c, browser_get_selected_song(browser)); return true; default: break; } if (!mpdclient_is_connected(c)) return false; switch (cmd) { const struct mpd_song *song; case CMD_PLAY: browser_handle_enter(browser, c); return true; case CMD_SELECT: if (browser_handle_select(browser, c)) list_window_cmd(browser->lw, CMD_LIST_NEXT); return true; case CMD_ADD: if (browser_handle_add(browser, c)) list_window_cmd(browser->lw, CMD_LIST_NEXT); return true; case CMD_SELECT_ALL: browser_handle_select_all(browser, c); return true; case CMD_LOCATE: song = browser_get_selected_song(browser); if (song == NULL) return false; screen_file_goto_song(c, song); return true; default: break; } return false; } void screen_browser_paint_directory(WINDOW *w, unsigned width, bool selected, const char *name) { row_color(w, COLOR_DIRECTORY, selected); waddch(w, '['); waddstr(w, name); waddch(w, ']'); /* erase the unused space after the text */ row_clear_to_eol(w, width, selected); } static void screen_browser_paint_playlist(WINDOW *w, unsigned width, bool selected, const char *name) { row_paint_text(w, width, COLOR_PLAYLIST, selected, name); } static void screen_browser_paint_callback(WINDOW *w, unsigned i, unsigned y, unsigned width, bool selected, const void *data) { const struct screen_browser *browser = (const struct screen_browser *) data; assert(browser != NULL); assert(browser->filelist != NULL); assert(i < filelist_length(browser->filelist)); const struct filelist_entry *entry = filelist_get(browser->filelist, i); assert(entry != NULL); const struct mpd_entity *entity = entry->entity; if (entity == NULL) { screen_browser_paint_directory(w, width, selected, ".."); return; } #ifndef NCMPC_MINI const bool highlight = (entry->flags & HIGHLIGHT) != 0; #else const bool highlight = false; #endif switch (mpd_entity_get_type(entity)) { const struct mpd_directory *directory; const struct mpd_playlist *playlist; char *p; case MPD_ENTITY_TYPE_DIRECTORY: directory = mpd_entity_get_directory(entity); p = utf8_to_locale(g_basename(mpd_directory_get_path(directory))); screen_browser_paint_directory(w, width, selected, p); g_free(p); break; case MPD_ENTITY_TYPE_SONG: paint_song_row(w, y, width, selected, highlight, mpd_entity_get_song(entity), NULL, browser->song_format); break; case MPD_ENTITY_TYPE_PLAYLIST: playlist = mpd_entity_get_playlist(entity); p = utf8_to_locale(g_basename(mpd_playlist_get_path(playlist))); screen_browser_paint_playlist(w, width, selected, p); g_free(p); break; default: row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, selected, ""); } } void screen_browser_paint(const struct screen_browser *browser) { list_window_paint2(browser->lw, screen_browser_paint_callback, browser); } ncmpc-0.27/src/screen_browser.h0000644000076400001440000000351013063737664013463 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SCREEN_BROWSER_H #define SCREEN_BROWSER_H #include "command.h" #include "config.h" #include "ncmpc_curses.h" #include struct mpdclient; struct mpdclient_playlist; struct filelist; struct list_window; struct list_window_state; struct screen_browser { struct list_window *lw; struct filelist *filelist; const char *song_format; }; #ifndef NCMPC_MINI void screen_browser_sync_highlights(struct filelist *fl, const struct mpdclient_playlist *playlist); #else static inline void screen_browser_sync_highlights(gcc_unused struct filelist *fl, gcc_unused const struct mpdclient_playlist *playlist) { } #endif void screen_browser_paint_directory(WINDOW *w, unsigned width, bool selected, const char *name); void screen_browser_paint(const struct screen_browser *browser); struct filelist_entry * browser_get_selected_entry(const struct screen_browser *browser); bool browser_cmd(struct screen_browser *browser, struct mpdclient *c, command_t cmd); #endif ncmpc-0.27/src/screen_file.c0000644000076400001440000002327313064037653012712 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_file.h" #include "screen_browser.h" #include "screen_interface.h" #include "screen_status.h" #include "save_playlist.h" #include "screen.h" #include "config.h" #include "i18n.h" #include "charset.h" #include "mpdclient.h" #include "filelist.h" #include "screen_utils.h" #include "screen_client.h" #include "options.h" #include #include #include #include #include static struct screen_browser browser; static char *current_path; static void screen_file_load_list(struct mpdclient *c, struct filelist *filelist) { struct mpd_connection *connection; connection = mpdclient_get_connection(c); if (connection == NULL) return; mpd_send_list_meta(connection, current_path); filelist_recv(filelist, connection); if (mpdclient_finish_command(c)) filelist_sort_dir_play(filelist, compare_filelist_entry_path); } static void screen_file_reload(struct mpdclient *c) { if (browser.filelist != NULL) filelist_free(browser.filelist); browser.filelist = filelist_new(); if (*current_path != 0) /* add a dummy entry for ./.. */ filelist_append(browser.filelist, NULL); screen_file_load_list(c, browser.filelist); list_window_set_length(browser.lw, filelist_length(browser.filelist)); } /** * Change to the specified absolute directory. */ static bool change_directory(struct mpdclient *c, const char *new_path) { g_free(current_path); current_path = g_strdup(new_path); screen_file_reload(c); screen_browser_sync_highlights(browser.filelist, &c->playlist); list_window_reset(browser.lw); return browser.filelist != NULL; } /** * Change to the parent directory of the current directory. */ static bool change_to_parent(struct mpdclient *c) { char *parent = g_path_get_dirname(current_path); if (strcmp(parent, ".") == 0) parent[0] = '\0'; char *old_path = current_path; current_path = NULL; bool success = change_directory(c, parent); g_free(parent); int idx = success ? filelist_find_directory(browser.filelist, old_path) : -1; g_free(old_path); if (success && idx >= 0) { /* set the cursor on the previous working directory */ list_window_set_cursor(browser.lw, idx); list_window_center(browser.lw, idx); } return success; } /** * Change to the directory referred by the specified #filelist_entry * object. */ static bool change_to_entry(struct mpdclient *c, const struct filelist_entry *entry) { assert(entry != NULL); if (entry->entity == NULL) return change_to_parent(c); else if (mpd_entity_get_type(entry->entity) == MPD_ENTITY_TYPE_DIRECTORY) return change_directory(c, mpd_directory_get_path(mpd_entity_get_directory(entry->entity))); else return false; } static bool screen_file_handle_enter(struct mpdclient *c) { const struct filelist_entry *entry = browser_get_selected_entry(&browser); if (entry == NULL) return false; return change_to_entry(c, entry); } static void handle_save(struct mpdclient *c) { struct list_window_range range; const char *defaultname = NULL; list_window_get_range(browser.lw, &range); if (range.start == range.end) return; for (unsigned i = range.start; i < range.end; ++i) { struct filelist_entry *entry = filelist_get(browser.filelist, i); if( entry && entry->entity ) { struct mpd_entity *entity = entry->entity; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) { const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); defaultname = mpd_playlist_get_path(playlist); } } } char *defaultname_utf8 = NULL; if(defaultname) defaultname_utf8 = utf8_to_locale(defaultname); playlist_save(c, NULL, defaultname_utf8); g_free(defaultname_utf8); } static void handle_delete(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return; struct list_window_range range; list_window_get_range(browser.lw, &range); for (unsigned i = range.start; i < range.end; ++i) { struct filelist_entry *entry = filelist_get(browser.filelist, i); if( entry==NULL || entry->entity==NULL ) continue; struct mpd_entity *entity = entry->entity; if (mpd_entity_get_type(entity) != MPD_ENTITY_TYPE_PLAYLIST) { /* translators: the "delete" command is only possible for playlists; the user attempted to delete a song or a directory or something else */ screen_status_printf(_("Deleting this item is not possible")); screen_bell(); continue; } const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); char *str = utf8_to_locale(g_basename(mpd_playlist_get_path(playlist))); char *buf = g_strdup_printf(_("Delete playlist %s?"), str); g_free(str); bool delete = screen_get_yesno(buf, false); g_free(buf); if (!delete) { /* translators: a dialog was aborted by the user */ screen_status_printf(_("Aborted")); return; } if (!mpd_run_rm(connection, mpd_playlist_get_path(playlist))) { mpdclient_handle_error(c); break; } c->events |= MPD_IDLE_STORED_PLAYLIST; /* translators: MPD deleted the playlist, as requested by the user */ screen_status_printf(_("Playlist deleted")); } } static void screen_file_init(WINDOW *w, unsigned cols, unsigned rows) { current_path = g_strdup(""); browser.lw = list_window_init(w, cols, rows); browser.song_format = options.list_format; } static void screen_file_resize(unsigned cols, unsigned rows) { list_window_resize(browser.lw, cols, rows); } static void screen_file_exit(void) { if (browser.filelist) filelist_free(browser.filelist); list_window_free(browser.lw); g_free(current_path); } static void screen_file_open(struct mpdclient *c) { screen_file_reload(c); screen_browser_sync_highlights(browser.filelist, &c->playlist); } static const char * screen_file_get_title(char *str, size_t size) { const char *path = NULL, *prev = NULL, *slash = current_path; /* determine the last 2 parts of the path */ while ((slash = strchr(slash, '/')) != NULL) { path = prev; prev = ++slash; } if (path == NULL) /* fall back to full path */ path = current_path; char *path_locale = utf8_to_locale(path); g_snprintf(str, size, "%s: %s", /* translators: caption of the browser screen */ _("Browse"), path_locale); g_free(path_locale); return str; } static void screen_file_paint(void) { screen_browser_paint(&browser); } static void screen_file_update(struct mpdclient *c) { if (c->events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST)) { /* the db has changed -> update the filelist */ screen_file_reload(c); } if (c->events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST #ifndef NCMPC_MINI | MPD_IDLE_QUEUE #endif )) { screen_browser_sync_highlights(browser.filelist, &c->playlist); screen_file_paint(); } } static bool screen_file_cmd(struct mpdclient *c, command_t cmd) { switch(cmd) { case CMD_PLAY: if (screen_file_handle_enter(c)) { screen_file_paint(); return true; } break; case CMD_GO_ROOT_DIRECTORY: change_directory(c, ""); screen_file_paint(); return true; case CMD_GO_PARENT_DIRECTORY: change_to_parent(c); screen_file_paint(); return true; case CMD_LOCATE: /* don't let browser_cmd() evaluate the locate command - it's a no-op, and by the way, leads to a segmentation fault in the current implementation */ return false; case CMD_SCREEN_UPDATE: screen_file_reload(c); screen_browser_sync_highlights(browser.filelist, &c->playlist); screen_file_paint(); return false; default: break; } if (browser_cmd(&browser, c, cmd)) { if (screen_is_visible(&screen_browse)) screen_file_paint(); return true; } if (!mpdclient_is_connected(c)) return false; switch(cmd) { case CMD_DELETE: handle_delete(c); screen_file_paint(); break; case CMD_SAVE_PLAYLIST: handle_save(c); break; case CMD_DB_UPDATE: screen_database_update(c, current_path); return true; default: break; } return false; } const struct screen_functions screen_browse = { .init = screen_file_init, .exit = screen_file_exit, .open = screen_file_open, .resize = screen_file_resize, .paint = screen_file_paint, .update = screen_file_update, .cmd = screen_file_cmd, .get_title = screen_file_get_title, }; bool screen_file_goto_song(struct mpdclient *c, const struct mpd_song *song) { const char *uri, *slash, *parent; char *allocated = NULL; assert(song != NULL); uri = mpd_song_get_uri(song); if (strstr(uri, "//") != NULL) /* an URL? */ return false; /* determine the song's parent directory and go there */ slash = strrchr(uri, '/'); if (slash != NULL) parent = allocated = g_strndup(uri, slash - uri); else parent = ""; bool ret = change_directory(c, parent); g_free(allocated); if (!ret) return false; /* select the specified song */ int i = filelist_find_song(browser.filelist, song); if (i < 0) i = 0; list_window_set_cursor(browser.lw, i); /* finally, switch to the file screen */ screen_switch(&screen_browse, c); return true; } ncmpc-0.27/src/screen_file.h0000644000076400001440000000211213063051146012674 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_FILE_H #define NCMPC_SCREEN_FILE_H #include struct mpdclient; struct mpd_song; extern const struct screen_functions screen_browse; bool screen_file_goto_song(struct mpdclient *c, const struct mpd_song *song); #endif ncmpc-0.27/src/list_window.c0000644000076400001440000003440213062774214012771 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "list_window.h" #include "config.h" #include "options.h" #include "charset.h" #include "match.h" #include "command.h" #include "colors.h" #include "paint.h" #include "screen_status.h" #include "i18n.h" #include #include #include #include extern void screen_bell(void); struct list_window * list_window_init(WINDOW *w, unsigned width, unsigned height) { struct list_window *lw; lw = g_malloc0(sizeof(*lw)); lw->w = w; lw->cols = width; lw->rows = height; lw->range_selection = false; return lw; } void list_window_free(struct list_window *lw) { assert(lw != NULL); g_free(lw); } void list_window_reset(struct list_window *lw) { lw->selected = 0; lw->range_selection = false; lw->range_base = 0; lw->start = 0; } static unsigned list_window_validate_index(const struct list_window *lw, unsigned i) { if (lw->length == 0) return 0; else if (i >= lw->length) return lw->length - 1; else return i; } static void list_window_check_selected(struct list_window *lw) { lw->selected = list_window_validate_index(lw, lw->selected); if(lw->range_selection) lw->range_base = list_window_validate_index(lw, lw->range_base); } /** * Scroll after the cursor was moved, the list was changed or the * window was resized. */ static void list_window_check_origin(struct list_window *lw) { list_window_scroll_to(lw, lw->selected); } void list_window_resize(struct list_window *lw, unsigned width, unsigned height) { lw->cols = width; lw->rows = height; list_window_check_origin(lw); } void list_window_set_length(struct list_window *lw, unsigned length) { if (length == lw->length) return; lw->length = length; list_window_check_selected(lw); list_window_check_origin(lw); } void list_window_center(struct list_window *lw, unsigned n) { if (n > lw->rows / 2) lw->start = n - lw->rows / 2; else lw->start = 0; if (lw->start + lw->rows > lw->length) { if (lw->rows < lw->length) lw->start = lw->length - lw->rows; else lw->start = 0; } } void list_window_scroll_to(struct list_window *lw, unsigned n) { int start = lw->start; if ((unsigned) options.scroll_offset * 2 >= lw->rows) // Center if the offset is more than half the screen start = n - lw->rows / 2; else { if (n < lw->start + options.scroll_offset) start = n - options.scroll_offset; if (n >= lw->start + lw->rows - options.scroll_offset) start = n - lw->rows + 1 + options.scroll_offset; } if (start + lw->rows > lw->length) start = lw->length - lw->rows; if (start < 0 || lw->length == 0) start = 0; lw->start = start; } void list_window_set_cursor(struct list_window *lw, unsigned i) { lw->range_selection = false; lw->selected = i; list_window_check_selected(lw); list_window_check_origin(lw); } void list_window_move_cursor(struct list_window *lw, unsigned n) { lw->selected = n; list_window_check_selected(lw); list_window_check_origin(lw); } void list_window_fetch_cursor(struct list_window *lw) { if (lw->start > 0 && lw->selected < lw->start + options.scroll_offset) list_window_move_cursor(lw, lw->start + options.scroll_offset); else if (lw->start + lw->rows < lw->length && lw->selected > lw->start + lw->rows - 1 - options.scroll_offset) list_window_move_cursor(lw, lw->start + lw->rows - 1 - options.scroll_offset); } void list_window_get_range(const struct list_window *lw, struct list_window_range *range) { if (lw->length == 0) { /* empty list - no selection */ range->start = 0; range->end = 0; } else if (lw->range_selection) { /* a range selection */ if (lw->range_base < lw->selected) { range->start = lw->range_base; range->end = lw->selected + 1; } else { range->start = lw->selected; range->end = lw->range_base + 1; } } else { /* no range, just the cursor */ range->start = lw->selected; range->end = lw->selected + 1; } } static void list_window_next(struct list_window *lw) { if (lw->selected + 1 < lw->length) list_window_move_cursor(lw, lw->selected + 1); else if (options.list_wrap) list_window_move_cursor(lw, 0); } static void list_window_previous(struct list_window *lw) { if (lw->selected > 0) list_window_move_cursor(lw, lw->selected - 1); else if (options.list_wrap) list_window_move_cursor(lw, lw->length - 1); } static void list_window_top(struct list_window *lw) { if (lw->start == 0) list_window_move_cursor(lw, lw->start); else if ((unsigned) options.scroll_offset * 2 >= lw->rows) list_window_move_cursor(lw, lw->start + lw->rows / 2); else list_window_move_cursor(lw, lw->start + options.scroll_offset); } static void list_window_middle(struct list_window *lw) { if (lw->length >= lw->rows) list_window_move_cursor(lw, lw->start + lw->rows / 2); else list_window_move_cursor(lw, lw->length / 2); } static void list_window_bottom(struct list_window *lw) { if (lw->length >= lw->rows) if ((unsigned) options.scroll_offset * 2 >= lw->rows) list_window_move_cursor(lw, lw->start + lw->rows / 2); else if (lw->start + lw->rows == lw->length) list_window_move_cursor(lw, lw->length - 1); else list_window_move_cursor(lw, lw->start + lw->rows - 1 - options.scroll_offset); else list_window_move_cursor(lw, lw->length - 1); } static void list_window_first(struct list_window *lw) { list_window_move_cursor(lw, 0); } static void list_window_last(struct list_window *lw) { if (lw->length > 0) list_window_move_cursor(lw, lw->length - 1); else list_window_move_cursor(lw, 0); } static void list_window_next_page(struct list_window *lw) { if (lw->rows < 2) return; if (lw->selected + lw->rows < lw->length) list_window_move_cursor(lw, lw->selected + lw->rows - 1); else list_window_last(lw); } static void list_window_previous_page(struct list_window *lw) { if (lw->rows < 2) return; if (lw->selected > lw->rows - 1) list_window_move_cursor(lw, lw->selected - lw->rows + 1); else list_window_first(lw); } static void list_window_scroll_up(struct list_window *lw, unsigned n) { if (lw->start > 0) { if (n > lw->start) lw->start = 0; else lw->start -= n; list_window_fetch_cursor(lw); } } static void list_window_scroll_down(struct list_window *lw, unsigned n) { if (lw->start + lw->rows < lw->length) { if (lw->start + lw->rows + n > lw->length - 1) lw->start = lw->length - lw->rows; else lw->start += n; list_window_fetch_cursor(lw); } } static void list_window_paint_row(WINDOW *w, unsigned width, bool selected, const char *text) { row_paint_text(w, width, COLOR_LIST, selected, text); } void list_window_paint(const struct list_window *lw, list_window_callback_fn_t callback, void *callback_data) { bool show_cursor = !lw->hide_cursor && (!options.hardware_cursor || lw->range_selection); struct list_window_range range; if (show_cursor) list_window_get_range(lw, &range); for (unsigned i = 0; i < lw->rows; i++) { wmove(lw->w, i, 0); if (lw->start + i >= lw->length) { wclrtobot(lw->w); break; } const char *label = callback(lw->start + i, callback_data); assert(label != NULL); list_window_paint_row(lw->w, lw->cols, show_cursor && lw->start + i >= range.start && lw->start + i < range.end, label); } row_color_end(lw->w); if (options.hardware_cursor && lw->selected >= lw->start && lw->selected < lw->start + lw->rows) { curs_set(1); wmove(lw->w, lw->selected - lw->start, 0); } } void list_window_paint2(const struct list_window *lw, list_window_paint_callback_t paint_callback, const void *callback_data) { bool show_cursor = !lw->hide_cursor && (!options.hardware_cursor || lw->range_selection); struct list_window_range range; if (show_cursor) list_window_get_range(lw, &range); for (unsigned i = 0; i < lw->rows; i++) { wmove(lw->w, i, 0); if (lw->start + i >= lw->length) { wclrtobot(lw->w); break; } bool selected = show_cursor && lw->start + i >= range.start && lw->start + i < range.end; paint_callback(lw->w, lw->start + i, i, lw->cols, selected, callback_data); } if (options.hardware_cursor && lw->selected >= lw->start && lw->selected < lw->start + lw->rows) { curs_set(1); wmove(lw->w, lw->selected - lw->start, 0); } } bool list_window_find(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str, bool wrap, bool bell_on_wrap) { unsigned i = lw->selected + 1; assert(str != NULL); do { while (i < lw->length) { const char *label = callback(i, callback_data); assert(label != NULL); if (match_line(label, str)) { list_window_move_cursor(lw, i); return true; } if (wrap && i == lw->selected) return false; i++; } if (wrap) { if (i == 0) /* empty list */ return 1; i=0; /* first item */ if (bell_on_wrap) { screen_bell(); } } } while (wrap); return false; } bool list_window_rfind(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str, bool wrap, bool bell_on_wrap) { int i = lw->selected - 1; assert(str != NULL); if (lw->length == 0) return false; do { while (i >= 0) { const char *label = callback(i, callback_data); assert(label != NULL); if (match_line(label, str)) { list_window_move_cursor(lw, i); return true; } if (wrap && i == (int)lw->selected) return false; i--; } if (wrap) { i = lw->length - 1; /* last item */ if (bell_on_wrap) { screen_bell(); } } } while (wrap); return false; } #ifdef NCMPC_MINI bool list_window_jump(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str) { assert(str != NULL); for (unsigned i = 0; i < lw->length; i++) { const char *label = callback(i, callback_data); assert(label != NULL); if (g_ascii_strncasecmp(label, str, strlen(str)) == 0) { list_window_move_cursor(lw, i); return true; } } return false; } #else bool list_window_jump(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str) { assert(str != NULL); GRegex *regex = compile_regex(str, options.jump_prefix_only); if (regex == NULL) return false; for (unsigned i = 0; i < lw->length; i++) { const char *label = callback(i, callback_data); assert(label != NULL); if (match_regex(regex, label)) { g_regex_unref(regex); list_window_move_cursor(lw, i); return true; } } g_regex_unref(regex); return false; } #endif /* perform basic list window commands (movement) */ bool list_window_cmd(struct list_window *lw, command_t cmd) { switch (cmd) { case CMD_LIST_PREVIOUS: list_window_previous(lw); break; case CMD_LIST_NEXT: list_window_next(lw); break; case CMD_LIST_TOP: list_window_top(lw); break; case CMD_LIST_MIDDLE: list_window_middle(lw); break; case CMD_LIST_BOTTOM: list_window_bottom(lw); break; case CMD_LIST_FIRST: list_window_first(lw); break; case CMD_LIST_LAST: list_window_last(lw); break; case CMD_LIST_NEXT_PAGE: list_window_next_page(lw); break; case CMD_LIST_PREVIOUS_PAGE: list_window_previous_page(lw); break; case CMD_LIST_RANGE_SELECT: if(lw->range_selection) { screen_status_printf(_("Range selection disabled")); list_window_set_cursor(lw, lw->selected); } else { screen_status_printf(_("Range selection enabled")); lw->range_base = lw->selected; lw->range_selection = true; } break; case CMD_LIST_SCROLL_UP_LINE: list_window_scroll_up(lw, 1); break; case CMD_LIST_SCROLL_DOWN_LINE: list_window_scroll_down(lw, 1); break; case CMD_LIST_SCROLL_UP_HALF: list_window_scroll_up(lw, (lw->rows - 1) / 2); break; case CMD_LIST_SCROLL_DOWN_HALF: list_window_scroll_down(lw, (lw->rows - 1) / 2); break; default: return false; } return true; } bool list_window_scroll_cmd(struct list_window *lw, command_t cmd) { switch (cmd) { case CMD_LIST_SCROLL_UP_LINE: case CMD_LIST_PREVIOUS: if (lw->start > 0) lw->start--; break; case CMD_LIST_SCROLL_DOWN_LINE: case CMD_LIST_NEXT: if (lw->start + lw->rows < lw->length) lw->start++; break; case CMD_LIST_FIRST: lw->start = 0; break; case CMD_LIST_LAST: if (lw->length > lw->rows) lw->start = lw->length - lw->rows; else lw->start = 0; break; case CMD_LIST_NEXT_PAGE: lw->start += lw->rows; if (lw->start + lw->rows > lw->length) { if (lw->length > lw->rows) lw->start = lw->length - lw->rows; else lw->start = 0; } break; case CMD_LIST_PREVIOUS_PAGE: if (lw->start > lw->rows) lw->start -= lw->rows; else lw->start = 0; break; case CMD_LIST_SCROLL_UP_HALF: if (lw->start > (lw->rows - 1) / 2) lw->start -= (lw->rows - 1) / 2; else lw->start = 0; break; case CMD_LIST_SCROLL_DOWN_HALF: lw->start += (lw->rows - 1) / 2; if (lw->start + lw->rows > lw->length) { if (lw->length > lw->rows) lw->start = lw->length - lw->rows; else lw->start = 0; } break; default: return false; } return true; } #ifdef HAVE_GETMOUSE bool list_window_mouse(struct list_window *lw, unsigned long bstate, int y) { assert(lw != NULL); /* if the even occurred above the list window move up */ if (y < 0) { if (bstate & BUTTON3_CLICKED) list_window_first(lw); else list_window_previous_page(lw); return true; } /* if the even occurred below the list window move down */ if ((unsigned)y >= lw->length) { if (bstate & BUTTON3_CLICKED) list_window_last(lw); else list_window_next_page(lw); return true; } return false; } #endif ncmpc-0.27/src/list_window.h0000644000076400001440000001121613064304620012764 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef LIST_WINDOW_H #define LIST_WINDOW_H #include "config.h" #include "command.h" #include "colors.h" #include "ncmpc_curses.h" #include #include typedef const char * (*list_window_callback_fn_t)(unsigned i, void *data); typedef void (*list_window_paint_callback_t)(WINDOW *w, unsigned i, unsigned y, unsigned width, bool selected, const void *data); struct list_window { WINDOW *w; unsigned rows, cols; /** * Number of items in this list. */ unsigned length; unsigned start; unsigned selected; /** * Represents the base item. */ unsigned range_base; /** * Range selection activated? */ bool range_selection; bool hide_cursor; }; /** * The bounds of a range selection, see list_window_get_range(). */ struct list_window_range { /** * The index of the first selected item. */ unsigned start; /** * The index after the last selected item. The selection is * empty when this is the same as "start". */ unsigned end; }; /* create a new list window */ struct list_window *list_window_init(WINDOW *w, unsigned width, unsigned height); /* destroy a list window */ void list_window_free(struct list_window *lw); /* reset a list window (selected=0, start=0) */ void list_window_reset(struct list_window *lw); void list_window_resize(struct list_window *lw, unsigned width, unsigned height); void list_window_set_length(struct list_window *lw, unsigned length); /* paint a list window */ void list_window_paint(const struct list_window *lw, list_window_callback_fn_t callback, void *callback_data); void list_window_paint2(const struct list_window *lw, list_window_paint_callback_t paint_callback, const void *callback_data); /* perform basic list window commands (movement) */ bool list_window_cmd(struct list_window *lw, command_t cmd); /** * Scroll the window. Returns true if the command has been * consumed. */ bool list_window_scroll_cmd(struct list_window *lw, command_t cmd); #ifdef HAVE_GETMOUSE /** * The mouse was clicked. Check if the list should be scrolled * Returns non-zero if the mouse event has been handled. */ bool list_window_mouse(struct list_window *lw, unsigned long bstate, int y); #endif /** * Centers the visible range around item n on the list. */ void list_window_center(struct list_window *lw, unsigned n); /** * Scrolls the view to item n, as if the cursor would have been moved * to the position. */ void list_window_scroll_to(struct list_window *lw, unsigned n); /** * Sets the position of the cursor. Disables range selection. */ void list_window_set_cursor(struct list_window *lw, unsigned i); /** * Moves the cursor. Modifies the range if range selection is * enabled. */ void list_window_move_cursor(struct list_window *lw, unsigned n); /** * Ensures that the cursor is visible on the screen, i.e. it is not * outside the current scrolling range. */ void list_window_fetch_cursor(struct list_window *lw); /** * Determines the lower and upper bound of the range selection. If * range selection is disabled, it returns the cursor position (range * length is 1). */ void list_window_get_range(const struct list_window *lw, struct list_window_range *range); /* find a string in a list window */ bool list_window_find(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str, bool wrap, bool bell_on_wrap); /* find a string in a list window (reversed) */ bool list_window_rfind(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str, bool wrap, bool bell_on_wrap); /* find a string in a list window which begins with the given characters in *str */ bool list_window_jump(struct list_window *lw, list_window_callback_fn_t callback, void *callback_data, const char *str); #endif ncmpc-0.27/src/save_playlist.c0000644000076400001440000001045613064315734013311 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "save_playlist.h" #include "db_completion.h" #include "screen_status.h" #include "config.h" #include "i18n.h" #include "charset.h" #include "mpdclient.h" #include "utils.h" #include "wreadln.h" #include "screen_utils.h" #include "Compiler.h" #include #include #include #ifndef NCMPC_MINI typedef struct { GList **list; struct mpdclient *c; } completion_callback_data_t; /** * Wrapper for strncmp(). We are not allowed to pass &strncmp to * g_completion_set_compare(), because strncmp() takes size_t where * g_completion_set_compare passes a gsize value. */ static gint completion_strncmp(const gchar *s1, const gchar *s2, gsize n) { return strncmp(s1, s2, n); } static void save_pre_completion_cb(GCompletion *gcmp, gcc_unused gchar *line, void *data) { completion_callback_data_t *tmp = (completion_callback_data_t *)data; GList **list = tmp->list; struct mpdclient *c = tmp->c; if( *list == NULL ) { /* create completion list */ *list = gcmp_list_from_path(c, "", NULL, GCMP_TYPE_PLAYLIST); g_completion_add_items(gcmp, *list); } } static void save_post_completion_cb(gcc_unused GCompletion *gcmp, gcc_unused gchar *line, GList *items, gcc_unused void *data) { if (g_list_length(items) >= 1) screen_display_completion_list(items); } #endif int playlist_save(struct mpdclient *c, char *name, char *defaultname) { struct mpd_connection *connection; gchar *filename; #ifdef NCMPC_MINI (void)defaultname; #endif #ifndef NCMPC_MINI if (name == NULL) { /* initialize completion support */ GCompletion *gcmp = g_completion_new(NULL); g_completion_set_compare(gcmp, completion_strncmp); GList *list = NULL; completion_callback_data_t data = { .list = &list, .c = c, }; wrln_completion_callback_data = &data; wrln_pre_completion_callback = save_pre_completion_cb; wrln_post_completion_callback = save_post_completion_cb; /* query the user for a filename */ filename = screen_readln(_("Save queue as"), defaultname, NULL, gcmp); if (filename == NULL) return -1; /* destroy completion support */ wrln_completion_callback_data = NULL; wrln_pre_completion_callback = NULL; wrln_post_completion_callback = NULL; g_completion_free(gcmp); list = string_list_free(list); filename = g_strstrip(filename); } else #endif filename=g_strdup(name); /* send save command to mpd */ connection = mpdclient_get_connection(c); if (connection == NULL) { g_free(filename); return -1; } char *filename_utf8 = locale_to_utf8(filename); if (!mpd_run_save(connection, filename_utf8)) { if (mpd_connection_get_error(connection) == MPD_ERROR_SERVER && mpd_connection_get_server_error(connection) == MPD_SERVER_ERROR_EXIST && mpd_connection_clear_error(connection)) { char *buf = g_strdup_printf(_("Replace %s?"), filename); bool replace = screen_get_yesno(buf, false); g_free(buf); if (!replace) { g_free(filename_utf8); g_free(filename); screen_status_printf(_("Aborted")); return -1; } if (!mpd_run_rm(connection, filename_utf8) || !mpd_run_save(connection, filename_utf8)) { mpdclient_handle_error(c); g_free(filename_utf8); g_free(filename); return -1; } } else { mpdclient_handle_error(c); g_free(filename_utf8); g_free(filename); return -1; } } c->events |= MPD_IDLE_STORED_PLAYLIST; g_free(filename_utf8); /* success */ screen_status_printf(_("Saved %s"), filename); g_free(filename); return 0; } ncmpc-0.27/src/save_playlist.h0000644000076400001440000000173713064037617013321 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SAVE_PLAYLIST_H #define SAVE_PLAYLIST_H struct mpdclient; int playlist_save(struct mpdclient *c, char *name, char *defaultname); #endif ncmpc-0.27/src/paint.h0000644000076400001440000000372113062774214011547 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_PAINT_H #define NCMPC_PAINT_H #include "colors.h" #include "options.h" /** * Sets the specified color, and enables "reverse" mode if selected is * true. */ static inline void row_color(WINDOW *w, enum color color, bool selected) { colors_use(w, color); if (selected) wattron(w, A_REVERSE); else wattroff(w, A_REVERSE); } /** * Call this when you are done with painting rows. It resets the * "reverse" mode. */ static inline void row_color_end(WINDOW *w) { wattroff(w, A_REVERSE); } /** * Clears the remaining space on the current row. If the row is * selected and the wide_cursor option is enabled, it draws the cursor * on the space. */ static inline void row_clear_to_eol(WINDOW *w, unsigned width, bool selected) { if (selected && options.wide_cursor) whline(w, ' ', width); else wclrtoeol(w); } /** * Paint a plain-text row. */ static inline void row_paint_text(WINDOW *w, unsigned width, enum color color, bool selected, const char *text) { row_color(w, color, selected); waddstr(w, text); /* erase the unused space after the text */ row_clear_to_eol(w, width, selected); } #endif ncmpc-0.27/src/song_paint.c0000644000076400001440000000352113064320630012555 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "song_paint.h" #include "paint.h" #include "strfsong.h" #include "time_format.h" #include "hscroll.h" #include "charset.h" #include "config.h" #include #include #include void paint_song_row(WINDOW *w, gcc_unused unsigned y, unsigned width, bool selected, bool highlight, const struct mpd_song *song, gcc_unused struct hscroll *hscroll, const char *format) { char buffer[width * 4]; strfsong(buffer, sizeof(buffer), format, song); row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, selected, buffer); #ifndef NCMPC_MINI if (options.second_column && mpd_song_get_duration(song) > 0) { char duration[32]; format_duration_short(duration, sizeof(duration), mpd_song_get_duration(song)); width -= strlen(duration) + 1; wmove(w, y, width); waddch(w, ' '); waddstr(w, duration); } if (hscroll != NULL && utf8_width(buffer) >= width) { hscroll_set(hscroll, 0, y, width, buffer); hscroll_draw(hscroll); } #endif } ncmpc-0.27/src/song_paint.h0000644000076400001440000000316413062774214012576 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SONG_PAINT_H #define NCMPC_SONG_PAINT_H #include "config.h" #include "ncmpc_curses.h" #include struct mpd_song; struct hscroll; /** * Paints a song into a list window row. The cursor must be set to * the first character in the row prior to calling this function. * * @param w the ncurses window * @param y the row number in the window * @param width the width of the row * @param selected true if the row is selected * @param highlight true if the row is highlighted * @param song the song object * @param hscroll an optional hscroll object * @param format the song format */ void paint_song_row(WINDOW *w, unsigned y, unsigned width, bool selected, bool highlight, const struct mpd_song *song, struct hscroll *hscroll, const char *format); #endif ncmpc-0.27/src/colors.c0000644000076400001440000001607513064312564011734 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "colors.h" #include "i18n.h" #include "ncfix.h" #ifdef ENABLE_COLORS #include "options.h" #endif #include #include #include #include #include #define COLOR_NONE G_MININT /* left most bit only */ #define COLOR_ERROR -2 #ifdef ENABLE_COLORS typedef struct { short color; short r,g,b; } color_definition_entry_t; #endif typedef struct { const char *name; int color; int mono; } color_entry_t; static color_entry_t colors[COLOR_END] = { /* color pair = field name, color, mono */ [COLOR_TITLE] = {"title", COLOR_YELLOW, A_NORMAL}, [COLOR_TITLE_BOLD] = {"title-bold", COLOR_YELLOW | A_BOLD, A_BOLD }, [COLOR_LINE] = {"line", COLOR_WHITE, A_NORMAL}, [COLOR_LINE_BOLD] = {"line-bold", COLOR_WHITE | A_BOLD, A_BOLD }, [COLOR_LINE_FLAGS] = {"line-flags", COLOR_YELLOW, A_NORMAL}, [COLOR_LIST] = {"list", COLOR_GREEN, A_NORMAL}, [COLOR_LIST_BOLD] = {"list-bold", COLOR_GREEN | A_BOLD, A_BOLD }, [COLOR_PROGRESSBAR] = {"progressbar", COLOR_WHITE, A_NORMAL}, [COLOR_STATUS] = {"status-song", COLOR_YELLOW, A_NORMAL}, [COLOR_STATUS_BOLD] = {"status-state", COLOR_YELLOW | A_BOLD, A_BOLD }, [COLOR_STATUS_TIME] = {"status-time", COLOR_RED, A_NORMAL}, [COLOR_STATUS_ALERT] = {"alert", COLOR_RED | A_BOLD, A_BOLD }, [COLOR_DIRECTORY] = {"browser-directory", COLOR_YELLOW, A_NORMAL}, [COLOR_PLAYLIST] = {"browser-playlist", COLOR_RED, A_NORMAL}, [COLOR_BACKGROUND] = {"background", COLOR_BLACK, A_NORMAL}, }; #ifdef ENABLE_COLORS static GList *color_definition_list = NULL; static color_entry_t * colors_lookup_by_name(const char *name) { for (enum color i = 1; i < COLOR_END; ++i) if (!strcasecmp(colors[i].name, name)) return &colors[i]; return NULL; } static void colors_update_pair(enum color id) { assert(id > 0 && id < COLOR_END); int fg = colors[id].color; int bg = colors[COLOR_BACKGROUND].color; /* If color == COLOR_NONE (negative), * pass -1 to avoid cast errors */ init_pair(id, (fg < 0 ? -1 : fg), (bg < 0 ? -1 : bg)); } int colors_str2color(const char *str) { int color = 0; char **parts = g_strsplit(str, ",", 0); for (int i = 0; parts[i]; i++) { char *cur = parts[i]; /* Legacy colors (brightblue,etc) */ if (!strncasecmp(cur, "bright", 6)) { color |= A_BOLD; cur += 6; } /* Colors */ if (!strcasecmp(cur, "none")) color |= COLOR_NONE; else if (!strcasecmp(cur, "black")) color |= COLOR_BLACK; else if (!strcasecmp(cur, "red")) color |= COLOR_RED; else if (!strcasecmp(cur, "green")) color |= COLOR_GREEN; else if (!strcasecmp(cur, "yellow")) color |= COLOR_YELLOW; else if (!strcasecmp(cur, "blue")) color |= COLOR_BLUE; else if (!strcasecmp(cur, "magenta")) color |= COLOR_MAGENTA; else if (!strcasecmp(cur, "cyan")) color |= COLOR_CYAN; else if (!strcasecmp(cur, "white")) color |= COLOR_WHITE; else if (!strcasecmp(cur, "grey") || !strcasecmp(cur, "gray")) color |= COLOR_BLACK | A_BOLD; /* Attributes */ else if (!strcasecmp(cur, "standout")) color |= A_STANDOUT; else if (!strcasecmp(cur, "underline")) color |= A_UNDERLINE; else if (!strcasecmp(cur, "reverse")) color |= A_REVERSE; else if (!strcasecmp(cur, "blink")) color |= A_BLINK; else if (!strcasecmp(cur, "dim")) color |= A_DIM; else if (!strcasecmp(cur, "bold")) color |= A_BOLD; else { /* Numerical colors */ char *endptr; int tmp = strtol(cur, &endptr, 10); if (cur != endptr && endptr[0] == '\0') { color |= tmp; } else { fprintf(stderr, "%s: %s\n", _("Unknown color"), str); return COLOR_ERROR; } } } g_strfreev(parts); return color; } /* This function is called from conf.c before curses have been started, * it adds the definition to the color_definition_list and init_color() is * done in colors_start() */ bool colors_define(const char *name, short r, short g, short b) { int color = colors_str2color(name); if (color < 0) return false; color_definition_entry_t *entry = g_malloc(sizeof(color_definition_entry_t)); entry->color = color; entry->r = r; entry->g = g; entry->b = b; color_definition_list = g_list_append(color_definition_list, entry); return true; } bool colors_assign(const char *name, const char *value) { color_entry_t *entry = colors_lookup_by_name(name); if (!entry) { fprintf(stderr, "%s: %s", _("Unknown color field"), name); return false; } const int color = colors_str2color(value); if (color == COLOR_ERROR) return false; entry->color = color; return true; } void colors_start(void) { if (has_colors()) { /* initialize color support */ start_color(); use_default_colors(); /* define any custom colors defined in the configuration file */ if (color_definition_list && can_change_color()) { GList *list = color_definition_list; while (list) { color_definition_entry_t *entry = list->data; if (entry->color <= COLORS) init_color(entry->color, entry->r, entry->g, entry->b); list = list->next; } } else if (color_definition_list && !can_change_color()) fprintf(stderr, "%s\n", _("Terminal lacks support for changing colors")); if (options.enable_colors) { for (enum color i = 1; i < COLOR_END; ++i) /* update the color pairs */ colors_update_pair(i); } } else if (options.enable_colors) { fprintf(stderr, "%s\n", _("Terminal lacks color capabilities")); options.enable_colors = 0; } /* free the color_definition_list */ if (color_definition_list) { g_list_free_full(color_definition_list, g_free); color_definition_list = NULL; } } #endif void colors_use(WINDOW *w, enum color id) { color_entry_t *entry = &colors[id]; assert(id > 0 && id < COLOR_END); attr_t attrs; short pair; fix_wattr_get(w, &attrs, &pair, NULL); #ifdef ENABLE_COLORS if (options.enable_colors) { /* color mode */ if ((int)attrs != entry->color || (short)id != pair) wattr_set(w, entry->color, id, NULL); } else { #endif /* mono mode */ if ((int)attrs != entry->mono) (void)wattrset(w, entry->mono); #ifdef ENABLE_COLORS } #endif } ncmpc-0.27/src/colors.h0000644000076400001440000000302713064310535011726 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef COLORS_H #define COLORS_H #include "config.h" #include "ncmpc_curses.h" #include "Compiler.h" #include enum color { COLOR_TITLE = 1, COLOR_TITLE_BOLD, COLOR_LINE, COLOR_LINE_BOLD, COLOR_LINE_FLAGS, COLOR_LIST, COLOR_LIST_BOLD, COLOR_PROGRESSBAR, COLOR_STATUS, COLOR_STATUS_BOLD, COLOR_STATUS_TIME, COLOR_STATUS_ALERT, COLOR_DIRECTORY, COLOR_PLAYLIST, COLOR_BACKGROUND, COLOR_END }; gcc_pure int colors_str2color(const char *str); #ifdef ENABLE_COLORS bool colors_assign(const char *name, const char *value); bool colors_define(const char *name, short r, short g, short b); void colors_start(void); #endif void colors_use(WINDOW *w, enum color id); #endif /* COLORS_H */ ncmpc-0.27/src/charset.c0000644000076400001440000001052113062774214012054 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "charset.h" #include #include #include #ifdef ENABLE_LOCALE static bool noconvert = true; static const char *charset; const char * charset_init(void) { noconvert = g_get_charset(&charset); return charset; } #endif #ifdef HAVE_CURSES_ENHANCED static inline unsigned unicode_char_width(gunichar ch) { if (g_unichar_iszerowidth(ch)) return 0; if (g_unichar_iswide(ch)) return 2; return 1; } #endif /* HAVE_CURSES_ENHANCED */ unsigned utf8_width(const char *str) { assert(str != NULL); #if defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED) return g_utf8_strlen(str, -1); #else #ifdef HAVE_CURSES_ENHANCED if (g_utf8_validate(str, -1, NULL)) { size_t len = g_utf8_strlen(str, -1); unsigned width = 0; gunichar c; while (len--) { c = g_utf8_get_char(str); width += unicode_char_width(c); str += g_unichar_to_utf8(c, NULL); } return width; } else #endif return strlen(str); #endif } unsigned locale_width(const char *p) { #if defined(ENABLE_LOCALE) && defined(ENABLE_MULTIBYTE) char *utf8; unsigned width; if (noconvert) return utf8_width(p); utf8 = locale_to_utf8(p); width = utf8_width(utf8); g_free(utf8); return width; #else return strlen(p); #endif } gcc_unused static unsigned ascii_cut_width(char *p, unsigned max_width) { size_t length = strlen(p); if (length <= (size_t)max_width) return (unsigned)length; p[max_width] = 0; return max_width; } gcc_unused static unsigned narrow_cut_width(char *p, unsigned max_width) { size_t length = g_utf8_strlen(p, -1); if (length <= (size_t)max_width) return (unsigned)length; *g_utf8_offset_to_pointer(p, max_width) = 0; return max_width; } gcc_unused static unsigned wide_cut_width(char *p, unsigned max_width) { size_t length = g_utf8_strlen(p, -1); unsigned width = 0, prev_width; while (length-- > 0) { gunichar c = g_utf8_get_char(p); prev_width = width; width += g_unichar_iswide(c) ? 2 : 1; if (width > max_width) { /* too wide - cut the rest off */ *p = 0; return prev_width; } p += g_unichar_to_utf8(c, NULL); } return width; } unsigned utf8_cut_width(char *p, unsigned max_width) { assert(p != NULL); #ifdef HAVE_CURSES_ENHANCED if (!g_utf8_validate(p, -1, NULL)) return ascii_cut_width(p, max_width); return wide_cut_width(p, max_width); #elif defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED) return narrow_cut_width(p, max_width); #else return ascii_cut_width(p, max_width); #endif } char * utf8_to_locale(const char *utf8str) { #ifdef ENABLE_LOCALE assert(utf8str != NULL); if (noconvert) return g_strdup(utf8str); gchar *str = g_convert_with_fallback(utf8str, -1, charset, "utf-8", NULL, NULL, NULL, NULL); if (str == NULL) return g_strdup(utf8str); return str; #else return g_strdup(utf8str); #endif } char * locale_to_utf8(const char *localestr) { #ifdef ENABLE_LOCALE assert(localestr != NULL); if (noconvert) return g_strdup(localestr); gchar *str = g_convert_with_fallback(localestr, -1, "utf-8", charset, NULL, NULL, NULL, NULL); if (str == NULL) return g_strdup(localestr); return str; #else return g_strdup(localestr); #endif } char * replace_utf8_to_locale(char *src) { #ifdef ENABLE_LOCALE assert(src != NULL); if (noconvert) return src; return utf8_to_locale(src); #else return src; #endif } char * replace_locale_to_utf8(char *src) { #ifdef ENABLE_LOCALE assert(src != NULL); if (noconvert) return src; return locale_to_utf8(src); #else return src; #endif } ncmpc-0.27/src/charset.h0000644000076400001440000000361213062774214012064 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef CHARSET_H #define CHARSET_H #include "config.h" #include "Compiler.h" #include #ifdef ENABLE_LOCALE const char * charset_init(void); #endif /** * Returns the number of terminal cells occupied by this string. */ gcc_pure unsigned utf8_width(const char *str); /** * Returns the number of terminal cells occupied by this string. */ gcc_pure unsigned locale_width(const char *p); /** * Limits the width of the specified string. Cuts it off before the * specified width is exceeded. * * @return the resulting width of the string */ unsigned utf8_cut_width(char *p, unsigned max_width); char *utf8_to_locale(const char *str); char *locale_to_utf8(const char *str); /** * Converts the UTF-8 string to the locale, and frees the source * pointer. Returns the source pointer as-is if no conversion is * required. */ char * replace_utf8_to_locale(char *src); /** * Converts the locale string to UTF-8, and frees the source pointer. * Returns the source pointer as-is if no conversion is required. */ char * replace_locale_to_utf8(char *src); #endif ncmpc-0.27/src/window.h0000644000076400001440000000225713062774214011746 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_WINDOW_H #define NCMPC_WINDOW_H #include "config.h" #include "ncmpc_curses.h" struct window { WINDOW *w; unsigned rows, cols; }; static inline void window_init(struct window *window, unsigned height, unsigned width, int y, int x) { window->w = newwin(height, width, y, x); window->cols = width; window->rows = height; } #endif ncmpc-0.27/src/wreadln.c0000644000076400001440000003363113065551715012070 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "wreadln.h" #include "charset.h" #include "screen_utils.h" #include "config.h" #include #include #include #include #if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32) #include #endif #define KEY_CTRL_A 1 #define KEY_CTRL_B 2 #define KEY_CTRL_C 3 #define KEY_CTRL_D 4 #define KEY_CTRL_E 5 #define KEY_CTRL_F 6 #define KEY_CTRL_G 7 #define KEY_CTRL_K 11 #define KEY_CTRL_N 14 #define KEY_CTRL_P 16 #define KEY_CTRL_U 21 #define KEY_CTRL_W 23 #define KEY_CTRL_Z 26 #define KEY_BCKSPC 8 #define TAB 9 struct wreadln { /** the ncurses window where this field is displayed */ WINDOW *const w; /** the origin coordinates in the window */ unsigned x, y; /** the screen width of the input field */ unsigned width; /** is the input masked, i.e. characters displayed as '*'? */ const gboolean masked; /** the byte position of the cursor */ size_t cursor; /** the byte position displayed at the origin (for horizontal scrolling) */ size_t start; /** the current value */ gchar line[1024]; }; /** max items stored in the history list */ static const guint wrln_max_history_length = 32; #ifndef NCMPC_MINI void *wrln_completion_callback_data = NULL; wrln_gcmp_pre_cb_t wrln_pre_completion_callback = NULL; wrln_gcmp_post_cb_t wrln_post_completion_callback = NULL; #endif /** converts a byte position to a screen column */ static unsigned byte_to_screen(const gchar *data, size_t x) { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) assert(x <= strlen(data)); char *dup = g_strdup(data); dup[x] = 0; char *p = replace_locale_to_utf8(dup); unsigned width = utf8_width(p); g_free(p); return width; #else (void)data; return (unsigned)x; #endif } /** finds the first character which doesn't fit on the screen */ static size_t screen_to_bytes(const gchar *data, unsigned width) { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) size_t length = strlen(data); gchar *dup = g_strdup(data); while (true) { dup[length] = 0; char *p = locale_to_utf8(dup); unsigned p_width = utf8_width(p); g_free(p); if (p_width <= width) break; --length; } g_free(dup); return length; #else (void)data; return (size_t)width; #endif } /** returns the screen column where the cursor is located */ static unsigned cursor_column(const struct wreadln *wr) { return byte_to_screen(wr->line + wr->start, wr->cursor - wr->start); } /** returns the offset in the string to align it at the right border of the screen */ static inline size_t right_align_bytes(const gchar *data, size_t right, unsigned width) { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) gchar *dup; size_t start = 0; assert(right <= strlen(data)); dup = g_strdup(data); dup[right] = 0; while (dup[start] != 0) { char *p = locale_to_utf8(dup + start), *q; unsigned p_width = utf8_width(p); if (p_width < width) { g_free(p); break; } gunichar c = g_utf8_get_char(p); p[g_unichar_to_utf8(c, NULL)] = 0; q = utf8_to_locale(p); g_free(p); start += strlen(q); g_free(q); } g_free(dup); return start; #else (void)data; return right >= width ? right + 1 - width : 0; #endif } /** returns the size (in bytes) of the next character */ static inline size_t next_char_size(const gchar *data) { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) char *p = locale_to_utf8(data), *q; gunichar c = g_utf8_get_char(p); p[g_unichar_to_utf8(c, NULL)] = 0; q = utf8_to_locale(p); g_free(p); size_t size = strlen(q); g_free(q); return size; #else (void)data; return 1; #endif } /** returns the size (in bytes) of the previous character */ static inline size_t prev_char_size(const gchar *data, size_t x) { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) assert(x > 0); char *p = locale_to_utf8(data); char *q = p; while (true) { gunichar c = g_utf8_get_char(q); size_t size = g_unichar_to_utf8(c, NULL); if (size > x) size = x; x -= size; if (x == 0) { g_free(p); return size; } q += size; } #else (void)data; (void)x; return 1; #endif } /* move the cursor one step to the right */ static inline void cursor_move_right(struct wreadln *wr) { if (wr->line[wr->cursor] == 0) return; size_t size = next_char_size(wr->line + wr->cursor); wr->cursor += size; if (cursor_column(wr) >= wr->width) wr->start = right_align_bytes(wr->line, wr->cursor, wr->width); } /* move the cursor one step to the left */ static inline void cursor_move_left(struct wreadln *wr) { if (wr->cursor == 0) return; size_t size = prev_char_size(wr->line, wr->cursor); assert(wr->cursor >= size); wr->cursor -= size; if (wr->cursor < wr->start) wr->start = wr->cursor; } /* move the cursor to the end of the line */ static inline void cursor_move_to_eol(struct wreadln *wr) { wr->cursor = strlen(wr->line); if (cursor_column(wr) >= wr->width) wr->start = right_align_bytes(wr->line, wr->cursor, wr->width); } /* draw line buffer and update cursor position */ static inline void drawline(const struct wreadln *wr) { wmove(wr->w, wr->y, wr->x); /* clear input area */ whline(wr->w, ' ', wr->width); /* print visible part of the line buffer */ if (wr->masked) whline(wr->w, '*', utf8_width(wr->line + wr->start)); else waddnstr(wr->w, wr->line + wr->start, screen_to_bytes(wr->line, wr->width)); /* move the cursor to the correct position */ wmove(wr->w, wr->y, wr->x + cursor_column(wr)); /* tell ncurses to redraw the screen */ doupdate(); } #if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32) static bool multibyte_is_complete(const char *p, size_t length) { GError *error = NULL; gchar *q = g_locale_to_utf8(p, length, NULL, NULL, &error); if (q != NULL) { g_free(q); return true; } else { g_error_free(error); return false; } } #endif static void wreadln_insert_byte(struct wreadln *wr, gint key) { size_t rest = strlen(wr->line + wr->cursor) + 1; #if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined (WIN32) char buffer[32] = { key }; size_t length = 1; struct pollfd pfd = { .fd = 0, .events = POLLIN, }; /* wide version: try to complete the multibyte sequence */ while (length < sizeof(buffer)) { if (multibyte_is_complete(buffer, length)) /* sequence is complete */ break; /* poll for more bytes on stdin, without timeout */ if (poll(&pfd, 1, 0) <= 0) /* no more input from keyboard */ break; buffer[length++] = wgetch(wr->w); } memmove(wr->line + wr->cursor + length, wr->line + wr->cursor, rest); memcpy(wr->line + wr->cursor, buffer, length); #else const size_t length = 1; memmove(wr->line + wr->cursor + length, wr->line + wr->cursor, rest); wr->line[wr->cursor] = key; #endif wr->cursor += length; if (cursor_column(wr) >= wr->width) wr->start = right_align_bytes(wr->line, wr->cursor, wr->width); } static void wreadln_delete_char(struct wreadln *wr, size_t x) { assert(x < strlen(wr->line)); size_t length = next_char_size(&wr->line[x]); size_t rest = strlen(&wr->line[x + length]) + 1; memmove(&wr->line[x], &wr->line[x + length], rest); } /* libcurses version */ static gchar * _wreadln(WINDOW *w, const gchar *prompt, const gchar *initial_value, unsigned x1, GList **history, GCompletion *gcmp, gboolean masked) { struct wreadln wr = { .w = w, .masked = masked, .cursor = 0, .start = 0, }; GList *hlist = NULL, *hcurrent = NULL; #ifdef NCMPC_MINI (void)gcmp; #endif /* turn off echo */ noecho(); /* make sure the cursor is visible */ curs_set(1); /* print prompt string */ if (prompt) { waddstr(w, prompt); waddstr(w, ": "); } /* retrieve y and x0 position */ getyx(w, wr.y, wr.x); /* check the x1 value */ if (x1 <= wr.x || x1 > (unsigned)COLS) x1 = COLS; wr.width = x1 - wr.x; /* clear input area */ mvwhline(w, wr.y, wr.x, ' ', wr.width); if (history) { /* append the a new line to our history list */ *history = g_list_append(*history, g_malloc0(sizeof(wr.line))); /* hlist points to the current item in the history list */ hlist = g_list_last(*history); hcurrent = hlist; } if (initial_value == (char *)-1) { /* get previous history entry */ if (history && hlist->prev) { if (hlist == hcurrent) /* save the current line */ g_strlcpy(hlist->data, wr.line, sizeof(wr.line)); /* get previous line */ hlist = hlist->prev; g_strlcpy(wr.line, hlist->data, sizeof(wr.line)); } cursor_move_to_eol(&wr); drawline(&wr); } else if (initial_value) { /* copy the initial value to the line buffer */ g_strlcpy(wr.line, initial_value, sizeof(wr.line)); cursor_move_to_eol(&wr); drawline(&wr); } gint key = 0; while (key != 13 && key != '\n') { key = wgetch(w); /* check if key is a function key */ for (size_t i = 0; i < 63; i++) if (key == (int)KEY_F(i)) { key = KEY_F(1); i = 64; } switch (key) { size_t i; #ifdef HAVE_GETMOUSE case KEY_MOUSE: /* ignore mouse events */ #endif case ERR: /* ignore errors */ break; case TAB: #ifndef NCMPC_MINI if (gcmp) { char *prefix = NULL; GList *list; if (wrln_pre_completion_callback) wrln_pre_completion_callback(gcmp, wr.line, wrln_completion_callback_data); list = g_completion_complete(gcmp, wr.line, &prefix); if (prefix) { g_strlcpy(wr.line, prefix, sizeof(wr.line)); cursor_move_to_eol(&wr); g_free(prefix); } else screen_bell(); if (wrln_post_completion_callback) wrln_post_completion_callback(gcmp, wr.line, list, wrln_completion_callback_data); } #endif break; case KEY_CTRL_G: screen_bell(); if (history) { g_free(hcurrent->data); hcurrent->data = NULL; *history = g_list_delete_link(*history, hcurrent); } return NULL; case KEY_LEFT: case KEY_CTRL_B: cursor_move_left(&wr); break; case KEY_RIGHT: case KEY_CTRL_F: cursor_move_right(&wr); break; case KEY_HOME: case KEY_CTRL_A: wr.cursor = 0; wr.start = 0; break; case KEY_END: case KEY_CTRL_E: cursor_move_to_eol(&wr); break; case KEY_CTRL_K: wr.line[wr.cursor] = 0; break; case KEY_CTRL_U: wr.cursor = utf8_width(wr.line); for (i = 0; i < wr.cursor; i++) wr.line[i] = '\0'; wr.cursor = 0; break; case KEY_CTRL_W: /* Firstly remove trailing spaces. */ for (i = wr.cursor; i > 0 && wr.line[i-1] == ' '; i--) { cursor_move_left(&wr); wreadln_delete_char(&wr, wr.cursor); } /* Then remove word until next space. */ for (; i > 0 && wr.line[i-1] != ' '; i--) { cursor_move_left(&wr); wreadln_delete_char(&wr, wr.cursor); } break; case 127: case KEY_BCKSPC: /* handle backspace: copy all */ case KEY_BACKSPACE: /* chars starting from curpos */ if (wr.cursor > 0) { /* - 1 from buf[n+1] to buf */ cursor_move_left(&wr); wreadln_delete_char(&wr, wr.cursor); } break; case KEY_DC: /* handle delete key. As above */ case KEY_CTRL_D: if (wr.line[wr.cursor] != 0) wreadln_delete_char(&wr, wr.cursor); break; case KEY_UP: case KEY_CTRL_P: /* get previous history entry */ if (history && hlist->prev) { if (hlist == hcurrent) /* save the current line */ g_strlcpy(hlist->data, wr.line, sizeof(wr.line)); /* get previous line */ hlist = hlist->prev; g_strlcpy(wr.line, hlist->data, sizeof(wr.line)); } cursor_move_to_eol(&wr); break; case KEY_DOWN: case KEY_CTRL_N: /* get next history entry */ if (history && hlist->next) { /* get next line */ hlist = hlist->next; g_strlcpy(wr.line, hlist->data, sizeof(wr.line)); } cursor_move_to_eol(&wr); break; case '\n': case 13: case KEY_IC: case KEY_PPAGE: case KEY_NPAGE: case KEY_F(1): /* ignore char */ break; default: if (key >= 32) wreadln_insert_byte(&wr, key); } drawline(&wr); } /* update history */ if (history) { if (strlen(wr.line)) { /* update the current history entry */ size_t size = strlen(wr.line) + 1; hcurrent->data = g_realloc(hcurrent->data, size); g_strlcpy(hcurrent->data, wr.line, size); } else { /* the line was empty - remove the current history entry */ g_free(hcurrent->data); hcurrent->data = NULL; *history = g_list_delete_link(*history, hcurrent); } unsigned history_length = g_list_length(*history); while (history_length > wrln_max_history_length) { GList *first = g_list_first(*history); /* remove the oldest history entry */ g_free(first->data); first->data = NULL; *history = g_list_delete_link(*history, first); --history_length; } } if (wr.line[0] == 0) return NULL; return g_strdup(wr.line); } gchar * wreadln(WINDOW *w, const gchar *prompt, const gchar *initial_value, unsigned x1, GList **history, GCompletion *gcmp) { return _wreadln(w, prompt, initial_value, x1, history, gcmp, FALSE); } gchar * wreadln_masked(WINDOW *w, const gchar *prompt, const gchar *initial_value, unsigned x1, GList **history, GCompletion *gcmp) { return _wreadln(w, prompt, initial_value, x1, history, gcmp, TRUE); } ncmpc-0.27/src/wreadln.h0000644000076400001440000000430313062774214012065 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef WREADLN_H #define WREADLN_H #include "config.h" #include "ncmpc_curses.h" #include #ifndef NCMPC_MINI /* completion callback data */ extern void *wrln_completion_callback_data; /* called after TAB is pressed but before g_completion_complete */ typedef void (*wrln_gcmp_pre_cb_t) (GCompletion *gcmp, gchar *buf, void *data); extern wrln_gcmp_pre_cb_t wrln_pre_completion_callback; /* post completion callback */ typedef void (*wrln_gcmp_post_cb_t) (GCompletion *gcmp, gchar *s, GList *l, void *data); extern wrln_gcmp_post_cb_t wrln_post_completion_callback; #endif /* Note, wreadln calls curs_set() and noecho(), to enable cursor and * disable echo. wreadln will not restore these settings when exiting! */ gchar *wreadln(WINDOW *w, /* the curses window to use */ const gchar *prompt, /* the prompt string or NULL */ const gchar *initial_value, /* initial value or NULL for a empty line * (char *) -1 = get value from history */ unsigned x1, /* the maximum x position or 0 */ GList **history, /* a pointer to a history list or NULL */ GCompletion *gcmp /* a GCompletion structure or NULL */ ); gchar * wreadln_masked(WINDOW *w, const gchar *prompt, const gchar *initial_value, unsigned x1, GList **history, GCompletion *gcmp); #endif ncmpc-0.27/src/strfsong.c0000644000076400001440000001535713064317200012272 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "strfsong.h" #include "charset.h" #include "time_format.h" #include #include static const gchar * skip(const gchar * p) { gint stack = 0; while (*p != '\0') { if (*p == '[') stack++; if (*p == '#' && p[1] != '\0') { /* skip escaped stuff */ ++p; } else if (stack) { if(*p == ']') stack--; } else { if(*p == '&' || *p == '|' || *p == ']') { break; } } ++p; } return p; } #ifndef NCMPC_MINI static char * concat_tag_values(const char *a, const char *b) { return g_strconcat(a, ", ", b, NULL); } static char * song_more_tag_values(const struct mpd_song *song, enum mpd_tag_type tag, const char *first) { const char *p = mpd_song_get_tag(song, tag, 1); if (p == NULL) return NULL; char *buffer = concat_tag_values(first, p); for (unsigned i = 2; (p = mpd_song_get_tag(song, tag, i)) != NULL; ++i) { char *prev = buffer; buffer = concat_tag_values(buffer, p); g_free(prev); } return buffer; } #endif /* !NCMPC_MINI */ static char * song_tag_locale(const struct mpd_song *song, enum mpd_tag_type tag) { const char *value = mpd_song_get_tag(song, tag, 0); if (value == NULL) return NULL; #ifndef NCMPC_MINI char *all = song_more_tag_values(song, tag, value); if (all != NULL) value = all; #endif /* !NCMPC_MINI */ char *result = utf8_to_locale(value); #ifndef NCMPC_MINI g_free(all); #endif /* !NCMPC_MINI */ return result; } static gsize _strfsong(gchar *s, gsize max, const gchar *format, const struct mpd_song *song, const gchar **last) { bool found = false; /* "missed" helps handling the case of mere literal text like found==true instead of found==false. */ bool missed = false; s[0] = '\0'; if (song == NULL) return 0; const char *p; size_t length = 0; for (p = format; *p != '\0' && length0 ) { g_strlcat(s, temp, max); length = strlen(s); found = true; } else { missed = true; } g_free(temp); continue; } /* EXPRESSION END */ if (p[0] == ']') { if(last) *last = p+1; if(missed && !found && length) { s[0] = '\0'; length = 0; } return length; } /* pass-through non-escaped portions of the format string */ if (p[0] != '#' && p[0] != '%' && length= 'a' && *end <= 'z') { end++; } size_t n = end - p + 1; if(*end != '%') n--; else if (strncmp("%file%", p, n) == 0) temp = utf8_to_locale(mpd_song_get_uri(song)); else if (strncmp("%artist%", p, n) == 0) { temp = song_tag_locale(song, MPD_TAG_ARTIST); if (temp == NULL) { temp = song_tag_locale(song, MPD_TAG_PERFORMER); if (temp == NULL) temp = song_tag_locale(song, MPD_TAG_COMPOSER); } } else if (strncmp("%albumartist", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_ALBUM_ARTIST); else if (strncmp("%composer%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_COMPOSER); else if (strncmp("%performer%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_PERFORMER); else if (strncmp("%title%", p, n) == 0) { temp = song_tag_locale(song, MPD_TAG_TITLE); if (temp == NULL) temp = song_tag_locale(song, MPD_TAG_NAME); } else if (strncmp("%album%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_ALBUM); else if (strncmp("%shortalbum%", p, n) == 0) { temp = song_tag_locale(song, MPD_TAG_ALBUM); if (temp) { gchar *temp2 = g_strndup(temp, 25); if (strlen(temp) > 25) { temp2[24] = '.'; temp2[23] = '.'; temp2[22] = '.'; } g_free(temp); temp = temp2; } } else if (strncmp("%track%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_TRACK); else if (strncmp("%disc%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_DISC); else if (strncmp("%name%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_NAME); else if (strncmp("%date%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_DATE); else if (strncmp("%genre%", p, n) == 0) temp = song_tag_locale(song, MPD_TAG_GENRE); else if (strncmp("%shortfile%", p, n) == 0) { const char *uri = mpd_song_get_uri(song); if (strstr(uri, "://") != NULL) temp = utf8_to_locale(uri); else temp = utf8_to_locale(g_basename(uri)); } else if (strncmp("%time%", p, n) == 0) { unsigned duration = mpd_song_get_duration(song); if (duration > 0) { char buffer[32]; format_duration_short(buffer, sizeof(buffer), duration); temp = g_strdup(buffer); } } if( temp == NULL) { gsize templen=n; /* just pass-through any unknown specifiers (including esc) */ if( length+templen > max ) templen = max-length; gchar *ident = g_strndup(p, templen); g_strlcat(s, ident, max); length+=templen; g_free(ident); missed = true; } else { gsize templen = strlen(temp); found = true; if( length+templen > max ) templen = max-length; g_strlcat(s, temp, max); length+=templen; g_free(temp); } /* advance past the specifier */ p += n; } if(last) *last = p; return length; } gsize strfsong(gchar *s, gsize max, const gchar *format, const struct mpd_song *song) { return _strfsong(s, max, format, song, NULL); } ncmpc-0.27/src/strfsong.h0000644000076400001440000000177713062774214012312 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef STRFSONG_H #define STRFSONG_H #include struct mpd_song; gsize strfsong(gchar *s, gsize max, const gchar *format, const struct mpd_song *song); #endif ncmpc-0.27/src/time_format.c0000644000076400001440000000444713064317135012740 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "time_format.h" #include "i18n.h" #include void format_duration_short(char *buffer, size_t length, unsigned duration) { if (duration < 3600) g_snprintf(buffer, length, "%i:%02i", duration / 60, duration % 60); else g_snprintf(buffer, length, "%i:%02i:%02i", duration / 3600, (duration % 3600) / 60, duration % 60); } void format_duration_long(char *p, size_t length, unsigned long duration) { unsigned bytes_written = 0; if (duration / 31536000 > 0) { if (duration / 31536000 == 1) bytes_written = g_snprintf(p, length, "%d %s, ", 1, _("year")); else bytes_written = g_snprintf(p, length, "%lu %s, ", duration / 31536000, _("years")); duration %= 31536000; length -= bytes_written; p += bytes_written; } if (duration / 604800 > 0) { if (duration / 604800 == 1) bytes_written = g_snprintf(p, length, "%d %s, ", 1, _("week")); else bytes_written = g_snprintf(p, length, "%lu %s, ", duration / 604800, _("weeks")); duration %= 604800; length -= bytes_written; p += bytes_written; } if (duration / 86400 > 0) { if (duration / 86400 == 1) bytes_written = g_snprintf(p, length, "%d %s, ", 1, _("day")); else bytes_written = g_snprintf(p, length, "%lu %s, ", duration / 86400, _("days")); duration %= 86400; length -= bytes_written; p += bytes_written; } g_snprintf(p, length, "%02lu:%02lu:%02lu", duration / 3600, duration % 3600 / 60, duration % 3600 % 60); } ncmpc-0.27/src/time_format.h0000644000076400001440000000206313064317125012734 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef TIME_FORMAT_H #define TIME_FORMAT_H #include void format_duration_short(char *buffer, size_t length, unsigned duration); void format_duration_long(char *buffer, size_t length, unsigned long duration); #endif ncmpc-0.27/src/utils.c0000644000076400001440000000301613064317170011560 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "utils.h" #include #include GList * string_list_free(GList *string_list) { g_list_free_full(string_list, g_free); return NULL; } GList * string_list_find(GList *string_list, const gchar *str) { GList *list = g_list_first(string_list); while(list) { if( strcmp(str, (gchar *) list->data) == 0 ) return list; list = list->next; } return NULL; } GList * string_list_remove(GList *string_list, const gchar *str) { GList *list = g_list_first(string_list); while(list) { if( strcmp(str, (gchar *) list->data) == 0 ) { g_free(list->data); list->data = NULL; return g_list_delete_link(string_list, list); } list = list->next; } return list; } ncmpc-0.27/src/utils.h0000644000076400001440000000214213064317160011563 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef UTILS_H #define UTILS_H #include /* functions for lists containing strings */ GList *string_list_free(GList *string_list); GList *string_list_find(GList *string_list, const gchar *str); GList *string_list_remove(GList *string_list, const gchar *str); #endif ncmpc-0.27/src/aconnect.c0000644000076400001440000001014413065552152012214 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "aconnect.h" #include "net/async_rconnect.h" #include "net/socket.h" #include "Compiler.h" #include #include #include #include #include #include #include struct aconnect { const struct aconnect_handler *handler; void *handler_ctx; struct async_rconnect *rconnect; int fd; guint source_id; }; static gboolean aconnect_source_callback(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gpointer data) { struct aconnect *ac = data; assert(ac->source_id != 0); ac->source_id = 0; char buffer[256]; ssize_t nbytes = recv(ac->fd, buffer, sizeof(buffer) - 1, 0); if (nbytes < 0) { snprintf(buffer, sizeof(buffer), "Failed to receive from MPD: %s", strerror(errno)); close_socket(ac->fd); ac->handler->error(buffer, ac->handler_ctx); g_free(ac); return false; } if (nbytes == 0) { close_socket(ac->fd); ac->handler->error("MPD closed the connection", ac->handler_ctx); g_free(ac); return false; } buffer[nbytes] = 0; struct mpd_async *async = mpd_async_new(ac->fd); if (async == NULL) { close_socket(ac->fd); ac->handler->error("Out of memory", ac->handler_ctx); g_free(ac); return false; } struct mpd_connection *c = mpd_connection_new_async(async, buffer); if (c == NULL) { mpd_async_free(async); ac->handler->error("Out of memory", ac->handler_ctx); g_free(ac); return false; } ac->handler->success(c, ac->handler_ctx); g_free(ac); return false; } static void aconnect_rconnect_success(int fd, void *ctx) { struct aconnect *ac = ctx; assert(ac->rconnect != NULL); ac->rconnect = NULL; ac->fd = fd; GIOChannel *channel = g_io_channel_unix_new(fd); ac->source_id = g_io_add_watch(channel, G_IO_IN, aconnect_source_callback, ac); g_io_channel_unref(channel); } static void aconnect_rconnect_error(const char *message, void *ctx) { struct aconnect *ac = ctx; assert(ac->rconnect != NULL); ac->rconnect = NULL; ac->handler->error(message, ac->handler_ctx); g_free(ac); } static const struct async_rconnect_handler aconnect_rconnect_handler = { .success = aconnect_rconnect_success, .error = aconnect_rconnect_error, }; void aconnect_start(struct aconnect **acp, const char *host, unsigned port, const struct aconnect_handler *handler, void *ctx) { struct aconnect *ac = g_new(struct aconnect, 1); ac->handler = handler; ac->handler_ctx = ctx; *acp = ac; async_rconnect_start(&ac->rconnect, host, port, &aconnect_rconnect_handler, ac); } void aconnect_cancel(struct aconnect *ac) { if (ac->rconnect != NULL) async_rconnect_cancel(ac->rconnect); else { g_source_remove(ac->source_id); close_socket(ac->fd); } g_free(ac); } ncmpc-0.27/src/aconnect.h0000644000076400001440000000346613063500151012220 00000000000000/* ncmpc (Ncurses MPD Client) (c) 2004-2017 The Music Player Daemon Project Project homepage: http://musicpd.org Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ACONNECT_H #define ACONNECT_H #include struct mpd_connection; struct aconnect; struct aconnect_handler { void (*success)(struct mpd_connection *c, void *ctx); void (*error)(const char *message, void *ctx); }; void aconnect_start(struct aconnect **acp, const char *host, unsigned port, const struct aconnect_handler *handler, void *ctx); void aconnect_cancel(struct aconnect *ac); #endif ncmpc-0.27/src/signals.c0000644000076400001440000000543413063461431012065 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "signals.h" #include "screen.h" #include "Compiler.h" #include #include static int sigwinch_pipes[2]; static gboolean handle_quit_signal(gpointer data) { GMainLoop *main_loop = data; g_main_loop_quit(main_loop); return false; } static gboolean sigwinch_event(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gpointer data) { struct mpdclient *c = data; char ignoreme[64]; if (1 > read(sigwinch_pipes[0], ignoreme, 64)) exit(EXIT_FAILURE); endwin(); refresh(); screen_resize(c); return TRUE; } static void catch_sigwinch(gcc_unused int sig) { if (1 != write(sigwinch_pipes[1], "", 1)) exit(EXIT_FAILURE); } void signals_init(GMainLoop *main_loop, struct mpdclient *c) { /* setup quit signals */ g_unix_signal_add(SIGTERM, handle_quit_signal, main_loop); g_unix_signal_add(SIGINT, handle_quit_signal, main_loop); g_unix_signal_add(SIGHUP, handle_quit_signal, main_loop); /* setup signal behavior - SIGCONT */ struct sigaction act; sigemptyset(&act.sa_mask); act.sa_flags = 0; act.sa_handler = catch_sigwinch; if (sigaction(SIGCONT, &act, NULL) < 0) { perror("sigaction(SIGCONT)"); exit(EXIT_FAILURE); } /* setup SIGWINCH */ act.sa_flags = SA_RESTART; act.sa_handler = catch_sigwinch; if (sigaction(SIGWINCH, &act, NULL) < 0) { perror("sigaction(SIGWINCH)"); exit(EXIT_FAILURE); } #ifndef WIN32 if (!pipe(sigwinch_pipes) && !fcntl(sigwinch_pipes[1], F_SETFL, O_NONBLOCK)) { GIOChannel *sigwinch_channel = g_io_channel_unix_new(sigwinch_pipes[0]); g_io_add_watch(sigwinch_channel, G_IO_IN, sigwinch_event, c); g_io_channel_unref(sigwinch_channel); } else { perror("sigwinch pipe creation failed"); exit(EXIT_FAILURE); } #endif /* ignore SIGPIPE */ act.sa_handler = SIG_IGN; if (sigaction(SIGPIPE, &act, NULL) < 0) { perror("sigaction(SIGPIPE)"); exit(EXIT_FAILURE); } } void signals_deinit(void) { close(sigwinch_pipes[0]); close(sigwinch_pipes[1]); } ncmpc-0.27/src/signals.h0000644000076400001440000000225613063461316012073 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SIGNALS_H #define SIGNALS_H #include struct mpdclient; #ifdef WIN32 static inline void signals_init(GMainLoop *main_loop, struct mpdclient *c) { (void)main_loop; (void)c; } static inline void signals_deinit(void) {} #else void signals_init(GMainLoop *main_loop, struct mpdclient *c); void signals_deinit(void); #endif #endif ncmpc-0.27/src/db_completion.c0000644000076400001440000000415213064316304013236 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "db_completion.h" #include "charset.h" #include "mpdclient.h" GList * gcmp_list_from_path(struct mpdclient *c, const gchar *path, GList *list, gint types) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return list; mpd_send_list_meta(connection, path); struct mpd_entity *entity; while ((entity = mpd_recv_entity(connection)) != NULL) { char *name; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && types & GCMP_TYPE_DIR) { const struct mpd_directory *dir = mpd_entity_get_directory(entity); gchar *tmp = utf8_to_locale(mpd_directory_get_path(dir)); name = g_strconcat(tmp, "/", NULL); g_free(tmp); } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG && types & GCMP_TYPE_FILE) { const struct mpd_song *song = mpd_entity_get_song(entity); name = utf8_to_locale(mpd_song_get_uri(song)); } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST && types & GCMP_TYPE_PLAYLIST) { const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); name = utf8_to_locale(mpd_playlist_get_path(playlist)); } else { mpd_entity_free(entity); continue; } list = g_list_append(list, name); mpd_entity_free(entity); } return list; } ncmpc-0.27/src/db_completion.h0000644000076400001440000000250313064316011013234 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef DB_COMPLETION_H #define DB_COMPLETION_H #include struct mpdclient; #define GCMP_TYPE_DIR (0x01 << 0) #define GCMP_TYPE_FILE (0x01 << 1) #define GCMP_TYPE_PLAYLIST (0x01 << 2) #define GCMP_TYPE_RFILE (GCMP_TYPE_DIR | GCMP_TYPE_FILE) #define GCMP_TYPE_RPLAYLIST (GCMP_TYPE_DIR | GCMP_TYPE_PLAYLIST) /** * Create a list suitable for GCompletion from path. */ GList * gcmp_list_from_path(struct mpdclient *c, const gchar *path, GList *list, gint types); #endif ncmpc-0.27/src/xterm_title.c0000644000076400001440000000237613063777462013005 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "xterm_title.h" #include "options.h" #include #include void set_xterm_title(const char *title) { /* the current xterm title exists under the WM_NAME property */ /* and can be retrieved with xprop -id $WINDOWID */ if (!options.enable_xterm_title) return; if (getenv("WINDOWID") == NULL) { options.enable_xterm_title = FALSE; return; } printf("\033]0;%s\033\\", title); fflush(stdout); } ncmpc-0.27/src/xterm_title.h0000644000076400001440000000165213063776414013002 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef XTERM_TITLE_H #define XTERM_TITLE_H void set_xterm_title(const char *title); #endif ncmpc-0.27/src/hscroll.c0000644000076400001440000000657113062774214012103 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "hscroll.h" #include "charset.h" #include "ncfix.h" #include #include char * strscroll(struct hscroll *hscroll, const char *str, const char *separator, unsigned width) { assert(hscroll != NULL); assert(str != NULL); assert(separator != NULL); /* create a buffer containing the string and the separator */ char *tmp = replace_locale_to_utf8(g_strconcat(str, separator, str, separator, NULL)); if (hscroll->offset >= (unsigned)g_utf8_strlen(tmp, -1) / 2) hscroll->offset = 0; /* create the new scrolled string */ char *buf = g_utf8_offset_to_pointer(tmp, hscroll->offset); utf8_cut_width(buf, width); /* convert back to locale */ buf = utf8_to_locale(buf); g_free(tmp); return buf; } /** * This timer scrolls the area by one and redraws. */ static gboolean hscroll_timer_callback(gpointer data) { struct hscroll *hscroll = data; hscroll_step(hscroll); hscroll_draw(hscroll); wrefresh(hscroll->w); return true; } void hscroll_set(struct hscroll *hscroll, unsigned x, unsigned y, unsigned width, const char *text) { assert(hscroll != NULL); assert(hscroll->w != NULL); assert(text != NULL); if (hscroll->text != NULL && hscroll->x == x && hscroll->y == y && hscroll->width == width && strcmp(hscroll->text, text) == 0) /* no change, do nothing (and, most importantly, do not reset the current offset!) */ return; hscroll_clear(hscroll); hscroll->x = x; hscroll->y = y; hscroll->width = width; /* obtain the ncurses attributes and the current color, store them */ fix_wattr_get(hscroll->w, &hscroll->attrs, &hscroll->pair, NULL); hscroll->text = g_strdup(text); hscroll->offset = 0; hscroll->source_id = g_timeout_add_seconds(1, hscroll_timer_callback, hscroll); } void hscroll_clear(struct hscroll *hscroll) { assert(hscroll != NULL); if (hscroll->text == NULL) return; g_source_remove(hscroll->source_id); g_free(hscroll->text); hscroll->text = NULL; } void hscroll_draw(struct hscroll *hscroll) { assert(hscroll != NULL); assert(hscroll->w != NULL); assert(hscroll->text != NULL); /* set stored attributes and color */ attr_t old_attrs; short old_pair; fix_wattr_get(hscroll->w, &old_attrs, &old_pair, NULL); wattr_set(hscroll->w, hscroll->attrs, hscroll->pair, NULL); /* scroll the string, and draw it */ char *p = strscroll(hscroll, hscroll->text, hscroll->separator, hscroll->width); mvwaddstr(hscroll->w, hscroll->y, hscroll->x, p); g_free(p); /* restore previous attributes and color */ wattr_set(hscroll->w, old_attrs, old_pair, NULL); } ncmpc-0.27/src/hscroll.h0000644000076400001440000000541013062774214012077 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef HSCROLL_H #define HSCROLL_H #include "config.h" #include "ncmpc_curses.h" #include /** * This class is used to auto-scroll text which does not fit on the * screen. Call hscroll_init() to initialize the object, * hscroll_clear() to free resources, and hscroll_set() to begin * scrolling. */ struct hscroll { WINDOW *w; const char *separator; /** * The bounding coordinates on the screen. */ unsigned x, y, width; /** * ncurses attributes for drawing the text. */ attr_t attrs; /** * ncurses colors for drawing the text. */ short pair; /** * The scrolled text, in the current locale. */ char *text; /** * The current scrolling offset. This is a character * position, not a screen column. */ gsize offset; /** * The id of the timer which updates the scrolled area every * second. */ guint source_id; }; static inline void hscroll_reset(struct hscroll *hscroll) { hscroll->offset = 0; } static inline void hscroll_step(struct hscroll *hscroll) { ++hscroll->offset; } char * strscroll(struct hscroll *hscroll, const char *str, const char *separator, unsigned width); /** * Initializes a #hscroll object allocated by the caller. */ static inline void hscroll_init(struct hscroll *hscroll, WINDOW *w, const char *separator) { hscroll->w = w; hscroll->separator = separator; } /** * Sets a text to scroll. This installs a timer which redraws every * second with the current window attributes. Call hscroll_clear() to * disable it. This function automatically removes the old text. */ void hscroll_set(struct hscroll *hscroll, unsigned x, unsigned y, unsigned width, const char *text); /** * Removes the text and the timer. It may be reused with * hscroll_set(). */ void hscroll_clear(struct hscroll *hscroll); /** * Explicitly draws the scrolled text. Calling this function is only * allowed if there is a text currently. */ void hscroll_draw(struct hscroll *hscroll); #endif ncmpc-0.27/src/match.c0000644000076400001440000000414713062774214011526 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "match.h" #include "charset.h" #include #include #include static char * locale_casefold(const char *src) { char *utf8 = locale_to_utf8(src); char *folded = g_utf8_casefold(utf8, -1); g_free(utf8); return folded; } GRegex * compile_regex(const char *src, bool anchor) { GRegexCompileFlags compile_flags = G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE; if (anchor) compile_flags |= G_REGEX_ANCHORED; char *src_folded = locale_casefold(src); GRegex *regex = g_regex_new ((const gchar*)src_folded, compile_flags, 0, NULL); g_free(src_folded); return regex; } bool match_regex(GRegex *regex, const char *line) { char *line_folded = locale_casefold(line); GMatchInfo *match_info; g_regex_match(regex, line_folded, 0, &match_info); bool match = (bool)g_match_info_matches(match_info); g_match_info_free(match_info); g_free(line_folded); return match; } bool match_line(const char *line, const char *needle) { char *line_folded = locale_casefold(line); char *needle_folded = locale_casefold(needle); bool ret = (bool)g_regex_match_simple((const gchar*)needle_folded, (const gchar*)line_folded, G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE, 0); g_free(line_folded); g_free(needle_folded); return ret; } ncmpc-0.27/src/match.h0000644000076400001440000000257713062774214011540 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef MATCH_H #define MATCH_H #include "config.h" #include "Compiler.h" #include #ifdef NCMPC_MINI #include static inline bool match_line(const char *line, const char *needle) { return strstr(line, needle) != NULL; } #else #include GRegex * compile_regex(const char *src, bool anchor); gcc_pure bool match_regex(GRegex *regex, const char *line); /** * Checks whether the specified line matches the search string. Case * is ignored. */ gcc_pure bool match_line(const char *line, const char *needle); #endif #endif ncmpc-0.27/src/conf.c0000644000076400001440000004320713064310525011350 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "conf.h" #include "config.h" #include "defaults.h" #include "i18n.h" #include "command.h" #include "colors.h" #include "screen_list.h" #include "options.h" #include #include #include #include #include #include #include #include #define MAX_LINE_LENGTH 1024 #define COMMENT_TOKEN '#' /* configuration field names */ #define CONF_ENABLE_COLORS "enable-colors" #define CONF_SCROLL_OFFSET "scroll-offset" #define CONF_AUTO_CENTER "auto-center" #define CONF_WIDE_CURSOR "wide-cursor" #define CONF_KEY_DEFINITION "key" #define CONF_COLOR "color" #define CONF_COLOR_DEFINITION "colordef" #define CONF_LIST_FORMAT "list-format" #define CONF_SEARCH_FORMAT "search-format" #define CONF_STATUS_FORMAT "status-format" #define CONF_XTERM_TITLE_FORMAT "xterm-title-format" #define CONF_LIST_WRAP "wrap-around" #define CONF_FIND_WRAP "find-wrap" #define CONF_FIND_SHOW_LAST "find-show-last" #define CONF_AUDIBLE_BELL "audible-bell" #define CONF_VISIBLE_BELL "visible-bell" #define CONF_BELL_ON_WRAP "bell-on-wrap" #define CONF_STATUS_MESSAGE_TIME "status-message-time" #define CONF_XTERM_TITLE "set-xterm-title" #define CONF_ENABLE_MOUSE "enable-mouse" #define CONF_CROSSFADE_TIME "crossfade-time" #define CONF_SEARCH_MODE "search-mode" #define CONF_HIDE_CURSOR "hide-cursor" #define CONF_SEEK_TIME "seek-time" #define CONF_SCREEN_LIST "screen-list" #define CONF_TIMEDISPLAY_TYPE "timedisplay-type" #define CONF_HOST "host" #define CONF_PORT "port" #define CONF_PASSWORD "password" #define CONF_TIMEOUT "timeout" #define CONF_LYRICS_TIMEOUT "lyrics-timeout" #define CONF_SCROLL "scroll" #define CONF_SCROLL_SEP "scroll-sep" #define CONF_VISIBLE_BITRATE "visible-bitrate" #define CONF_HARDWARE_CURSOR "hardware-cursor" #define CONF_WELCOME_SCREEN_LIST "welcome-screen-list" #define CONF_DISPLAY_TIME "display-time" #define CONF_JUMP_PREFIX_ONLY "jump-prefix-only" #define CONF_LYRICS_AUTOSAVE "lyrics-autosave" #define CONF_LYRICS_SHOW_PLUGIN "lyrics-show-plugin" #define CONF_TEXT_EDITOR "text-editor" #define CONF_TEXT_EDITOR_ASK "text-editor-ask" #define CONF_CHAT_PREFIX "chat-prefix" #define CONF_SECOND_COLUMN "second-column" static bool str2bool(char *str) { return strcasecmp(str, "yes") == 0 || strcasecmp(str, "true") == 0 || strcasecmp(str, "on") == 0 || strcasecmp(str, "1") == 0; } static void print_error(const char *msg, const char *input) { fprintf(stderr, "%s: %s ('%s')\n", /* To translators: prefix for error messages */ _("Error"), msg, input); } static int parse_key_value(char *str, char **end) { if (*str == '\'') { if (str[1] == '\'' || str[2] != '\'') { print_error(_("Malformed hotkey definition"), str); return -1; } *end = str + 3; return str[1]; } else { long value = strtol(str, end, 0); if (*end == str) { print_error(_("Malformed hotkey definition"), str); return -1; } return (int)value; } } static bool parse_key_definition(char *str) { /* get the command name */ const size_t len = strlen(str); size_t i = 0; int j = 0; char buf[MAX_LINE_LENGTH]; memset(buf, 0, MAX_LINE_LENGTH); while (i < len && str[i] != '=' && !g_ascii_isspace(str[i])) buf[j++] = str[i++]; command_t cmd = get_key_command_from_name(buf); if(cmd == CMD_NONE) { /* the hotkey configuration contains an unknown command */ print_error(_("Unknown command"), buf); return false; } /* skip whitespace */ while (i < len && (str[i] == '=' || g_ascii_isspace(str[i]))) i++; /* get the value part */ memset(buf, 0, MAX_LINE_LENGTH); g_strlcpy(buf, str+i, MAX_LINE_LENGTH); if (*buf == 0) { /* the hotkey configuration line is incomplete */ print_error(_("Incomplete hotkey configuration"), str); return false; } /* parse key values */ i = 0; int key = 0; char *p = buf; int keys[MAX_COMMAND_KEYS]; memset(keys, 0, sizeof(int)*MAX_COMMAND_KEYS); while (i < MAX_COMMAND_KEYS && *p != 0 && (key = parse_key_value(p, &p)) >= 0) { keys[i++] = key; while (*p==',' || *p==' ' || *p=='\t') p++; } if (key < 0) return false; return assign_keys(cmd, keys); } static bool parse_timedisplay_type(const char *str) { if (strcmp(str, "elapsed") == 0) return false; else if (strcmp(str, "remaining") == 0) return true; else { /* translators: ncmpc supports displaying the "elapsed" or "remaining" time of a song being played; in this case, the configuration file contained an invalid setting */ print_error(_("Bad time display type"), str); return false; } } #ifdef ENABLE_COLORS static char * separate_value(char *p) { char *value = strchr(p, '='); if (value == NULL) { /* an equals sign '=' was expected while parsing a configuration file line */ fprintf(stderr, "%s\n", _("Missing '='")); return NULL; } *value++ = 0; g_strchomp(p); return g_strchug(value); } static bool parse_color(char *str) { char *value = separate_value(str); if (value == NULL) return false; return colors_assign(str, value); } /** * Returns the first non-whitespace character after the next comma * character, or the end of the string. This is used to parse comma * separated values. */ static char * after_comma(char *p) { char *comma = strchr(p, ','); if (comma != NULL) { *comma++ = 0; comma = g_strchug(comma); } else comma = p + strlen(p); g_strchomp(p); return comma; } static bool parse_color_definition(char *str) { char *value = separate_value(str); if (value == NULL) return false; /* get the command name */ short color = colors_str2color(str); if (color < 0) { char buf[MAX_LINE_LENGTH]; print_error(_("Bad color name"), buf); return false; } /* parse r,g,b values */ short rgb[3]; for (unsigned i = 0; i < 3; ++i) { char *next = after_comma(value), *endptr; if (*value == 0) { print_error(_("Incomplete color definition"), str); return false; } rgb[i] = strtol(value, &endptr, 0); if (endptr == value || *endptr != 0) { print_error(_("Invalid number"), value); return false; } value = next; } if (*value != 0) { print_error(_("Malformed color definition"), str); return false; } return colors_define(str, rgb[0], rgb[1], rgb[2]); } #endif static char * get_format(char *str) { gsize len = strlen(str); if (str && str[0]=='\"' && str[len-1] == '\"') { str[len - 1] = '\0'; str++; } return g_strdup(str); } static char ** check_screen_list(char *value) { char **tmp = g_strsplit_set(value, " \t,", 100); char **screen = NULL; int i = 0, j = 0; while( tmp && tmp[i] ) { char *name = g_ascii_strdown(tmp[i], -1); if (*name != '\0') { if (screen_lookup_name(name) == NULL) { /* an unknown screen name was specified in the configuration file */ print_error(_("Unknown screen name"), name); free(name); } else { screen = g_realloc(screen, (j+2)*sizeof(char *)); screen[j++] = name; screen[j] = NULL; } } i++; } g_strfreev(tmp); if( screen == NULL ) return g_strsplit_set(DEFAULT_SCREEN_LIST, " ", 0); return screen; } static int get_search_mode(char *value) { char * test; const int mode = strtol(value, &test, 10); if (*test == '\0') { if (0 <= mode && mode <= 4) return mode; else { print_error(_("Invalid search mode"),value); return 0; } } else { for (int i = 0; value[i] != '\0'; i++) value[i] = tolower(value[i]); // TODO: modify screen_search so that its own list of modes can be used // for comparison instead of specifying them here if (strcmp(value, "title") == 0) return 0; else if (strcmp(value, "artist") == 0) return 1; else if (strcmp(value, "album") == 0) return 2; else if (strcmp(value, "filename") == 0) return 3; else if (strcmp(value, "artist+album") == 0) return 4; else { print_error(_("Unknown search mode"),value); return 0; } } } static bool parse_line(char *line) { size_t len = strlen(line), i = 0, j = 0; /* get the name part */ char name[MAX_LINE_LENGTH]; while (i < len && line[i] != '=' && !g_ascii_isspace(line[i])) name[j++] = line[i++]; name[j] = '\0'; /* skip '=' and whitespace */ while (i < len && (line[i] == '=' || g_ascii_isspace(line[i]))) i++; /* get the value part */ char value[MAX_LINE_LENGTH]; j = 0; while (i < len) value[j++] = line[i++]; value[j] = '\0'; /* key definition */ if (!strcasecmp(CONF_KEY_DEFINITION, name)) parse_key_definition(value); /* enable colors */ else if(!strcasecmp(CONF_ENABLE_COLORS, name)) #ifdef ENABLE_COLORS options.enable_colors = str2bool(value); #else {} #endif else if (!strcasecmp(CONF_SCROLL_OFFSET, name)) options.scroll_offset = atoi(value); /* auto center */ else if (!strcasecmp(CONF_AUTO_CENTER, name)) options.auto_center = str2bool(value); /* color assignment */ else if (!strcasecmp(CONF_COLOR, name)) #ifdef ENABLE_COLORS parse_color(value); #else {} #endif /* wide cursor */ else if (!strcasecmp(CONF_WIDE_CURSOR, name)) options.wide_cursor = str2bool(value); else if (strcasecmp(name, CONF_HARDWARE_CURSOR) == 0) options.hardware_cursor = str2bool(value); /* welcome screen list */ else if (!strcasecmp(CONF_WELCOME_SCREEN_LIST, name)) options.welcome_screen_list = str2bool(value); /* visible bitrate */ else if (!strcasecmp(CONF_VISIBLE_BITRATE, name)) options.visible_bitrate = str2bool(value); /* timer display type */ else if (!strcasecmp(CONF_TIMEDISPLAY_TYPE, name)) options.display_remaining_time = parse_timedisplay_type(value); /* color definition */ else if (!strcasecmp(CONF_COLOR_DEFINITION, name)) #ifdef ENABLE_COLORS parse_color_definition(value); #else {} #endif /* list format string */ else if (!strcasecmp(CONF_LIST_FORMAT, name)) { g_free(options.list_format); options.list_format = get_format(value); /* search format string */ } else if (!strcasecmp(CONF_SEARCH_FORMAT, name)) { g_free(options.search_format); options.search_format = get_format(value); /* status format string */ } else if (!strcasecmp(CONF_STATUS_FORMAT, name)) { g_free(options.status_format); options.status_format = get_format(value); /* xterm title format string */ } else if (!strcasecmp(CONF_XTERM_TITLE_FORMAT, name)) { g_free(options.xterm_title_format); options.xterm_title_format = get_format(value); } else if (!strcasecmp(CONF_LIST_WRAP, name)) options.list_wrap = str2bool(value); else if (!strcasecmp(CONF_FIND_WRAP, name)) options.find_wrap = str2bool(value); else if (!strcasecmp(CONF_FIND_SHOW_LAST,name)) options.find_show_last_pattern = str2bool(value); else if (!strcasecmp(CONF_AUDIBLE_BELL, name)) options.audible_bell = str2bool(value); else if (!strcasecmp(CONF_VISIBLE_BELL, name)) options.visible_bell = str2bool(value); else if (!strcasecmp(CONF_BELL_ON_WRAP, name)) options.bell_on_wrap = str2bool(value); else if (!strcasecmp(CONF_STATUS_MESSAGE_TIME, name)) options.status_message_time = atoi(value); else if (!strcasecmp(CONF_XTERM_TITLE, name)) options.enable_xterm_title = str2bool(value); else if (!strcasecmp(CONF_ENABLE_MOUSE, name)) #ifdef HAVE_GETMOUSE options.enable_mouse = str2bool(value); #else {} #endif else if (!strcasecmp(CONF_CROSSFADE_TIME, name)) options.crossfade_time = atoi(value); else if (!strcasecmp(CONF_SEARCH_MODE, name)) options.search_mode = get_search_mode(value); else if (!strcasecmp(CONF_HIDE_CURSOR, name)) options.hide_cursor = atoi(value); else if (!strcasecmp(CONF_SEEK_TIME, name)) options.seek_time = atoi(value); else if (!strcasecmp(CONF_SCREEN_LIST, name)) { g_strfreev(options.screen_list); options.screen_list = check_screen_list(value); } else if (!strcasecmp(CONF_HOST, name)) options.host = get_format(value); else if (!strcasecmp(CONF_PORT, name)) options.port = atoi(get_format(value)); else if (!strcasecmp(CONF_PASSWORD, name)) options.password = get_format(value); else if (!strcasecmp(CONF_TIMEOUT, name)) options.timeout_ms = atoi(get_format(value)) * 1000 /* seconds -> milliseconds */; else if (!strcasecmp(CONF_LYRICS_TIMEOUT, name)) #ifdef ENABLE_LYRICS_SCREEN options.lyrics_timeout = atoi(get_format(value)); #else {} #endif else if (!strcasecmp(CONF_SCROLL, name)) options.scroll = str2bool(value); else if (!strcasecmp(CONF_SCROLL_SEP, name)) { g_free(options.scroll_sep); options.scroll_sep = get_format(value); } else if (!strcasecmp(CONF_DISPLAY_TIME, name)) /* obsolete, ignore */ {} else if (!strcasecmp(CONF_JUMP_PREFIX_ONLY, name)) #ifdef NCMPC_MINI {} #else options.jump_prefix_only = str2bool(value); #endif else if (!strcasecmp(CONF_LYRICS_AUTOSAVE, name)) #ifdef ENABLE_LYRICS_SCREEN options.lyrics_autosave = str2bool(value); #else {} #endif else if (!strcasecmp(CONF_LYRICS_SHOW_PLUGIN, name)) #ifdef ENABLE_LYRICS_SCREEN options.lyrics_show_plugin = str2bool(value); #else {} #endif else if (!strcasecmp(name, CONF_TEXT_EDITOR)) #ifdef ENABLE_LYRICS_SCREEN { g_free(options.text_editor); options.text_editor = get_format(value); } #else {} #endif else if (!strcasecmp(name, CONF_TEXT_EDITOR_ASK)) #ifdef ENABLE_LYRICS_SCREEN options.text_editor_ask = str2bool(value); #else {} #endif else if (!strcasecmp(name, CONF_CHAT_PREFIX)) #ifdef ENABLE_CHAT_SCREEN options.chat_prefix = get_format(value); #else {} #endif else if (!strcasecmp(CONF_SECOND_COLUMN, name)) #ifdef NCMPC_MINI {} #else options.second_column = str2bool(value); #endif else { print_error(_("Unknown configuration parameter"), name); return false; } return true; } static int read_rc_file(char *filename) { assert(filename != NULL); FILE *file = fopen(filename, "r"); if (file == NULL) { perror(filename); return -1; } char line[MAX_LINE_LENGTH]; while (fgets(line, sizeof(line), file) != NULL) { char *p = g_strchug(line); if (*p != 0 && *p != COMMENT_TOKEN) parse_line(g_strchomp(p)); } fclose(file); return 0; } bool check_user_conf_dir(void) { char *directory = g_build_filename(g_get_home_dir(), "." PACKAGE, NULL); if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { g_free(directory); return true; } bool success = g_mkdir(directory, 0755) == 0; g_free(directory); return success; } char * build_user_conf_filename(void) { #ifdef WIN32 return g_build_filename(g_get_user_config_dir(), PACKAGE, "ncmpc.conf", NULL); #else return g_build_filename(g_get_home_dir(), "." PACKAGE, "config", NULL); #endif } char * build_system_conf_filename(void) { #ifdef WIN32 const gchar* const *system_data_dirs; gchar *pathname = NULL; for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != NULL; system_data_dirs++) { pathname = g_build_filename(*system_data_dirs, PACKAGE, "ncmpc.conf", NULL); if (g_file_test(pathname, G_FILE_TEST_EXISTS)) { break; } else { g_free (pathname); pathname = NULL; } } return pathname; #else return g_build_filename(SYSCONFDIR, PACKAGE, "config", NULL); #endif } char * build_user_key_binding_filename(void) { #ifdef WIN32 return g_build_filename(g_get_user_config_dir(), PACKAGE, "keys.conf", NULL); #else return g_build_filename(g_get_home_dir(), "." PACKAGE, "keys", NULL); #endif } static char * g_build_system_key_binding_filename(void) { #ifdef WIN32 const gchar* const *system_data_dirs; gchar *pathname = NULL; for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != NULL; system_data_dirs++) { pathname = g_build_filename(*system_data_dirs, PACKAGE, "keys.conf", NULL); if (g_file_test(pathname, G_FILE_TEST_EXISTS)) { break; } else { g_free (pathname); pathname = NULL; } } return pathname; #else return g_build_filename(SYSCONFDIR, PACKAGE, "keys", NULL); #endif } static char * find_config_file(void) { /* check for command line configuration file */ if (options.config_file != NULL) return g_strdup(options.config_file); /* check for user configuration ~/.ncmpc/config */ char *filename = build_user_conf_filename(); if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) return filename; g_free(filename); /* check for global configuration SYSCONFDIR/ncmpc/config */ filename = build_system_conf_filename(); if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) return filename; g_free(filename); return NULL; } static char * find_keys_file(void) { /* check for command line key binding file */ if (options.key_file != NULL) return g_strdup(options.key_file); /* check for user key bindings ~/.ncmpc/keys */ char *filename = build_user_key_binding_filename(); if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) return filename; g_free(filename); /* check for global key bindings SYSCONFDIR/ncmpc/keys */ filename = g_build_system_key_binding_filename(); if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) return filename; g_free(filename); return NULL; } void read_configuration(void) { /* load configuration */ char *filename = find_config_file(); if (filename != NULL) { read_rc_file(filename); g_free(filename); } /* load key bindings */ filename = find_keys_file(); if (filename != NULL) { read_rc_file(filename); g_free(filename); } } ncmpc-0.27/src/conf.h0000644000076400001440000000204013062774214011352 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include bool check_user_conf_dir(void); char *build_user_conf_filename(void); char *build_system_conf_filename(void); char *build_user_key_binding_filename(void); void read_configuration(void); ncmpc-0.27/src/screen_help.c0000644000076400001440000001762513064002314012711 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_help.h" #include "screen_interface.h" #include "screen_find.h" #include "paint.h" #include "charset.h" #include "config.h" #include "i18n.h" #include #include struct help_text_row { signed char highlight; command_t command; const char *text; }; static const struct help_text_row help_text[] = { { 1, CMD_NONE, N_("Movement") }, { 2, CMD_NONE, NULL }, { 0, CMD_LIST_PREVIOUS, NULL }, { 0, CMD_LIST_NEXT, NULL }, { 0, CMD_LIST_TOP, NULL }, { 0, CMD_LIST_MIDDLE, NULL }, { 0, CMD_LIST_BOTTOM, NULL }, { 0, CMD_LIST_PREVIOUS_PAGE, NULL }, { 0, CMD_LIST_NEXT_PAGE, NULL }, { 0, CMD_LIST_FIRST, NULL }, { 0, CMD_LIST_LAST, NULL }, { 0, CMD_LIST_RANGE_SELECT, NULL }, { 0, CMD_LIST_SCROLL_UP_LINE, NULL}, { 0, CMD_LIST_SCROLL_DOWN_LINE, NULL}, { 0, CMD_LIST_SCROLL_UP_HALF, NULL}, { 0, CMD_LIST_SCROLL_DOWN_HALF, NULL}, { 0, CMD_NONE, NULL }, { 0, CMD_SCREEN_PREVIOUS,NULL }, { 0, CMD_SCREEN_NEXT, NULL }, { 0, CMD_SCREEN_SWAP, NULL }, { 0, CMD_SCREEN_HELP, NULL }, { 0, CMD_SCREEN_PLAY, NULL }, { 0, CMD_SCREEN_FILE, NULL }, #ifdef ENABLE_ARTIST_SCREEN { 0, CMD_SCREEN_ARTIST, NULL }, #endif #ifdef ENABLE_SEARCH_SCREEN { 0, CMD_SCREEN_SEARCH, NULL }, #endif #ifdef ENABLE_LYRICS_SCREEN { 0, CMD_SCREEN_LYRICS, NULL }, #endif #ifdef ENABLE_OUTPUTS_SCREEN { 0, CMD_SCREEN_OUTPUTS, NULL }, #endif #ifdef ENABLE_CHAT_SCREEN { 0, CMD_SCREEN_CHAT, NULL }, #endif #ifdef ENABLE_KEYDEF_SCREEN { 0, CMD_SCREEN_KEYDEF, NULL }, #endif { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Global") }, { 2, CMD_NONE, NULL }, { 0, CMD_STOP, NULL }, { 0, CMD_PAUSE, NULL }, { 0, CMD_CROP, NULL }, { 0, CMD_TRACK_NEXT, NULL }, { 0, CMD_TRACK_PREVIOUS, NULL }, { 0, CMD_SEEK_FORWARD, NULL }, { 0, CMD_SEEK_BACKWARD, NULL }, { 0, CMD_VOLUME_DOWN, NULL }, { 0, CMD_VOLUME_UP, NULL }, { 0, CMD_NONE, NULL }, { 0, CMD_REPEAT, NULL }, { 0, CMD_RANDOM, NULL }, { 0, CMD_SINGLE, NULL }, { 0, CMD_CONSUME, NULL }, { 0, CMD_CROSSFADE, NULL }, { 0, CMD_SHUFFLE, NULL }, { 0, CMD_DB_UPDATE, NULL }, { 0, CMD_NONE, NULL }, { 0, CMD_LIST_FIND, NULL }, { 0, CMD_LIST_RFIND, NULL }, { 0, CMD_LIST_FIND_NEXT, NULL }, { 0, CMD_LIST_RFIND_NEXT, NULL }, { 0, CMD_LIST_JUMP, NULL }, { 0, CMD_TOGGLE_FIND_WRAP, NULL }, { 0, CMD_LOCATE, NULL }, #ifdef ENABLE_SONG_SCREEN { 0, CMD_SCREEN_SONG, NULL }, #endif { 0, CMD_NONE, NULL }, { 0, CMD_QUIT, NULL }, { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Queue screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_PLAY, N_("Play") }, { 0, CMD_DELETE, NULL }, { 0, CMD_CLEAR, NULL }, { 0, CMD_LIST_MOVE_UP, N_("Move song up") }, { 0, CMD_LIST_MOVE_DOWN, N_("Move song down") }, { 0, CMD_ADD, NULL }, { 0, CMD_SAVE_PLAYLIST, NULL }, { 0, CMD_SCREEN_UPDATE, N_("Center") }, { 0, CMD_SELECT_PLAYING, NULL }, { 0, CMD_TOGGLE_AUTOCENTER, NULL }, { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Browse screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_PLAY, N_("Enter directory/Select and play song") }, { 0, CMD_SELECT, NULL }, { 0, CMD_ADD, N_("Append song to queue") }, { 0, CMD_SAVE_PLAYLIST, NULL }, { 0, CMD_DELETE, N_("Delete playlist") }, { 0, CMD_GO_PARENT_DIRECTORY, NULL }, { 0, CMD_GO_ROOT_DIRECTORY, NULL }, { 0, CMD_SCREEN_UPDATE, NULL }, #ifdef ENABLE_SEARCH_SCREEN { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Search screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_SCREEN_SEARCH, N_("Search") }, { 0, CMD_PLAY, N_("Select and play") }, { 0, CMD_SELECT, NULL }, { 0, CMD_ADD, N_("Append song to queue") }, { 0, CMD_SELECT_ALL, NULL }, { 0, CMD_SEARCH_MODE, NULL }, #endif #ifdef ENABLE_LYRICS_SCREEN { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Lyrics screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_SCREEN_LYRICS, N_("View Lyrics") }, { 0, CMD_SELECT, N_("(Re)load lyrics") }, /* to translators: this hotkey aborts the retrieval of lyrics from the server */ { 0, CMD_INTERRUPT, N_("Interrupt retrieval") }, { 0, CMD_LYRICS_UPDATE, N_("Download lyrics for currently playing song") }, { 0, CMD_EDIT, N_("Add or edit lyrics") }, { 0, CMD_SAVE_PLAYLIST, N_("Save lyrics") }, { 0, CMD_DELETE, N_("Delete saved lyrics") }, #endif #ifdef ENABLE_OUTPUTS_SCREEN { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Outputs screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_PLAY, N_("Enable/disable output") }, #endif #ifdef ENABLE_CHAT_SCREEN { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Chat screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_PLAY, N_("Write a message") }, #endif #ifdef ENABLE_KEYDEF_SCREEN { 0, CMD_NONE, NULL }, { 0, CMD_NONE, NULL }, { 1, CMD_NONE, N_("Keydef screen") }, { 2, CMD_NONE, NULL }, { 0, CMD_PLAY, N_("Edit keydefs for selected command") }, { 0, CMD_DELETE, N_("Remove selected keydef") }, { 0, CMD_ADD, N_("Add a keydef") }, { 0, CMD_GO_PARENT_DIRECTORY, N_("Go up a level") }, { 0, CMD_SAVE_PLAYLIST, N_("Apply and save changes") }, #endif }; static struct list_window *lw; static const char * list_callback(unsigned i, gcc_unused void *data) { const struct help_text_row *row = &help_text[i]; assert(i < G_N_ELEMENTS(help_text)); if (row->text != NULL) return _(row->text); if (row->command != CMD_NONE) return get_key_description(row->command); return ""; } static void help_init(WINDOW *w, unsigned cols, unsigned rows) { lw = list_window_init(w, cols, rows); lw->hide_cursor = true; list_window_set_length(lw, G_N_ELEMENTS(help_text)); } static void help_resize(unsigned cols, unsigned rows) { list_window_resize(lw, cols, rows); } static void help_exit(void) { list_window_free(lw); } static const char * help_title(gcc_unused char *str, gcc_unused size_t size) { return _("Help"); } static void screen_help_paint_callback(WINDOW *w, unsigned i, unsigned y, unsigned width, gcc_unused bool selected, gcc_unused const void *data) { const struct help_text_row *row = &help_text[i]; assert(i < G_N_ELEMENTS(help_text)); row_color(w, row->highlight ? COLOR_LIST_BOLD : COLOR_LIST, false); wclrtoeol(w); if (row->command == CMD_NONE) { if (row->text != NULL) mvwaddstr(w, y, 6, _(row->text)); else if (row->highlight == 2) mvwhline(w, y, 3, '-', width - 6); } else { const char *key = get_key_names(row->command, true); if (utf8_width(key) < 20) wmove(w, y, 20 - utf8_width(key)); waddstr(w, key); mvwaddch(w, y, 21, ':'); mvwaddstr(w, y, 23, row->text != NULL ? _(row->text) : get_key_description(row->command)); } } static void help_paint(void) { list_window_paint2(lw, screen_help_paint_callback, NULL); } static bool help_cmd(gcc_unused struct mpdclient *c, command_t cmd) { if (list_window_scroll_cmd(lw, cmd)) { help_paint(); return true; } list_window_set_cursor(lw, lw->start); if (screen_find(lw, cmd, list_callback, NULL)) { /* center the row */ list_window_center(lw, lw->selected); help_paint(); return true; } return false; } const struct screen_functions screen_help = { .init = help_init, .exit = help_exit, .resize = help_resize, .paint = help_paint, .cmd = help_cmd, .get_title = help_title, }; ncmpc-0.27/src/screen_help.h0000644000076400001440000000176513062774214012731 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_HELP_H #define NCMPC_SCREEN_HELP_H #include "config.h" #ifdef ENABLE_HELP_SCREEN extern const struct screen_functions screen_help; #endif #endif ncmpc-0.27/src/screen_artist.c0000644000076400001440000004023013064002247013260 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_artist.h" #include "screen_interface.h" #include "screen_status.h" #include "screen_find.h" #include "screen_browser.h" #include "screen.h" #include "i18n.h" #include "charset.h" #include "mpdclient.h" #include "screen_browser.h" #include "filelist.h" #include "options.h" #include #include #include #define BUFSIZE 1024 typedef enum { LIST_ARTISTS, LIST_ALBUMS, LIST_SONGS } artist_mode_t; static artist_mode_t mode = LIST_ARTISTS; static GPtrArray *artist_list, *album_list; static char *artist = NULL; static char *album = NULL; static char ALL_TRACKS[] = ""; static struct screen_browser browser; static gint compare_utf8(gconstpointer s1, gconstpointer s2) { const char *const*t1 = s1, *const*t2 = s2; char *key1 = g_utf8_collate_key(*t1,-1); char *key2 = g_utf8_collate_key(*t2,-1); int n = strcmp(key1,key2); g_free(key1); g_free(key2); return n; } /* list_window callback */ static const char * screen_artist_lw_callback(unsigned idx, void *data) { GPtrArray *list = data; if (mode == LIST_ALBUMS) { if (idx == 0) return ".."; else if (idx == list->len + 1) return _("All tracks"); --idx; } assert(idx < list->len); char *str_utf8 = g_ptr_array_index(list, idx); assert(str_utf8 != NULL); char *str = utf8_to_locale(str_utf8); static char buf[BUFSIZE]; g_strlcpy(buf, str, sizeof(buf)); g_free(str); return buf; } static void string_array_free(GPtrArray *array) { for (unsigned i = 0; i < array->len; ++i) { char *value = g_ptr_array_index(array, i); g_free(value); } g_ptr_array_free(array, TRUE); } static void free_lists(void) { if (artist_list != NULL) { string_array_free(artist_list); artist_list = NULL; } if (album_list != NULL) { string_array_free(album_list); album_list = NULL; } if (browser.filelist) { filelist_free(browser.filelist); browser.filelist = NULL; } } static void recv_tag_values(struct mpd_connection *connection, enum mpd_tag_type tag, GPtrArray *list) { struct mpd_pair *pair; while ((pair = mpd_recv_pair_tag(connection, tag)) != NULL) { g_ptr_array_add(list, g_strdup(pair->value)); mpd_return_pair(connection, pair); } } static void load_artist_list(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); assert(mode == LIST_ARTISTS); assert(artist == NULL); assert(album == NULL); assert(artist_list == NULL); assert(album_list == NULL); assert(browser.filelist == NULL); artist_list = g_ptr_array_new(); if (connection != NULL) { mpd_search_db_tags(connection, MPD_TAG_ARTIST); mpd_search_commit(connection); recv_tag_values(connection, MPD_TAG_ARTIST, artist_list); mpdclient_finish_command(c); } /* sort list */ g_ptr_array_sort(artist_list, compare_utf8); list_window_set_length(browser.lw, artist_list->len); } static void load_album_list(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); assert(mode == LIST_ALBUMS); assert(artist != NULL); assert(album == NULL); assert(album_list == NULL); assert(browser.filelist == NULL); album_list = g_ptr_array_new(); if (connection != NULL) { mpd_search_db_tags(connection, MPD_TAG_ALBUM); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ARTIST, artist); mpd_search_commit(connection); recv_tag_values(connection, MPD_TAG_ALBUM, album_list); mpdclient_finish_command(c); } /* sort list */ g_ptr_array_sort(album_list, compare_utf8); list_window_set_length(browser.lw, album_list->len + 2); } static void load_song_list(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); assert(mode == LIST_SONGS); assert(artist != NULL); assert(album != NULL); assert(browser.filelist == NULL); browser.filelist = filelist_new(); /* add a dummy entry for ".." */ filelist_append(browser.filelist, NULL); if (connection != NULL) { mpd_search_db_songs(connection, true); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ARTIST, artist); if (album != ALL_TRACKS) mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ALBUM, album); mpd_search_commit(connection); filelist_recv(browser.filelist, connection); mpdclient_finish_command(c); } /* fix highlights */ screen_browser_sync_highlights(browser.filelist, &c->playlist); list_window_set_length(browser.lw, filelist_length(browser.filelist)); } static void free_state(void) { g_free(artist); if (album != ALL_TRACKS) g_free(album); artist = NULL; album = NULL; free_lists(); } static void open_artist_list(struct mpdclient *c) { free_state(); mode = LIST_ARTISTS; load_artist_list(c); } static void open_album_list(struct mpdclient *c, char *_artist) { assert(_artist != NULL); free_state(); mode = LIST_ALBUMS; artist = _artist; load_album_list(c); } static void open_song_list(struct mpdclient *c, char *_artist, char *_album) { assert(_artist != NULL); assert(_album != NULL); free_state(); mode = LIST_SONGS; artist = _artist; album = _album; load_song_list(c); } static void reload_lists(struct mpdclient *c) { free_lists(); switch (mode) { case LIST_ARTISTS: load_artist_list(c); break; case LIST_ALBUMS: load_album_list(c); break; case LIST_SONGS: load_song_list(c); break; } } static void screen_artist_init(WINDOW *w, unsigned cols, unsigned rows) { browser.lw = list_window_init(w, cols, rows); browser.song_format = options.list_format; artist = NULL; album = NULL; } static void screen_artist_quit(void) { free_state(); list_window_free(browser.lw); } static void screen_artist_open(struct mpdclient *c) { if (artist_list == NULL && album_list == NULL && browser.filelist == NULL) reload_lists(c); } static void screen_artist_resize(unsigned cols, unsigned rows) { list_window_resize(browser.lw, cols, rows); } /** * Paint one item in the artist list. */ static void paint_artist_callback(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, bool selected, const void *data) { const GPtrArray *list = data; char *p = utf8_to_locale(g_ptr_array_index(list, i)); screen_browser_paint_directory(w, width, selected, p); g_free(p); } /** * Paint one item in the album list. There are two virtual items * inserted: at the beginning, there's the special item ".." to go to * the parent directory, and at the end, there's the item "All tracks" * to view the tracks of all albums. */ static void paint_album_callback(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, bool selected, const void *data) { const GPtrArray *list = data; const char *p; char *q = NULL; if (i == 0) p = ".."; else if (i == list->len + 1) p = _("All tracks"); else p = q = utf8_to_locale(g_ptr_array_index(list, i - 1)); screen_browser_paint_directory(w, width, selected, p); g_free(q); } static void screen_artist_paint(void) { if (browser.filelist) { screen_browser_paint(&browser); } else if (album_list != NULL) list_window_paint2(browser.lw, paint_album_callback, album_list); else if (artist_list != NULL) list_window_paint2(browser.lw, paint_artist_callback, artist_list); else { wmove(browser.lw->w, 0, 0); wclrtobot(browser.lw->w); } } static const char * screen_artist_get_title(char *str, size_t size) { switch(mode) { char *s1, *s2; case LIST_ARTISTS: g_snprintf(str, size, _("All artists")); break; case LIST_ALBUMS: s1 = utf8_to_locale(artist); g_snprintf(str, size, _("Albums of artist: %s"), s1); g_free(s1); break; case LIST_SONGS: s1 = utf8_to_locale(artist); if (album == ALL_TRACKS) g_snprintf(str, size, _("All tracks of artist: %s"), s1); else if (*album != 0) { s2 = utf8_to_locale(album); g_snprintf(str, size, _("Album: %s - %s"), s1, s2); g_free(s2); } else g_snprintf(str, size, _("Tracks of no album of artist: %s"), s1); g_free(s1); break; } return str; } static void screen_artist_update(struct mpdclient *c) { if (browser.filelist == NULL) return; if (c->events & MPD_IDLE_DATABASE) /* the db has changed -> update the list */ reload_lists(c); if (c->events & (MPD_IDLE_DATABASE | MPD_IDLE_QUEUE)) screen_browser_sync_highlights(browser.filelist, &c->playlist); if (c->events & (MPD_IDLE_DATABASE #ifndef NCMPC_MINI | MPD_IDLE_QUEUE #endif )) screen_artist_paint(); } /* add_query - Add all songs satisfying specified criteria. _artist is actually only used in the ALBUM case to distinguish albums with the same name from different artists. */ static void add_query(struct mpdclient *c, enum mpd_tag_type table, const char *_filter, const char *_artist) { struct mpd_connection *connection = mpdclient_get_connection(c); assert(_filter != NULL); if (connection == NULL) return; char *str = utf8_to_locale(_filter); if (table == MPD_TAG_ALBUM) screen_status_printf(_("Adding album %s..."), str); else screen_status_printf(_("Adding %s..."), str); g_free(str); mpd_search_db_songs(connection, true); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, table, _filter); if (table == MPD_TAG_ALBUM) mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ARTIST, _artist); mpd_search_commit(connection); struct filelist *addlist = filelist_new_recv(connection); if (mpdclient_finish_command(c)) mpdclient_filelist_add_all(c, addlist); filelist_free(addlist); } static int screen_artist_lw_cmd(struct mpdclient *c, command_t cmd) { switch (mode) { case LIST_ARTISTS: case LIST_ALBUMS: return list_window_cmd(browser.lw, cmd); case LIST_SONGS: return browser_cmd(&browser, c, cmd); } assert(0); return 0; } static int string_array_find(GPtrArray *array, const char *value) { guint i; for (i = 0; i < array->len; ++i) if (strcmp((const char*)g_ptr_array_index(array, i), value) == 0) return i; return -1; } static bool screen_artist_cmd(struct mpdclient *c, command_t cmd) { switch(cmd) { struct list_window_range range; char *selected; char *old; char *old_ptr; int idx; case CMD_PLAY: switch (mode) { case LIST_ARTISTS: if (browser.lw->selected >= artist_list->len) return true; selected = g_ptr_array_index(artist_list, browser.lw->selected); open_album_list(c, g_strdup(selected)); list_window_reset(browser.lw); screen_artist_paint(); return true; case LIST_ALBUMS: if (browser.lw->selected == 0) { /* handle ".." */ old = g_strdup(artist); open_artist_list(c); list_window_reset(browser.lw); /* restore previous list window state */ idx = string_array_find(artist_list, old); g_free(old); if (idx >= 0) { list_window_set_cursor(browser.lw, idx); list_window_center(browser.lw, idx); } } else if (browser.lw->selected == album_list->len + 1) { /* handle "show all" */ open_song_list(c, g_strdup(artist), ALL_TRACKS); list_window_reset(browser.lw); } else { /* select album */ selected = g_ptr_array_index(album_list, browser.lw->selected - 1); open_song_list(c, g_strdup(artist), g_strdup(selected)); list_window_reset(browser.lw); } screen_artist_paint(); return true; case LIST_SONGS: if (browser.lw->selected == 0) { /* handle ".." */ old = g_strdup(album); old_ptr = album; open_album_list(c, g_strdup(artist)); list_window_reset(browser.lw); /* restore previous list window state */ idx = old_ptr == ALL_TRACKS ? (int)album_list->len : string_array_find(album_list, old); g_free(old); if (idx >= 0) { ++idx; list_window_set_cursor(browser.lw, idx); list_window_center(browser.lw, idx); } screen_artist_paint(); return true; } break; } break; /* FIXME? CMD_GO_* handling duplicates code from CMD_PLAY */ case CMD_GO_PARENT_DIRECTORY: switch (mode) { case LIST_ARTISTS: break; case LIST_ALBUMS: old = g_strdup(artist); open_artist_list(c); list_window_reset(browser.lw); /* restore previous list window state */ idx = string_array_find(artist_list, old); g_free(old); if (idx >= 0) { list_window_set_cursor(browser.lw, idx); list_window_center(browser.lw, idx); } break; case LIST_SONGS: old = g_strdup(album); old_ptr = album; open_album_list(c, g_strdup(artist)); list_window_reset(browser.lw); /* restore previous list window state */ idx = old_ptr == ALL_TRACKS ? (int)album_list->len : string_array_find(album_list, old); g_free(old); if (idx >= 0) { ++idx; list_window_set_cursor(browser.lw, idx); list_window_center(browser.lw, idx); } break; } screen_artist_paint(); break; case CMD_GO_ROOT_DIRECTORY: switch (mode) { case LIST_ARTISTS: break; case LIST_ALBUMS: case LIST_SONGS: open_artist_list(c); list_window_reset(browser.lw); /* restore first list window state (pop while returning true) */ /* XXX */ break; } screen_artist_paint(); break; case CMD_SELECT: case CMD_ADD: switch(mode) { case LIST_ARTISTS: if (browser.lw->selected >= artist_list->len) return true; list_window_get_range(browser.lw, &range); for (unsigned i = range.start; i < range.end; ++i) { selected = g_ptr_array_index(artist_list, i); add_query(c, MPD_TAG_ARTIST, selected, NULL); cmd = CMD_LIST_NEXT; /* continue and select next item... */ } break; case LIST_ALBUMS: list_window_get_range(browser.lw, &range); for (unsigned i = range.start; i < range.end; ++i) { if(i == album_list->len + 1) add_query(c, MPD_TAG_ARTIST, artist, NULL); else if (i > 0) { selected = g_ptr_array_index(album_list, browser.lw->selected - 1); add_query(c, MPD_TAG_ALBUM, selected, artist); cmd = CMD_LIST_NEXT; /* continue and select next item... */ } } break; case LIST_SONGS: /* handled by browser_cmd() */ break; } break; /* continue and update... */ case CMD_SCREEN_UPDATE: reload_lists(c); return false; case CMD_LIST_FIND: case CMD_LIST_RFIND: case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: switch (mode) { case LIST_ARTISTS: screen_find(browser.lw, cmd, screen_artist_lw_callback, artist_list); screen_artist_paint(); return true; case LIST_ALBUMS: screen_find(browser.lw, cmd, screen_artist_lw_callback, album_list); screen_artist_paint(); return true; case LIST_SONGS: /* handled by browser_cmd() */ break; } case CMD_LIST_JUMP: switch (mode) { case LIST_ARTISTS: screen_jump(browser.lw, screen_artist_lw_callback, artist_list, paint_artist_callback, artist_list); screen_artist_paint(); return true; case LIST_ALBUMS: screen_jump(browser.lw, screen_artist_lw_callback, album_list, paint_album_callback, album_list); screen_artist_paint(); return true; case LIST_SONGS: /* handled by browser_cmd() */ break; } break; default: break; } if (screen_artist_lw_cmd(c, cmd)) { if (screen_is_visible(&screen_artist)) screen_artist_paint(); return true; } return false; } const struct screen_functions screen_artist = { .init = screen_artist_init, .exit = screen_artist_quit, .open = screen_artist_open, .resize = screen_artist_resize, .paint = screen_artist_paint, .update = screen_artist_update, .cmd = screen_artist_cmd, .get_title = screen_artist_get_title, }; ncmpc-0.27/src/screen_artist.h0000644000076400001440000000177513062774214013310 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_ARTIST_H #define NCMPC_SCREEN_ARTIST_H #include "config.h" #ifdef ENABLE_ARTIST_SCREEN extern const struct screen_functions screen_artist; #endif #endif ncmpc-0.27/src/screen_search.c0000644000076400001440000002676113064002321013225 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_search.h" #include "screen_interface.h" #include "screen_status.h" #include "screen.h" #include "i18n.h" #include "options.h" #include "charset.h" #include "mpdclient.h" #include "strfsong.h" #include "utils.h" #include "screen_utils.h" #include "screen_browser.h" #include "filelist.h" #include #include enum { SEARCH_URI = MPD_TAG_COUNT + 100, SEARCH_ARTIST_TITLE }; static const struct { const char *name; const char *localname; } search_tag[MPD_TAG_COUNT] = { [MPD_TAG_ARTIST] = { "artist", N_("artist") }, [MPD_TAG_ALBUM] = { "album", N_("album") }, [MPD_TAG_TITLE] = { "title", N_("title") }, [MPD_TAG_TRACK] = { "track", N_("track") }, [MPD_TAG_NAME] = { "name", N_("name") }, [MPD_TAG_GENRE] = { "genre", N_("genre") }, [MPD_TAG_DATE] = { "date", N_("date") }, [MPD_TAG_COMPOSER] = { "composer", N_("composer") }, [MPD_TAG_PERFORMER] = { "performer", N_("performer") }, [MPD_TAG_COMMENT] = { "comment", N_("comment") }, }; static int search_get_tag_id(const char *name) { if (g_ascii_strcasecmp(name, "file") == 0 || strcasecmp(name, _("file")) == 0) return SEARCH_URI; for (unsigned i = 0; i < MPD_TAG_COUNT; ++i) if (search_tag[i].name != NULL && (strcasecmp(search_tag[i].name, name) == 0 || strcasecmp(search_tag[i].localname, name) == 0)) return i; return -1; } typedef struct { enum mpd_tag_type table; const char *label; } search_type_t; static search_type_t mode[] = { { MPD_TAG_TITLE, N_("Title") }, { MPD_TAG_ARTIST, N_("Artist") }, { MPD_TAG_ALBUM, N_("Album") }, { SEARCH_URI, N_("Filename") }, { SEARCH_ARTIST_TITLE, N_("Artist + Title") }, { 0, NULL } }; static GList *search_history = NULL; static gchar *pattern = NULL; static gboolean advanced_search_mode = FALSE; static struct screen_browser browser; static const char *const help_text[] = { "Quick - Enter a string and ncmpc will search according", " to the current search mode (displayed above).", "", "Advanced - : [:...]", " Example: artist:radiohead album:pablo honey", "", " Available tags: artist, album, title, track,", " name, genre, date composer, performer, comment, file", "", }; /* search info */ static const char * lw_search_help_callback(unsigned idx, gcc_unused void *data) { assert(idx < G_N_ELEMENTS(help_text)); return help_text[idx]; } /* sanity check search mode value */ static void search_check_mode(void) { int max = 0; while (mode[max].label != NULL) max++; if (options.search_mode < 0) options.search_mode = 0; else if (options.search_mode >= max) options.search_mode = max-1; } static void search_clear(bool clear_pattern) { if (browser.filelist) { filelist_free(browser.filelist); browser.filelist = filelist_new(); list_window_set_length(browser.lw, 0); } if (clear_pattern && pattern) { g_free(pattern); pattern = NULL; } } static struct filelist * search_simple_query(struct mpd_connection *connection, bool exact_match, int table, gchar *local_pattern) { struct filelist *list; gchar *filter_utf8 = locale_to_utf8(local_pattern); if (table == SEARCH_ARTIST_TITLE) { mpd_command_list_begin(connection, false); mpd_search_db_songs(connection, exact_match); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_ARTIST, filter_utf8); mpd_search_commit(connection); mpd_search_db_songs(connection, exact_match); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, MPD_TAG_TITLE, filter_utf8); mpd_search_commit(connection); mpd_command_list_end(connection); list = filelist_new_recv(connection); filelist_no_duplicates(list); } else if (table == SEARCH_URI) { mpd_search_db_songs(connection, exact_match); mpd_search_add_uri_constraint(connection, MPD_OPERATOR_DEFAULT, filter_utf8); mpd_search_commit(connection); list = filelist_new_recv(connection); } else { mpd_search_db_songs(connection, exact_match); mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, table, filter_utf8); mpd_search_commit(connection); list = filelist_new_recv(connection); } g_free(filter_utf8); return list; } /*----------------------------------------------------------------------- * NOTE: This code exists to test a new search ui, * Its ugly and MUST be redesigned before the next release! *----------------------------------------------------------------------- */ static struct filelist * search_advanced_query(struct mpd_connection *connection, char *query) { advanced_search_mode = FALSE; if (strchr(query, ':') == NULL) return NULL; char **strv = g_strsplit_set(query, ": ", 0); int table[10]; memset(table, 0, 10*sizeof(int)); char *arg[10]; memset(arg, 0, 10*sizeof(char *)); int i = 0, j = 0; while (strv[i] && strlen(strv[i]) > 0 && i < 9) { int id = search_get_tag_id(strv[i]); if (id == -1) { if (table[j]) { char *tmp = arg[j]; arg[j] = g_strdup_printf("%s %s", arg[j], strv[i]); g_free(tmp); } else { screen_status_printf(_("Bad search tag %s"), strv[i]); } i++; } else if (strv[i+1] == NULL || strlen(strv[i+1]) == 0) { screen_status_printf(_("No argument for search tag %s"), strv[i]); i++; // j--; //table[j] = -1; } else { table[j] = id; arg[j] = locale_to_utf8(strv[i+1]); // FREE ME j++; table[j] = -1; arg[j] = NULL; i = i + 2; advanced_search_mode = TRUE; } } g_strfreev(strv); if (!advanced_search_mode || j == 0) { for (i = 0; arg[i] != NULL; ++i) g_free(arg[i]); return NULL; } /*----------------------------------------------------------------------- * NOTE (again): This code exists to test a new search ui, * Its ugly and MUST be redesigned before the next release! * + the code below should live in mpdclient.c *----------------------------------------------------------------------- */ /** stupid - but this is just a test...... (fulhack) */ mpd_search_db_songs(connection, false); for (i = 0; i < 10 && arg[i] != NULL; i++) { if (table[i] == SEARCH_URI) mpd_search_add_uri_constraint(connection, MPD_OPERATOR_DEFAULT, arg[i]); else mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, table[i], arg[i]); } mpd_search_commit(connection); struct filelist *fl = filelist_new_recv(connection); if (!mpd_response_finish(connection)) { filelist_free(fl); fl = NULL; } for (i = 0; arg[i] != NULL; ++i) g_free(arg[i]); return fl; } static struct filelist * do_search(struct mpdclient *c, char *query) { struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return NULL; struct filelist *fl = search_advanced_query(connection, query); if (fl != NULL) return fl; if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) { mpdclient_handle_error(c); return NULL; } fl = search_simple_query(connection, FALSE, mode[options.search_mode].table, query); if (fl == NULL) mpdclient_handle_error(c); return fl; } static void screen_search_reload(struct mpdclient *c) { if (pattern == NULL) return; if (browser.filelist != NULL) { filelist_free(browser.filelist); browser.filelist = NULL; } browser.filelist = do_search(c, pattern); if (browser.filelist == NULL) browser.filelist = filelist_new(); list_window_set_length(browser.lw, filelist_length(browser.filelist)); screen_browser_sync_highlights(browser.filelist, &c->playlist); } static void search_new(struct mpdclient *c) { if (!mpdclient_is_connected(c)) return; search_clear(true); g_free(pattern); pattern = screen_readln(_("Search"), NULL, &search_history, NULL); if (pattern == NULL) { list_window_reset(browser.lw); return; } screen_search_reload(c); } static void screen_search_init(WINDOW *w, unsigned cols, unsigned rows) { browser.lw = list_window_init(w, cols, rows); if (options.search_format != NULL) { browser.song_format = options.search_format; } else { browser.song_format = options.list_format; } list_window_set_length(browser.lw, G_N_ELEMENTS(help_text)); } static void screen_search_quit(void) { if (search_history) string_list_free(search_history); if (browser.filelist) filelist_free(browser.filelist); list_window_free(browser.lw); if (pattern) { g_free(pattern); pattern = NULL; } } static void screen_search_open(gcc_unused struct mpdclient *c) { // if( pattern==NULL ) // search_new(screen, c); // else screen_status_printf(_("Press %s for a new search"), get_key_names(CMD_SCREEN_SEARCH, false)); search_check_mode(); } static void screen_search_resize(unsigned cols, unsigned rows) { list_window_resize(browser.lw, cols, rows); } static void screen_search_paint(void) { if (browser.filelist) { browser.lw->hide_cursor = false; screen_browser_paint(&browser); } else { browser.lw->hide_cursor = true; list_window_paint(browser.lw, lw_search_help_callback, NULL); } } static const char * screen_search_get_title(char *str, size_t size) { if (advanced_search_mode && pattern) g_snprintf(str, size, _("Search: %s"), pattern); else if (pattern) g_snprintf(str, size, _("Search: Results for %s [%s]"), pattern, _(mode[options.search_mode].label)); else g_snprintf(str, size, _("Search: Press %s for a new search [%s]"), get_key_names(CMD_SCREEN_SEARCH, false), _(mode[options.search_mode].label)); return str; } static void screen_search_update(struct mpdclient *c) { if (browser.filelist != NULL && c->events & MPD_IDLE_QUEUE) { screen_browser_sync_highlights(browser.filelist, &c->playlist); screen_search_paint(); } } static bool screen_search_cmd(struct mpdclient *c, command_t cmd) { switch (cmd) { case CMD_SEARCH_MODE: options.search_mode++; if (mode[options.search_mode].label == NULL) options.search_mode = 0; screen_status_printf(_("Search mode: %s"), _(mode[options.search_mode].label)); /* fall through */ case CMD_SCREEN_UPDATE: screen_search_reload(c); screen_search_paint(); return true; case CMD_SCREEN_SEARCH: search_new(c); screen_search_paint(); return true; case CMD_CLEAR: search_clear(true); list_window_reset(browser.lw); screen_search_paint(); return true; default: break; } if (browser.filelist != NULL && browser_cmd(&browser, c, cmd)) { if (screen_is_visible(&screen_search)) screen_search_paint(); return true; } return false; } const struct screen_functions screen_search = { .init = screen_search_init, .exit = screen_search_quit, .open = screen_search_open, .resize = screen_search_resize, .paint = screen_search_paint, .update = screen_search_update, .cmd = screen_search_cmd, .get_title = screen_search_get_title, }; ncmpc-0.27/src/screen_search.h0000644000076400001440000000177513062774214013247 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_SEARCH_H #define NCMPC_SCREEN_SEARCH_H #include "config.h" #ifdef ENABLE_SEARCH_SCREEN extern const struct screen_functions screen_search; #endif #endif ncmpc-0.27/src/screen_song.c0000644000076400001440000003262713064317210012732 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_song.h" #include "screen_interface.h" #include "screen_file.h" #include "screen_lyrics.h" #include "screen_find.h" #include "i18n.h" #include "screen.h" #include "charset.h" #include "time_format.h" #include "mpdclient.h" #include #include #include #include enum { LABEL_LENGTH = MPD_TAG_COUNT, LABEL_PATH, LABEL_BITRATE, LABEL_FORMAT, LABEL_POSITION, }; static const char *const tag_labels[] = { [MPD_TAG_ARTIST] = N_("Artist"), [MPD_TAG_TITLE] = N_("Title"), [MPD_TAG_ALBUM] = N_("Album"), [LABEL_LENGTH] = N_("Length"), [LABEL_POSITION] = N_("Position"), [MPD_TAG_COMPOSER] = N_("Composer"), [MPD_TAG_NAME] = N_("Name"), [MPD_TAG_DISC] = N_("Disc"), [MPD_TAG_TRACK] = N_("Track"), [MPD_TAG_DATE] = N_("Date"), [MPD_TAG_GENRE] = N_("Genre"), [MPD_TAG_COMMENT] = N_("Comment"), [LABEL_PATH] = N_("Path"), [LABEL_BITRATE] = N_("Bitrate"), [LABEL_FORMAT] = N_("Format"), }; static unsigned max_tag_label_width; enum stats_label { STATS_ARTISTS, STATS_ALBUMS, STATS_SONGS, STATS_UPTIME, STATS_DBUPTIME, STATS_PLAYTIME, STATS_DBPLAYTIME, }; static const char *const stats_labels[] = { [STATS_ARTISTS] = N_("Number of artists"), [STATS_ALBUMS] = N_("Number of albums"), [STATS_SONGS] = N_("Number of songs"), [STATS_UPTIME] = N_("Uptime"), [STATS_DBUPTIME] = N_("Most recent db update"), [STATS_PLAYTIME] = N_("Playtime"), [STATS_DBPLAYTIME] = N_("DB playtime"), }; static unsigned max_stats_label_width; static struct list_window *lw; static struct mpd_song *next_song; static struct { struct mpd_song *selected_song; struct mpd_song *played_song; GPtrArray *lines; } current; static void screen_song_clear(void) { for (guint i = 0; i < current.lines->len; ++i) g_free(g_ptr_array_index(current.lines, i)); g_ptr_array_set_size(current.lines, 0); if (current.selected_song != NULL) { mpd_song_free(current.selected_song); current.selected_song = NULL; } if (current.played_song != NULL) { mpd_song_free(current.played_song); current.played_song = NULL; } } static const char * screen_song_list_callback(unsigned idx, gcc_unused void *data) { assert(idx < current.lines->len); return g_ptr_array_index(current.lines, idx); } static void screen_song_init(WINDOW *w, unsigned cols, unsigned rows) { for (unsigned i = 0; i < G_N_ELEMENTS(tag_labels); ++i) { if (tag_labels[i] != NULL) { unsigned width = utf8_width(_(tag_labels[i])); if (width > max_tag_label_width) max_tag_label_width = width; } } for (unsigned i = 0; i < G_N_ELEMENTS(stats_labels); ++i) { if (stats_labels[i] != NULL) { unsigned width = utf8_width(_(stats_labels[i])); if (width > max_stats_label_width) max_stats_label_width = width; } } /* We will need at least 10 lines, so this saves 10 reallocations :) */ current.lines = g_ptr_array_sized_new(10); lw = list_window_init(w, cols, rows); lw->hide_cursor = true; } static void screen_song_exit(void) { list_window_free(lw); screen_song_clear(); g_ptr_array_free(current.lines, TRUE); current.lines = NULL; } static void screen_song_resize(unsigned cols, unsigned rows) { list_window_resize(lw, cols, rows); } static const char * screen_song_title(gcc_unused char *str, gcc_unused size_t size) { return _("Song viewer"); } static void screen_song_paint(void) { list_window_paint(lw, screen_song_list_callback, NULL); } /* Appends a line with a fixed width for the label column * Handles NULL strings gracefully */ static void screen_song_append(const char *label, const char *value, unsigned label_col) { const unsigned label_width = locale_width(label) + 2; assert(label != NULL); assert(value != NULL); assert(g_utf8_validate(value, -1, NULL)); /* +2 for ': ' */ label_col += 2; const int value_col = lw->cols - label_col; /* calculate the number of required linebreaks */ const gchar *value_iter = value; const int label_size = strlen(label) + label_col; while (*value_iter != 0) { char *entry = g_malloc(label_size), *entry_iter; if (value_iter == value) { entry_iter = entry + g_sprintf(entry, "%s: ", label); /* fill the label column with whitespaces */ memset(entry_iter, ' ', label_col - label_width); entry_iter += label_col - label_width; } else { /* fill the label column with whitespaces */ memset(entry, ' ', label_col); entry_iter = entry + label_col; } /* skip whitespaces */ while (g_ascii_isspace(*value_iter)) ++value_iter; char *p = g_strdup(value_iter); unsigned width = utf8_cut_width(p, value_col); if (width == 0) /* not enough room for anything - bail out */ break; *entry_iter = 0; value_iter += strlen(p); p = replace_utf8_to_locale(p); char *q = g_strconcat(entry, p, NULL); g_free(entry); g_free(p); g_ptr_array_add(current.lines, q); } } static void screen_song_append_tag(const struct mpd_song *song, enum mpd_tag_type tag) { const char *label = _(tag_labels[tag]); unsigned i = 0; const char *value; assert((unsigned)tag < G_N_ELEMENTS(tag_labels)); assert(label != NULL); while ((value = mpd_song_get_tag(song, tag, i++)) != NULL) screen_song_append(label, value, max_tag_label_width); } static void screen_song_add_song(const struct mpd_song *song) { assert(song != NULL); char songpos[16]; g_snprintf(songpos, sizeof(songpos), "%d", mpd_song_get_pos(song) + 1); screen_song_append(_(tag_labels[LABEL_POSITION]), songpos, max_tag_label_width); screen_song_append_tag(song, MPD_TAG_ARTIST); screen_song_append_tag(song, MPD_TAG_TITLE); screen_song_append_tag(song, MPD_TAG_ALBUM); /* create time string and add it */ if (mpd_song_get_duration(song) > 0) { char length[16]; format_duration_short(length, sizeof(length), mpd_song_get_duration(song)); const char *value = length; char buffer[64]; if (mpd_song_get_end(song) > 0) { char start[16], end[16]; format_duration_short(start, sizeof(start), mpd_song_get_start(song)); format_duration_short(end, sizeof(end), mpd_song_get_end(song)); snprintf(buffer, sizeof(buffer), "%s [%s-%s]\n", length, start, end); value = buffer; } else if (mpd_song_get_start(song) > 0) { char start[16]; format_duration_short(start, sizeof(start), mpd_song_get_start(song)); snprintf(buffer, sizeof(buffer), "%s [%s-]\n", length, start); value = buffer; } screen_song_append(_(tag_labels[LABEL_LENGTH]), value, max_tag_label_width); } screen_song_append_tag(song, MPD_TAG_COMPOSER); screen_song_append_tag(song, MPD_TAG_NAME); screen_song_append_tag(song, MPD_TAG_DISC); screen_song_append_tag(song, MPD_TAG_TRACK); screen_song_append_tag(song, MPD_TAG_DATE); screen_song_append_tag(song, MPD_TAG_GENRE); screen_song_append_tag(song, MPD_TAG_COMMENT); screen_song_append(_(tag_labels[LABEL_PATH]), mpd_song_get_uri(song), max_tag_label_width); } static void screen_song_append_stats(enum stats_label label, const char *value) { screen_song_append(_(stats_labels[label]), value, max_stats_label_width); } static bool screen_song_add_stats(struct mpd_connection *connection) { struct mpd_stats *mpd_stats = mpd_run_stats(connection); if (mpd_stats == NULL) return false; g_ptr_array_add(current.lines, g_strdup(_("MPD statistics")) ); char buf[64]; g_snprintf(buf, sizeof(buf), "%d", mpd_stats_get_number_of_artists(mpd_stats)); screen_song_append_stats(STATS_ARTISTS, buf); g_snprintf(buf, sizeof(buf), "%d", mpd_stats_get_number_of_albums(mpd_stats)); screen_song_append_stats(STATS_ALBUMS, buf); g_snprintf(buf, sizeof(buf), "%d", mpd_stats_get_number_of_songs(mpd_stats)); screen_song_append_stats(STATS_SONGS, buf); format_duration_long(buf, sizeof(buf), mpd_stats_get_db_play_time(mpd_stats)); screen_song_append_stats(STATS_DBPLAYTIME, buf); format_duration_long(buf, sizeof(buf), mpd_stats_get_play_time(mpd_stats)); screen_song_append_stats(STATS_PLAYTIME, buf); format_duration_long(buf, sizeof(buf), mpd_stats_get_uptime(mpd_stats)); screen_song_append_stats(STATS_UPTIME, buf); GDate *date = g_date_new(); g_date_set_time_t(date, mpd_stats_get_db_update_time(mpd_stats)); g_date_strftime(buf, sizeof(buf), "%x", date); screen_song_append_stats(STATS_DBUPTIME, buf); g_date_free(date); mpd_stats_free(mpd_stats); return true; } static void audio_format_to_string(char *buffer, size_t size, const struct mpd_audio_format *format) { #if LIBMPDCLIENT_CHECK_VERSION(2,10,0) if (format->bits == MPD_SAMPLE_FORMAT_FLOAT) { g_snprintf(buffer, size, "%u:f:%u", format->sample_rate, format->channels); return; } if (format->bits == MPD_SAMPLE_FORMAT_DSD) { if (format->sample_rate > 0 && format->sample_rate % 44100 == 0) { /* use shortcuts such as "dsd64" which implies the sample rate */ g_snprintf(buffer, size, "dsd%u:%u", format->sample_rate * 8 / 44100, format->channels); return; } g_snprintf(buffer, size, "%u:dsd:%u", format->sample_rate, format->channels); return; } #endif g_snprintf(buffer, size, "%u:%u:%u", format->sample_rate, format->bits, format->channels); } static void screen_song_update(struct mpdclient *c) { /* Clear all lines */ for (guint i = 0; i < current.lines->len; ++i) g_free(g_ptr_array_index(current.lines, i)); g_ptr_array_set_size(current.lines, 0); /* If a song was selected before the song screen was opened */ if (next_song != NULL) { assert(current.selected_song == NULL); current.selected_song = next_song; next_song = NULL; } if (current.selected_song != NULL && (c->song == NULL || strcmp(mpd_song_get_uri(current.selected_song), mpd_song_get_uri(c->song)) != 0 || !mpdclient_is_playing(c))) { g_ptr_array_add(current.lines, g_strdup(_("Selected song")) ); screen_song_add_song(current.selected_song); g_ptr_array_add(current.lines, g_strdup("\0")); } if (c->song != NULL && mpdclient_is_playing(c)) { if (current.played_song != NULL) { mpd_song_free(current.played_song); } current.played_song = mpd_song_dup(c->song); g_ptr_array_add(current.lines, g_strdup(_("Currently playing song"))); screen_song_add_song(current.played_song); if (mpd_status_get_kbit_rate(c->status) > 0) { char buf[16]; g_snprintf(buf, sizeof(buf), _("%d kbps"), mpd_status_get_kbit_rate(c->status)); screen_song_append(_(tag_labels[LABEL_BITRATE]), buf, max_tag_label_width); } const struct mpd_audio_format *format = mpd_status_get_audio_format(c->status); if (format) { char buf[32]; audio_format_to_string(buf, sizeof(buf), format); screen_song_append(_(tag_labels[LABEL_FORMAT]), buf, max_tag_label_width); } g_ptr_array_add(current.lines, g_strdup("\0")); } /* Add some statistics about mpd */ struct mpd_connection *connection = mpdclient_get_connection(c); if (connection != NULL && !screen_song_add_stats(connection)) mpdclient_handle_error(c); list_window_set_length(lw, current.lines->len); screen_song_paint(); } static bool screen_song_cmd(struct mpdclient *c, command_t cmd) { if (list_window_scroll_cmd(lw, cmd)) { screen_song_paint(); return true; } switch(cmd) { case CMD_LOCATE: if (current.selected_song != NULL) { screen_file_goto_song(c, current.selected_song); return true; } if (current.played_song != NULL) { screen_file_goto_song(c, current.played_song); return true; } return false; #ifdef ENABLE_LYRICS_SCREEN case CMD_SCREEN_LYRICS: if (current.selected_song != NULL) { screen_lyrics_switch(c, current.selected_song, false); return true; } if (current.played_song != NULL) { screen_lyrics_switch(c, current.played_song, true); return true; } return false; #endif case CMD_SCREEN_SWAP: if (current.selected_song != NULL) screen_swap(c, current.selected_song); else // No need to check if this is null - we'd pass null anyway screen_swap(c, current.played_song); return true; default: break; } if (screen_find(lw, cmd, screen_song_list_callback, NULL)) { /* center the row */ list_window_center(lw, lw->selected); screen_song_paint(); return true; } return false; } const struct screen_functions screen_song = { .init = screen_song_init, .exit = screen_song_exit, .open = screen_song_update, .close = screen_song_clear, .resize = screen_song_resize, .paint = screen_song_paint, .update = screen_song_update, .cmd = screen_song_cmd, .get_title = screen_song_title, }; void screen_song_switch(struct mpdclient *c, const struct mpd_song *song) { assert(song != NULL); assert(current.selected_song == NULL); assert(current.played_song == NULL); next_song = mpd_song_dup(song); screen_switch(&screen_song, c); } ncmpc-0.27/src/screen_song.h0000644000076400001440000000220013062774214012730 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_SONG_H #define NCMPC_SCREEN_SONG_H #include "config.h" #ifdef ENABLE_SONG_SCREEN struct mpdclient; struct mpd_song; extern const struct screen_functions screen_song; void screen_song_switch(struct mpdclient *c, const struct mpd_song *song); #endif /* ENABLE_SONG_SCREEN */ #endif ncmpc-0.27/src/screen_keydef.c0000644000076400001440000002606113064002332013222 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_keydef.h" #include "screen_interface.h" #include "screen_status.h" #include "screen_find.h" #include "i18n.h" #include "conf.h" #include "screen.h" #include "screen_utils.h" #include "options.h" #include "Compiler.h" #include #include #include #include static struct list_window *lw; static command_definition_t *cmds = NULL; /** the number of commands */ static unsigned command_n_commands = 0; /** * the position of the "apply" item. It's the same as command_n_commands, * because array subscripts start at 0, while numbers of items start at 1. */ gcc_pure static inline unsigned command_item_apply(void) { return command_n_commands; } /** the position of the "apply and save" item */ gcc_pure static inline unsigned command_item_save(void) { return command_item_apply() + 1; } /** the number of items in the "command" view */ gcc_pure static inline unsigned command_length(void) { return command_item_save() + 1; } /** * The command being edited, represented by a array subscript to @cmds, or -1, * if no command is being edited */ static int subcmd = -1; /** The number of keys assigned to the current command */ static unsigned subcmd_n_keys = 0; /** The position of the up ("[..]") item */ gcc_const static inline unsigned subcmd_item_up(void) { return 0; } /** The position of the "add a key" item */ gcc_pure static inline unsigned subcmd_item_add(void) { return subcmd_n_keys + 1; } /** The number of items in the list_window, if there's a command being edited */ gcc_pure static inline unsigned subcmd_length(void) { return subcmd_item_add() + 1; } /** Check whether a given item is a key */ gcc_pure static inline bool subcmd_item_is_key(unsigned i) { return (i > subcmd_item_up() && i < subcmd_item_add()); } /** * Convert an item id (as in lw->selected) into a "key id", which is an array * subscript to cmds[subcmd].keys. */ gcc_const static inline unsigned subcmd_item_to_key_id(unsigned i) { return i - 1; } static int keybindings_changed(void) { command_definition_t *orginal_cmds = get_command_definitions(); size_t size = command_n_commands * sizeof(command_definition_t); return memcmp(orginal_cmds, cmds, size); } static void apply_keys(void) { if (keybindings_changed()) { command_definition_t *orginal_cmds = get_command_definitions(); size_t size = command_n_commands * sizeof(command_definition_t); memcpy(orginal_cmds, cmds, size); screen_status_printf(_("You have new key bindings")); } else screen_status_printf(_("Keybindings unchanged.")); } static int save_keys(void) { char *allocated = NULL; const char *filename = options.key_file; if (filename == NULL) { if (!check_user_conf_dir()) { screen_status_printf(_("Error: Unable to create directory ~/.ncmpc - %s"), strerror(errno)); screen_bell(); return -1; } filename = allocated = build_user_key_binding_filename(); } FILE *f = fopen(filename, "w"); if (f == NULL) { screen_status_printf(_("Error: %s - %s"), filename, strerror(errno)); screen_bell(); g_free(allocated); return -1; } if (write_key_bindings(f, KEYDEF_WRITE_HEADER)) screen_status_printf(_("Wrote %s"), filename); else screen_status_printf(_("Error: %s - %s"), filename, strerror(errno)); g_free(allocated); return fclose(f); } /* TODO: rename to check_n_keys / subcmd_count_keys? */ static void check_subcmd_length(void) { unsigned i; /* this loops counts the continous valid keys at the start of the the keys array, so make sure you don't have gaps */ for (i = 0; i < MAX_COMMAND_KEYS; i++) if (cmds[subcmd].keys[i] == 0) break; subcmd_n_keys = i; list_window_set_length(lw, subcmd_length()); } static void keydef_paint(void); /** lw->start the last time switch_to_subcmd_mode() was called */ static unsigned saved_start = 0; static void switch_to_subcmd_mode(int cmd) { assert(subcmd == -1); saved_start = lw->start; subcmd = cmd; list_window_reset(lw); check_subcmd_length(); keydef_paint(); } static void switch_to_command_mode(void) { assert(subcmd != -1); list_window_set_length(lw, command_length()); list_window_set_cursor(lw, subcmd); subcmd = -1; lw->start = saved_start; keydef_paint(); } /** * Delete a key from a given command's definition * @param cmd_index the command * @param key_index the key (see below) */ static void delete_key(int cmd_index, int key_index) { /* shift the keys to close the gap that appeared */ int i = key_index+1; while (i < MAX_COMMAND_KEYS && cmds[cmd_index].keys[i]) cmds[cmd_index].keys[key_index++] = cmds[cmd_index].keys[i++]; /* As key_index now holds the index of the last key slot that contained a key, we use it to empty this slot, because this key has been copied to the previous slot in the loop above */ cmds[cmd_index].keys[key_index] = 0; cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED; check_subcmd_length(); screen_status_printf(_("Deleted")); /* repaint */ keydef_paint(); /* update key conflict flags */ check_key_bindings(cmds, NULL, 0); } /* assigns a new key to a key slot */ static void overwrite_key(int cmd_index, int key_index) { assert(key_index < MAX_COMMAND_KEYS); char *buf = g_strdup_printf(_("Enter new key for %s: "), cmds[cmd_index].name); const int key = screen_getch(buf); g_free(buf); if (key == ERR) { screen_status_printf(_("Aborted")); return; } if (key == '\0') { screen_status_printf(_("Ctrl-Space can't be used")); return; } const command_t cmd = find_key_command(key, cmds); if (cmd != CMD_NONE) { screen_status_printf(_("Error: key %s is already used for %s"), key2str(key), get_key_command_name(cmd)); screen_bell(); return; } cmds[cmd_index].keys[key_index] = key; cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED; screen_status_printf(_("Assigned %s to %s"), key2str(key),cmds[cmd_index].name); check_subcmd_length(); /* repaint */ keydef_paint(); /* update key conflict flags */ check_key_bindings(cmds, NULL, 0); } /* assign a new key to a new slot */ static void add_key(int cmd_index) { if (subcmd_n_keys < MAX_COMMAND_KEYS) overwrite_key(cmd_index, subcmd_n_keys); } static const char * list_callback(unsigned idx, gcc_unused void *data) { static char buf[256]; if (subcmd == -1) { if (idx == command_item_apply()) return _("===> Apply key bindings "); if (idx == command_item_save()) return _("===> Apply & Save key bindings "); assert(idx < (unsigned) command_n_commands); /* * Format the lines in two aligned columnes for the key name and * the description, like this: * * this-command - do this * that-one - do that */ size_t len = strlen(cmds[idx].name); strncpy(buf, cmds[idx].name, sizeof(buf)); if (len < get_cmds_max_name_width(cmds)) memset(buf + len, ' ', get_cmds_max_name_width(cmds) - len); g_snprintf(buf + get_cmds_max_name_width(cmds), sizeof(buf) - get_cmds_max_name_width(cmds), " - %s", _(cmds[idx].description)); return buf; } else { if (idx == subcmd_item_up()) return "[..]"; if (idx == subcmd_item_add()) { g_snprintf(buf, sizeof(buf), "%d. %s", idx, _("Add new key")); return buf; } assert(subcmd_item_is_key(idx)); g_snprintf(buf, sizeof(buf), "%d. %-20s (%d) ", idx, key2str(cmds[subcmd].keys[subcmd_item_to_key_id(idx)]), cmds[subcmd].keys[subcmd_item_to_key_id(idx)]); return buf; } } static void keydef_init(WINDOW *w, unsigned cols, unsigned rows) { lw = list_window_init(w, cols, rows); } static void keydef_resize(unsigned cols, unsigned rows) { list_window_resize(lw, cols, rows); } static void keydef_exit(void) { list_window_free(lw); if (cmds) g_free(cmds); cmds = NULL; lw = NULL; } static void keydef_open(gcc_unused struct mpdclient *c) { if (cmds == NULL) { command_definition_t *current_cmds = get_command_definitions(); command_n_commands = 0; while (current_cmds[command_n_commands].name) command_n_commands++; /* +1 for the terminator element */ size_t cmds_size = (command_n_commands + 1) * sizeof(command_definition_t); cmds = g_malloc0(cmds_size); memcpy(cmds, current_cmds, cmds_size); } subcmd = -1; list_window_set_length(lw, command_length()); } static void keydef_close(void) { if (cmds && !keybindings_changed()) { g_free(cmds); cmds = NULL; } else screen_status_printf(_("Note: Did you forget to \'Apply\' your changes?")); } static const char * keydef_title(char *str, size_t size) { if (subcmd == -1) return _("Edit key bindings"); g_snprintf(str, size, _("Edit keys for %s"), cmds[subcmd].name); return str; } static void keydef_paint(void) { list_window_paint(lw, list_callback, NULL); } static bool keydef_cmd(gcc_unused struct mpdclient *c, command_t cmd) { if (cmd == CMD_LIST_RANGE_SELECT) return false; if (list_window_cmd(lw, cmd)) { keydef_paint(); return true; } switch(cmd) { case CMD_PLAY: if (subcmd == -1) { if (lw->selected == command_item_apply()) { apply_keys(); } else if (lw->selected == command_item_save()) { apply_keys(); save_keys(); } else { switch_to_subcmd_mode(lw->selected); } } else { if (lw->selected == subcmd_item_up()) { switch_to_command_mode(); } else if (lw->selected == subcmd_item_add()) { add_key(subcmd); } else { /* just to be sure ;-) */ assert(subcmd_item_is_key(lw->selected)); overwrite_key(subcmd, subcmd_item_to_key_id(lw->selected)); } } return true; case CMD_GO_PARENT_DIRECTORY: case CMD_GO_ROOT_DIRECTORY: if (subcmd != -1) switch_to_command_mode(); return true; case CMD_DELETE: if (subcmd != -1 && subcmd_item_is_key(lw->selected)) delete_key(subcmd, subcmd_item_to_key_id(lw->selected)); return true; case CMD_ADD: if (subcmd != -1) add_key(subcmd); return true; case CMD_SAVE_PLAYLIST: apply_keys(); save_keys(); return true; case CMD_LIST_FIND: case CMD_LIST_RFIND: case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: screen_find(lw, cmd, list_callback, NULL); keydef_paint(); return true; default: return false; } /* unreachable */ assert(0); return false; } const struct screen_functions screen_keydef = { .init = keydef_init, .exit = keydef_exit, .open = keydef_open, .close = keydef_close, .resize = keydef_resize, .paint = keydef_paint, .cmd = keydef_cmd, .get_title = keydef_title, }; ncmpc-0.27/src/screen_keydef.h0000644000076400001440000000203013062774214013232 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_KEYDEF_H #define NCMPC_SCREEN_KEYDEF_H #include "config.h" #ifdef ENABLE_KEYDEF_SCREEN extern const struct screen_functions screen_keydef; #endif /* ENABLE_KEYDEF_SCREEN */ #endif ncmpc-0.27/src/plugin.c0000644000076400001440000002203713064026453011723 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "plugin.h" #include "Compiler.h" #include #include #include #include #include #include #include struct plugin_pipe { struct plugin_cycle *cycle; /** the pipe to the plugin process, or -1 if none is currently open */ int fd; /** the GLib IO watch of #fd */ guint event_id; /** the output of the current plugin */ GString *data; }; struct plugin_cycle { /** the plugin list; used for traversing to the next plugin */ struct plugin_list *list; /** arguments passed to execv() */ char **argv; /** caller defined callback function */ plugin_callback_t callback; /** caller defined pointer passed to #callback */ void *callback_data; /** the index of the next plugin which is going to be invoked */ guint next_plugin; /** the pid of the plugin process, or -1 if none is currently running */ pid_t pid; /** the stdout pipe */ struct plugin_pipe pipe_stdout; /** the stderr pipe */ struct plugin_pipe pipe_stderr; /** list of all error messages from failed plugins */ GString *all_errors; }; static bool register_plugin(struct plugin_list *list, char *path) { struct stat st; if (stat(path, &st) < 0) return false; g_ptr_array_add(list->plugins, path); return true; } static gint plugin_compare_func_alpha(gconstpointer plugin1, gconstpointer plugin2) { return strcmp(* (char * const *) plugin1, * (char * const *) plugin2); } static void plugin_list_sort(struct plugin_list *list, GCompareFunc compare_func) { g_ptr_array_sort(list->plugins, compare_func); } bool plugin_list_load_directory(struct plugin_list *list, const char *path) { GDir *dir = g_dir_open(path, 0, NULL); if (dir == NULL) return false; const char *name; while ((name = g_dir_read_name(dir)) != NULL) { char *plugin = g_build_filename(path, name, NULL); if (!register_plugin(list, plugin)) g_free(plugin); } g_dir_close(dir); plugin_list_sort(list, plugin_compare_func_alpha); return true; } void plugin_list_deinit(struct plugin_list *list) { for (guint i = 0; i < list->plugins->len; ++i) free(g_ptr_array_index(list->plugins, i)); g_ptr_array_free(list->plugins, TRUE); } static void next_plugin(struct plugin_cycle *cycle); static void plugin_eof(struct plugin_cycle *cycle, struct plugin_pipe *p) { close(p->fd); p->fd = -1; /* Only if both pipes are have EOF status we are done */ if (cycle->pipe_stdout.fd != -1 || cycle->pipe_stderr.fd != -1) return; int status, ret = waitpid(cycle->pid, &status, 0); cycle->pid = -1; if (ret < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) { /* If we encountered an error other than service unavailable * (69), log it for later. If all plugins fail, we may get * some hints for debugging.*/ if (cycle->pipe_stderr.data->len > 0 && WEXITSTATUS(status) != 69) g_string_append_printf(cycle->all_errors, "*** %s ***\n\n%s\n", cycle->argv[0], cycle->pipe_stderr.data->str); /* the plugin has failed */ g_string_free(cycle->pipe_stdout.data, TRUE); cycle->pipe_stdout.data = NULL; g_string_free(cycle->pipe_stderr.data, TRUE); cycle->pipe_stderr.data = NULL; next_plugin(cycle); } else { /* success: invoke the callback */ cycle->callback(cycle->pipe_stdout.data, true, cycle->argv[0], cycle->callback_data); } } static gboolean plugin_data(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gpointer data) { struct plugin_pipe *p = data; assert(p->fd >= 0); struct plugin_cycle *cycle = p->cycle; assert(cycle != NULL); assert(cycle->pid > 0); char buffer[256]; ssize_t nbytes = condition & G_IO_IN ? read(p->fd, buffer, sizeof(buffer)) : 0; if (nbytes <= 0) { plugin_eof(cycle, p); return FALSE; } g_string_append_len(p->data, buffer, nbytes); return TRUE; } /** * This is a timer callback which calls the plugin callback "some time * later". This solves the problem that plugin_run() may fail * immediately, leaving its return value in an undefined state. * Instead, install a timer which calls the plugin callback in the * moment after. */ static gboolean plugin_delayed_fail(gpointer data) { struct plugin_cycle *cycle = data; assert(cycle != NULL); assert(cycle->pipe_stdout.fd < 0); assert(cycle->pipe_stderr.fd < 0); assert(cycle->pid < 0); cycle->callback(cycle->all_errors, false, NULL, cycle->callback_data); return FALSE; } static void plugin_fd_add(struct plugin_cycle *cycle, struct plugin_pipe *p, int fd) { p->cycle = cycle; p->fd = fd; p->data = g_string_new(NULL); GIOChannel *channel = g_io_channel_unix_new(fd); p->event_id = g_io_add_watch(channel, G_IO_IN|G_IO_HUP, plugin_data, cycle); g_io_channel_unref(channel); } static int start_plugin(struct plugin_cycle *cycle, const char *plugin_path) { assert(cycle != NULL); assert(cycle->pid < 0); assert(cycle->pipe_stdout.fd < 0); assert(cycle->pipe_stderr.fd < 0); assert(cycle->pipe_stdout.data == NULL); assert(cycle->pipe_stderr.data == NULL); /* set new program name, but free the one from the previous plugin */ g_free(cycle->argv[0]); cycle->argv[0] = g_path_get_basename(plugin_path); int fds_stdout[2]; if (pipe(fds_stdout) < 0) return -1; int fds_stderr[2]; if (pipe(fds_stderr) < 0) { close(fds_stdout[0]); close(fds_stdout[1]); return -1; } pid_t pid = fork(); if (pid < 0) { close(fds_stdout[0]); close(fds_stdout[1]); close(fds_stderr[0]); close(fds_stderr[1]); return -1; } if (pid == 0) { dup2(fds_stdout[1], 1); dup2(fds_stderr[1], 2); close(fds_stdout[0]); close(fds_stdout[1]); close(fds_stderr[0]); close(fds_stderr[1]); close(0); /* XXX close other fds? */ execv(plugin_path, cycle->argv); _exit(1); } close(fds_stdout[1]); close(fds_stderr[1]); cycle->pid = pid; /* XXX CLOEXEC? */ plugin_fd_add(cycle, &cycle->pipe_stdout, fds_stdout[0]); plugin_fd_add(cycle, &cycle->pipe_stderr, fds_stderr[0]); return 0; } static void next_plugin(struct plugin_cycle *cycle) { assert(cycle->pid < 0); assert(cycle->pipe_stdout.fd < 0); assert(cycle->pipe_stderr.fd < 0); assert(cycle->pipe_stdout.data == NULL); assert(cycle->pipe_stderr.data == NULL); if (cycle->next_plugin >= cycle->list->plugins->len) { /* no plugins left */ g_idle_add(plugin_delayed_fail, cycle); return; } const char *plugin_path = g_ptr_array_index(cycle->list->plugins, cycle->next_plugin++); if (start_plugin(cycle, plugin_path) < 0) { /* system error */ g_idle_add(plugin_delayed_fail, cycle); return; } } static char ** make_argv(const char*const* args) { unsigned num = 0; while (args[num] != NULL) ++num; num += 2; char **ret = g_new(char *, num); /* reserve space for the program name */ *ret++ = NULL; while (*args != NULL) *ret++ = g_strdup(*args++); /* end of argument vector */ *ret++ = NULL; return ret - num; } struct plugin_cycle * plugin_run(struct plugin_list *list, const char *const*args, plugin_callback_t callback, void *callback_data) { struct plugin_cycle *cycle = g_new(struct plugin_cycle, 1); assert(args != NULL); cycle->list = list; cycle->argv = make_argv(args); cycle->callback = callback; cycle->callback_data = callback_data; cycle->next_plugin = 0; cycle->pid = -1; cycle->pipe_stdout.fd = -1; cycle->pipe_stderr.fd = -1; cycle->pipe_stdout.data = NULL; cycle->pipe_stderr.data = NULL; cycle->all_errors = g_string_new(NULL); next_plugin(cycle); return cycle; } static void plugin_fd_remove(struct plugin_pipe *p) { if (p->fd >= 0) { g_source_remove(p->event_id); close(p->fd); } } void plugin_stop(struct plugin_cycle *cycle) { plugin_fd_remove(&cycle->pipe_stdout); plugin_fd_remove(&cycle->pipe_stderr); if (cycle->pid > 0) { /* kill the plugin process */ int status; kill(cycle->pid, SIGTERM); waitpid(cycle->pid, &status, 0); } /* free data that has been received */ if (cycle->pipe_stdout.data != NULL) g_string_free(cycle->pipe_stdout.data, TRUE); if (cycle->pipe_stderr.data != NULL) g_string_free(cycle->pipe_stderr.data, TRUE); if (cycle->all_errors != NULL) g_string_free(cycle->all_errors, TRUE); /* free argument list */ for (guint i = 0; i == 0 || cycle->argv[i] != NULL; ++i) g_free(cycle->argv[i]); g_free(cycle->argv); g_free(cycle); } ncmpc-0.27/src/plugin.h0000644000076400001440000000601113062774214011725 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef PLUGIN_H #define PLUGIN_H #include #include /** * A list of registered plugins. */ struct plugin_list { GPtrArray *plugins; }; /** * When a plugin cycle is finished, this function is called. In any * case, plugin_stop() has to be called to free all memory. * * @param result the plugin's output (stdout) on success; summary of all error * messages on failure as determined by success * @param success result of the plugin cycle; true if result is meaningful * output, false if result contains error messages * @param plugin_name the name of the plugin which succeeded; becomes invalid * when plugin_stop is called (i.e. strdup it if you need it afterwards). * @param data the caller defined pointer passed to plugin_run() */ typedef void (*plugin_callback_t)(const GString *result, const bool success, const char *plugin_name, void *data); /** * This object represents a cycle through all available plugins, until * a plugin returns a positive result. */ struct plugin_cycle; /** * Initialize an empty plugin_list structure. */ static inline void plugin_list_init(struct plugin_list *list) { list->plugins = g_ptr_array_new(); } /** * Load all plugins (executables) in a directory. */ bool plugin_list_load_directory(struct plugin_list *list, const char *path); /** * Frees all memory held by the plugin_list object (but not the * pointer itself). */ void plugin_list_deinit(struct plugin_list *list); /** * Run plugins in this list, until one returns success (or until the * plugin list is exhausted). * * @param list the plugin list * @param args NULL terminated command line arguments passed to the * plugin programs * @param callback the callback function which will be called when a * result is available * @param callback_data caller defined pointer which is passed to the * callback function */ struct plugin_cycle * plugin_run(struct plugin_list *list, const char *const*args, plugin_callback_t callback, void *callback_data); /** * Stops the plugin cycle and frees resources. This can be called to * abort the current cycle, or after the plugin_callback_t has been * invoked. */ void plugin_stop(struct plugin_cycle *invocation); #endif ncmpc-0.27/src/screen_text.c0000644000076400001440000000526013062774214012752 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_text.h" #include "screen_find.h" #include "charset.h" #include #include void screen_text_clear(struct screen_text *text) { list_window_reset(text->lw); for (guint i = 0; i < text->lines->len; ++i) g_free(g_ptr_array_index(text->lines, i)); g_ptr_array_set_size(text->lines, 0); list_window_set_length(text->lw, 0); } void screen_text_append(struct screen_text *text, const char *str) { assert(str != NULL); const char *eol; while ((eol = strchr(str, '\n')) != NULL) { char *line; const char *next = eol + 1; /* strip whitespace at end */ while (eol > str && (unsigned char)eol[-1] <= 0x20) --eol; /* create copy and append it to text->lines */ line = g_malloc(eol - str + 1); memcpy(line, str, eol - str); line[eol - str] = 0; g_ptr_array_add(text->lines, line); /* reset control characters */ for (eol = line + (eol - str); line < eol; ++line) if ((unsigned char)*line < 0x20) *line = ' '; str = next; } if (*str != 0) g_ptr_array_add(text->lines, g_strdup(str)); list_window_set_length(text->lw, text->lines->len); } const char * screen_text_list_callback(unsigned idx, void *data) { const struct screen_text *text = data; assert(idx < text->lines->len); char *value = utf8_to_locale(g_ptr_array_index(text->lines, idx)); static char buffer[256]; g_strlcpy(buffer, value, sizeof(buffer)); g_free(value); return buffer; } bool screen_text_cmd(struct screen_text *text, gcc_unused struct mpdclient *c, command_t cmd) { if (list_window_scroll_cmd(text->lw, cmd)) { screen_text_repaint(text); return true; } list_window_set_cursor(text->lw, text->lw->start); if (screen_find(text->lw, cmd, screen_text_list_callback, text)) { /* center the row */ list_window_center(text->lw, text->lw->selected); screen_text_repaint(text); return true; } return false; } ncmpc-0.27/src/screen_text.h0000644000076400001440000000450013064002230012733 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SCREEN_TEXT_H #define SCREEN_TEXT_H #include "list_window.h" #include struct mpdclient; struct screen_text { GPtrArray *lines; struct list_window *lw; }; static inline void screen_text_init(struct screen_text *text, WINDOW *w, unsigned cols, unsigned rows) { text->lines = g_ptr_array_new(); text->lw = list_window_init(w, cols, rows); text->lw->hide_cursor = true; } void screen_text_clear(struct screen_text *text); static inline void screen_text_deinit(struct screen_text *text) { screen_text_clear(text); g_ptr_array_free(text->lines, TRUE); list_window_free(text->lw); } static inline void screen_text_resize(struct screen_text *text, unsigned cols, unsigned rows) { list_window_resize(text->lw, cols, rows); } static inline bool screen_text_is_empty(const struct screen_text *text) { return text->lines->len == 0; } void screen_text_append(struct screen_text *text, const char *str); static inline void screen_text_set(struct screen_text *text, const char *str) { screen_text_clear(text); screen_text_append(text, str); } const char * screen_text_list_callback(unsigned idx, void *data); static inline void screen_text_paint(struct screen_text *text) { list_window_paint(text->lw, screen_text_list_callback, text); } /** * Repaint and update the screen. */ static inline void screen_text_repaint(struct screen_text *text) { screen_text_paint(text); wrefresh(text->lw->w); } bool screen_text_cmd(struct screen_text *text, struct mpdclient *c, command_t cmd); #endif ncmpc-0.27/src/screen_lyrics.c0000644000076400001440000002571113064033442013267 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_lyrics.h" #include "screen_interface.h" #include "screen_status.h" #include "screen_file.h" #include "screen_song.h" #include "i18n.h" #include "options.h" #include "mpdclient.h" #include "screen.h" #include "lyrics.h" #include "screen_text.h" #include "screen_utils.h" #include "ncu.h" #include #include #include #include #include #include #include #include #include static struct screen_text text; static struct mpd_song *next_song; static bool follow = false; /** Set if the cursor position shall be kept during the next lyrics update. */ static bool reloading = false; static struct { struct mpd_song *song; char *artist, *title, *plugin_name; struct plugin_cycle *loader; guint loader_timeout; } current; static void screen_lyrics_abort(void) { if (current.loader != NULL) { plugin_stop(current.loader); current.loader = NULL; } if (current.loader_timeout != 0) { g_source_remove(current.loader_timeout); current.loader_timeout = 0; } if (current.plugin_name != NULL) { g_free(current.plugin_name); current.plugin_name = NULL; } if (current.artist != NULL) { g_free(current.artist); current.artist = NULL; } if (current.title != NULL) { g_free(current.title); current.title = NULL; } if (current.song != NULL) { mpd_song_free(current.song); current.song = NULL; } } /** * Repaint and update the screen, if it is currently active. */ static void lyrics_repaint_if_active(void) { if (screen_is_visible(&screen_lyrics)) { screen_text_repaint(&text); /* XXX repaint the screen title */ } } static void path_lyr_file(char *path, size_t size, const char *artist, const char *title) { snprintf(path, size, "%s/.lyrics/%s - %s.txt", getenv("HOME"), artist, title); } static bool exists_lyr_file(const char *artist, const char *title) { char path[1024]; path_lyr_file(path, 1024, artist, title); struct stat result; return (stat(path, &result) == 0); } static FILE * create_lyr_file(const char *artist, const char *title) { char path[1024]; snprintf(path, 1024, "%s/.lyrics", getenv("HOME")); mkdir(path, S_IRWXU); path_lyr_file(path, 1024, artist, title); return fopen(path, "w"); } static int store_lyr_hd(void) { FILE *lyr_file = create_lyr_file(current.artist, current.title); if (lyr_file == NULL) return -1; for (unsigned i = 0; i < text.lines->len; ++i) fprintf(lyr_file, "%s\n", (const char*)g_ptr_array_index(text.lines, i)); fclose(lyr_file); return 0; } static int delete_lyr_hd(void) { if (!exists_lyr_file(current.artist, current.title)) return -1; char path[1024]; path_lyr_file(path, 1024, current.artist, current.title); if (unlink(path) != 0) return -2; return 0; } static void screen_lyrics_set(const GString *str) { if (reloading) { unsigned saved_start = text.lw->start; screen_text_set(&text, str->str); /* restore the cursor and ensure that it's still valid */ text.lw->start = saved_start; list_window_fetch_cursor(text.lw); } else { screen_text_set(&text, str->str); } reloading = false; /* paint new data */ lyrics_repaint_if_active(); } static void screen_lyrics_callback(const GString *result, const bool success, const char *plugin_name, gcc_unused void *data) { assert(current.loader != NULL); current.plugin_name = g_strdup(plugin_name); /* Display result, which may be lyrics or error messages */ if (result != NULL) screen_lyrics_set(result); if (success == true) { if (options.lyrics_autosave && !exists_lyr_file(current.artist, current.title)) store_lyr_hd(); } else { /* translators: no lyrics were found for the song */ screen_status_message (_("No lyrics")); } if (current.loader_timeout != 0) { g_source_remove(current.loader_timeout); current.loader_timeout = 0; } plugin_stop(current.loader); current.loader = NULL; } static gboolean screen_lyrics_timeout_callback(gpointer gcc_unused data) { plugin_stop(current.loader); current.loader = NULL; screen_status_printf(_("Lyrics timeout occurred after %d seconds"), options.lyrics_timeout); current.loader_timeout = 0; return FALSE; } static void screen_lyrics_load(const struct mpd_song *song) { assert(song != NULL); screen_lyrics_abort(); screen_text_clear(&text); const char *artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0); const char *title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0); current.song = mpd_song_dup(song); current.artist = g_strdup(artist); current.title = g_strdup(title); current.loader = lyrics_load(current.artist, current.title, screen_lyrics_callback, NULL); if (options.lyrics_timeout != 0) { current.loader_timeout = g_timeout_add_seconds(options.lyrics_timeout, screen_lyrics_timeout_callback, NULL); } } static void screen_lyrics_reload(void) { if (current.loader == NULL && current.artist != NULL && current.title != NULL) { reloading = true; current.loader = lyrics_load(current.artist, current.title, screen_lyrics_callback, NULL); screen_text_repaint(&text); } } static void lyrics_screen_init(WINDOW *w, unsigned cols, unsigned rows) { screen_text_init(&text, w, cols, rows); } static void lyrics_resize(unsigned cols, unsigned rows) { screen_text_resize(&text, cols, rows); } static void lyrics_exit(void) { screen_lyrics_abort(); screen_text_deinit(&text); } static void lyrics_open(struct mpdclient *c) { const struct mpd_song *next_song_c = next_song != NULL ? next_song : c->song; if (next_song_c != NULL && (current.song == NULL || strcmp(mpd_song_get_uri(next_song_c), mpd_song_get_uri(current.song)) != 0)) screen_lyrics_load(next_song_c); if (next_song != NULL) { mpd_song_free(next_song); next_song = NULL; } } static void lyrics_update(struct mpdclient *c) { if (!follow) return; if (c->song != NULL && (current.song == NULL || strcmp(mpd_song_get_uri(c->song), mpd_song_get_uri(current.song)) != 0)) screen_lyrics_load(c->song); } static const char * lyrics_title(char *str, size_t size) { if (current.loader != NULL) { snprintf(str, size, "%s (%s)", _("Lyrics"), /* translators: this message is displayed while data is retrieved */ _("loading...")); return str; } else if (current.artist != NULL && current.title != NULL && !screen_text_is_empty(&text)) { int n; n = snprintf(str, size, "%s: %s - %s", _("Lyrics"), current.artist, current.title); if (options.lyrics_show_plugin && current.plugin_name != NULL && (unsigned int) n < size - 1) snprintf(str + n, size - n, " (%s)", current.plugin_name); return str; } else return _("Lyrics"); } static void lyrics_paint(void) { screen_text_paint(&text); } /* save current lyrics to a file and run editor on it */ static void lyrics_edit(void) { char *editor = options.text_editor; if (editor == NULL) { screen_status_message(_("Editor not configured")); return; } if (options.text_editor_ask) { const char *prompt = _("Do you really want to start an editor and edit these lyrics?"); bool really = screen_get_yesno(prompt, false); if (!really) { screen_status_message(_("Aborted")); return; } } if (store_lyr_hd() < 0) return; ncu_deinit(); /* TODO: fork/exec/wait won't work on Windows, but building a command string for system() is too tricky */ int status; pid_t pid = fork(); if (pid == -1) { screen_status_printf(("%s (%s)"), _("Can't start editor"), g_strerror(errno)); ncu_init(); return; } else if (pid == 0) { char path[1024]; path_lyr_file(path, sizeof(path), current.artist, current.title); execlp(editor, editor, path, NULL); /* exec failed, do what system does */ _exit(127); } else { int ret; do { ret = waitpid(pid, &status, 0); } while (ret == -1 && errno == EINTR); } ncu_init(); /* TODO: hardly portable */ if (WIFEXITED(status)) { if (WEXITSTATUS(status) == 0) /* update to get the changes */ screen_lyrics_reload(); else if (WEXITSTATUS(status) == 127) screen_status_message(_("Can't start editor")); else screen_status_printf(_("Editor exited unexpectedly (%d)"), WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { screen_status_printf(_("Editor exited unexpectedly (signal %d)"), WTERMSIG(status)); } } static bool lyrics_cmd(struct mpdclient *c, command_t cmd) { if (screen_text_cmd(&text, c, cmd)) return true; switch(cmd) { case CMD_INTERRUPT: if (current.loader != NULL) { screen_lyrics_abort(); screen_text_clear(&text); } return true; case CMD_SAVE_PLAYLIST: if (current.loader == NULL && current.artist != NULL && current.title != NULL && store_lyr_hd() == 0) /* lyrics for the song were saved on hard disk */ screen_status_message (_("Lyrics saved")); return true; case CMD_DELETE: if (current.loader == NULL && current.artist != NULL && current.title != NULL) { switch (delete_lyr_hd()) { case 0: screen_status_message (_("Lyrics deleted")); break; case -1: screen_status_message (_("No saved lyrics")); break; } } return true; case CMD_LYRICS_UPDATE: if (c->song != NULL) { screen_lyrics_load(c->song); screen_text_paint(&text); } return true; case CMD_EDIT: lyrics_edit(); return true; case CMD_SELECT: screen_lyrics_reload(); return true; #ifdef ENABLE_SONG_SCREEN case CMD_SCREEN_SONG: if (current.song != NULL) { screen_song_switch(c, current.song); return true; } break; #endif case CMD_SCREEN_SWAP: screen_swap(c, current.song); return true; case CMD_LOCATE: if (current.song != NULL) { screen_file_goto_song(c, current.song); return true; } return false; default: break; } return false; } const struct screen_functions screen_lyrics = { .init = lyrics_screen_init, .exit = lyrics_exit, .open = lyrics_open, .update = lyrics_update, .close = NULL, .resize = lyrics_resize, .paint = lyrics_paint, .cmd = lyrics_cmd, .get_title = lyrics_title, }; void screen_lyrics_switch(struct mpdclient *c, const struct mpd_song *song, bool f) { assert(song != NULL); follow = f; next_song = mpd_song_dup(song); screen_switch(&screen_lyrics, c); } ncmpc-0.27/src/screen_lyrics.h0000644000076400001440000000226613062774214013303 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_LYRICS_H #define NCMPC_SCREEN_LYRICS_H #include "config.h" #ifdef ENABLE_LYRICS_SCREEN #include struct mpdclient; struct mpd_song; extern const struct screen_functions screen_lyrics; void screen_lyrics_switch(struct mpdclient *c, const struct mpd_song *song, bool follow); #endif /* ENABLE_LYRICS_SCREEN */ #endif ncmpc-0.27/src/lyrics.c0000644000076400001440000000272613062774214011740 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "lyrics.h" #include "config.h" #include static struct plugin_list empty, plugins; void lyrics_init(void) { plugin_list_init(&empty); plugin_list_init(&plugins); plugin_list_load_directory(&plugins, LYRICS_PLUGIN_DIR); } void lyrics_deinit(void) { plugin_list_deinit(&empty); plugin_list_deinit(&plugins); } struct plugin_cycle * lyrics_load(const char *artist, const char *title, plugin_callback_t callback, void *data) { const char *args[3] = { artist, title, NULL }; if (artist == NULL || title == NULL) return plugin_run(&empty, args, callback, data); return plugin_run(&plugins, args, callback, data); } ncmpc-0.27/src/lyrics.h0000644000076400001440000000210013062774214011727 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef LYRICS_H #define LYRICS_H #include "plugin.h" void lyrics_init(void); void lyrics_deinit(void); struct plugin_cycle * lyrics_load(const char *artist, const char *title, plugin_callback_t callback, void *callback_data); #endif ncmpc-0.27/src/screen_outputs.c0000644000076400001440000001203613064002273013477 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_outputs.h" #include "screen_interface.h" #include "screen_status.h" #include "paint.h" #include "i18n.h" #include "list_window.h" #include "mpdclient.h" #include #include #include static struct list_window *lw; static GPtrArray *mpd_outputs = NULL; static bool toggle_output(struct mpdclient *c, unsigned int output_index) { assert(mpd_outputs != NULL); if (output_index >= mpd_outputs->len) return false; struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) return false; struct mpd_output *output = g_ptr_array_index(mpd_outputs, output_index); if (!mpd_output_get_enabled(output)) { if (!mpd_run_enable_output(connection, mpd_output_get_id(output))) { mpdclient_handle_error(c); return false; } c->events |= MPD_IDLE_OUTPUT; screen_status_printf(_("Output '%s' enabled"), mpd_output_get_name(output)); } else { if (!mpd_run_disable_output(connection, mpd_output_get_id(output))) { mpdclient_handle_error(c); return false; } c->events |= MPD_IDLE_OUTPUT; screen_status_printf(_("Output '%s' disabled"), mpd_output_get_name(output)); } return true; } static void clear_output_element(gpointer data, gcc_unused gpointer user_data) { mpd_output_free(data); } static void clear_outputs_list(void) { assert(mpd_outputs != NULL); if (mpd_outputs->len <= 0) return; g_ptr_array_foreach(mpd_outputs, clear_output_element, NULL); g_ptr_array_remove_range(mpd_outputs, 0, mpd_outputs->len); /* not updating the list_window length here, because that would clear the cursor position, and fill_outputs_list() will be called after this function anyway */ /* list_window_set_length(lw, 0); */ } static void fill_outputs_list(struct mpdclient *c) { assert(mpd_outputs != NULL); struct mpd_connection *connection = mpdclient_get_connection(c); if (connection == NULL) { list_window_set_length(lw, 0); return; } mpd_send_outputs(connection); struct mpd_output *output; while ((output = mpd_recv_output(connection)) != NULL) { g_ptr_array_add(mpd_outputs, output); } mpdclient_finish_command(c); list_window_set_length(lw, mpd_outputs->len); } static void outputs_init(WINDOW *w, unsigned cols, unsigned rows) { lw = list_window_init(w, cols, rows); mpd_outputs = g_ptr_array_new(); } static void outputs_resize(unsigned cols, unsigned rows) { list_window_resize(lw, cols, rows); } static void outputs_exit(void) { list_window_free(lw); g_ptr_array_free(mpd_outputs, TRUE); } static void outputs_open(struct mpdclient *c) { fill_outputs_list(c); } static void outputs_close(void) { clear_outputs_list(); } static const char * outputs_title(gcc_unused char *str, gcc_unused size_t size) { return _("Outputs"); } static void screen_outputs_paint_callback(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, bool selected, gcc_unused const void *data) { const struct mpd_output *output; assert(mpd_outputs != NULL); assert(i < mpd_outputs->len); output = g_ptr_array_index(mpd_outputs, i); row_color(w, COLOR_LIST, selected); waddstr(w, mpd_output_get_enabled(output) ? "[X] " : "[ ] "); waddstr(w, mpd_output_get_name(output)); row_clear_to_eol(w, width, selected); } static void outputs_paint(void) { list_window_paint2(lw, screen_outputs_paint_callback, NULL); } static void screen_outputs_update(struct mpdclient *c) { if (c->events & MPD_IDLE_OUTPUT) { clear_outputs_list(); fill_outputs_list(c); outputs_paint(); } } static bool outputs_cmd(struct mpdclient *c, command_t cmd) { assert(mpd_outputs != NULL); if (list_window_cmd(lw, cmd)) { outputs_paint(); return true; } switch (cmd) { case CMD_PLAY: toggle_output(c, lw->selected); return true; case CMD_SCREEN_UPDATE: clear_outputs_list(); fill_outputs_list(c); outputs_paint(); return true; default: break; } return false; } const struct screen_functions screen_outputs = { .init = outputs_init, .exit = outputs_exit, .open = outputs_open, .close = outputs_close, .resize = outputs_resize, .paint = outputs_paint, .update = screen_outputs_update, .cmd = outputs_cmd, .get_title = outputs_title, }; ncmpc-0.27/src/screen_outputs.h0000644000076400001440000000203513062774214013513 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_OUTPUTS_H #define NCMPC_SCREEN_OUTPUTS_H #include "config.h" #ifdef ENABLE_OUTPUTS_SCREEN extern const struct screen_functions screen_outputs; #endif /* ENABLE_OUTPUTS_SCREEN */ #endif ncmpc-0.27/src/screen_chat.c0000644000076400001440000001170313064002223012666 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "screen_chat.h" #include "screen_interface.h" #include "screen_utils.h" #include "screen_status.h" #include "screen_text.h" #include "mpdclient.h" #include "i18n.h" #include "charset.h" #include "options.h" #include #include static struct screen_text text; /* rename? */ static const char chat_channel[] = "chat"; static bool check_chat_support(struct mpdclient *c) { static unsigned last_connection_id = 0; static bool was_supported = false; /* if we're using the same connection as the last time check_chat_support was called, we can use the cached information about whether chat is supported */ if (c->connection_id == last_connection_id) return was_supported; last_connection_id = c->connection_id; if (c->connection == NULL) return (was_supported = false); if (mpd_connection_cmp_server_version(c->connection, 0, 17, 0) == -1) { const unsigned *version = mpd_connection_get_server_version(c->connection); char *str; str = g_strdup_printf( _("connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)"), version[0], version[1], version[2]); screen_text_append(&text, str); g_free(str); return (was_supported = false); } /* mpdclient_get_connection? */ if (!mpdclient_cmd_subscribe(c, chat_channel)) return (was_supported = false); /* mpdclient_put_connection? */ return (was_supported = true); } static void screen_chat_init(WINDOW *w, unsigned cols, unsigned rows) { screen_text_init(&text, w, cols, rows); } static void screen_chat_exit(void) { screen_text_deinit(&text); } static void screen_chat_open(struct mpdclient *c) { (void) check_chat_support(c); } static void screen_chat_resize(unsigned cols, unsigned rows) { screen_text_resize(&text, cols, rows); } static void screen_chat_paint(void) { screen_text_paint(&text); } static void process_message(struct mpd_message *message) { assert(message != NULL); /* You'll have to move this out of screen_chat, if you want to use client-to-client messages anywhere else */ assert(g_strcmp0(mpd_message_get_channel(message), chat_channel) == 0); char *message_text = utf8_to_locale(mpd_message_get_text(message)); screen_text_append(&text, message_text); g_free(message_text); screen_chat_paint(); } static void screen_chat_update(struct mpdclient *c) { if (check_chat_support(c) && (c->events & MPD_IDLE_MESSAGE)) { if (!mpdclient_send_read_messages(c)) return; struct mpd_message *message; while ((message = mpdclient_recv_message(c)) != NULL) { process_message(message); mpd_message_free(message); } mpdclient_finish_command(c); c->events &= ~MPD_IDLE_MESSAGE; } } static char * screen_chat_get_prefix(void) { static char *prefix = NULL; if (prefix) return prefix; if (options.chat_prefix) { /* Options are encoded in the "locale" charset */ prefix = locale_to_utf8(options.chat_prefix); return prefix; } prefix = g_strconcat("<", g_get_user_name(), "> ", NULL); return prefix; } static void screen_chat_send_message(struct mpdclient *c, char *msg) { char *utf8 = locale_to_utf8(msg); char *prefix = screen_chat_get_prefix(); char *full_msg = g_strconcat(prefix, utf8, NULL); g_free(utf8); (void) mpdclient_cmd_send_message(c, chat_channel, full_msg); g_free(full_msg); } static bool screen_chat_cmd(struct mpdclient *c, command_t cmd) { if (screen_text_cmd(&text, c, cmd)) return true; if (cmd == CMD_PLAY) { char *message = screen_readln(_("Your message"), NULL, NULL, NULL); /* the user entered an empty line */ if (message == NULL) return true; if (check_chat_support(c)) screen_chat_send_message(c, message); else screen_status_message(_("Message could not be sent")); g_free(message); return true; } return false; } static const char * screen_chat_title(gcc_unused char *s, gcc_unused size_t size) { return _("Chat"); } const struct screen_functions screen_chat = { .init = screen_chat_init, .exit = screen_chat_exit, .open = screen_chat_open, /* close */ .resize = screen_chat_resize, .paint = screen_chat_paint, .update = screen_chat_update, .cmd = screen_chat_cmd, .get_title = screen_chat_title, }; ncmpc-0.27/src/screen_chat.h0000644000076400001440000000202013062774214012701 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef NCMPC_SCREEN_CHAT_H #define NCMPC_SCREEN_CHAT_H #include "config.h" #ifdef ENABLE_CHAT_SCREEN struct screen_functions; extern const struct screen_functions screen_chat; #endif #endif ncmpc-0.27/src/lirc.c0000644000076400001440000000344713063453711011362 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "lirc.h" #include "ncmpc.h" #include "Compiler.h" #include #include static struct lirc_config *lc = NULL; static gboolean lirc_event(gcc_unused GIOChannel *source, gcc_unused GIOCondition condition, gcc_unused gpointer data) { char *code, *txt; command_t cmd; begin_input_event(); if (lirc_nextcode(&code) == 0) { while (lirc_code2char(lc, code, &txt) == 0 && txt != NULL) { cmd = get_key_command_from_name(txt); if (!do_input_event(cmd)) return FALSE; } } end_input_event(); return TRUE; } void ncmpc_lirc_init() { char prog[] = "ncmpc"; int lirc_socket = 0; if ((lirc_socket = lirc_init(prog, 0)) == -1) return; if (lirc_readconfig(NULL, &lc, NULL)) { lirc_deinit(); return; } GIOChannel *channel = g_io_channel_unix_new(lirc_socket); g_io_add_watch(channel, G_IO_IN, lirc_event, NULL); g_io_channel_unref(channel); } void ncmpc_lirc_deinit() { if (lc) lirc_freeconfig(lc); lirc_deinit(); } ncmpc-0.27/src/lirc.h0000644000076400001440000000210213063452513011351 00000000000000/* ncmpc (Ncurses MPD Client) * (c) 2004-2017 The Music Player Daemon Project * Project homepage: http://musicpd.org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef LIRC_H #define LIRC_H #include "config.h" #ifdef ENABLE_LIRC void ncmpc_lirc_init(void); void ncmpc_lirc_deinit(void); #else static inline void ncmpc_lirc_init(void) {} static inline void ncmpc_lirc_deinit(void) {} #endif #endif ncmpc-0.27/test/0000755000076400001440000000000013065552243010527 500000000000000ncmpc-0.27/test/run_hscroll.c0000644000076400001440000000121311267251050013134 00000000000000#include "hscroll.h" #include "config.h" #include #include #ifdef ENABLE_LOCALE #include #endif int main(int argc, char **argv) { struct hscroll hscroll; char *p; unsigned width, count; if (argc != 5) { g_printerr("Usage: %s TEXT SEPARATOR WIDTH COUNT\n", argv[0]); return 1; } #ifdef ENABLE_LOCALE setlocale(LC_CTYPE,""); #endif hscroll_reset(&hscroll); width = atoi(argv[3]); count = atoi(argv[4]); for (unsigned i = 0; i < count; ++i) { p = strscroll(&hscroll, argv[1], argv[2], width); g_print("%s\n", p); g_free(p); hscroll_step(&hscroll); } hscroll_reset(&hscroll); return 0; } ncmpc-0.27/Makefile.am0000644000076400001440000001252013064317145011523 00000000000000SUBDIRS = \ po ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign 1.11 dist-xz subdir-objects AM_CPPFLAGS = \ $(CURSES_CFLAGS) \ $(LIBMPDCLIENT_CFLAGS) \ $(GLIB_CFLAGS) \ $(LIBLIRCCLIENT_CFLAGS) \ -DLOCALE_DIR=\""$(datadir)/locale"\"\ -DSYSCONFDIR=\""$(sysconfdir)"\" bin_PROGRAMS = src/ncmpc src_ncmpc_LDADD = \ $(CURSES_LIBS) \ $(LIBMPDCLIENT_LIBS) \ $(GLIB_LIBS) \ $(LIBLIRCCLIENT_LIBS) src_ncmpc_SOURCES = \ src/Compiler.h \ src/ncmpc.h \ src/defaults.h \ src/ncmpc_curses.h \ src/i18n.h \ src/main.c \ src/gidle.c src/gidle.h \ src/mpdclient.c src/mpdclient.h \ src/callbacks.c src/callbacks.h \ src/playlist.c src/playlist.h \ src/filelist.c src/filelist.h \ src/options.c src/options.h \ src/command.c src/command.h \ src/keyboard.c src/keyboard.h \ src/ncfix.h \ src/ncu.c src/ncu.h \ src/player_command.c src/player_command.h \ src/title_bar.c src/title_bar.h \ src/progress_bar.c src/progress_bar.h \ src/status_bar.c src/status_bar.h \ src/screen.c src/screen.h \ src/screen_interface.h \ src/screen_init.c \ src/screen_paint.c \ src/screen_utils.c src/screen_utils.h \ src/screen_status.c src/screen_status.h \ src/screen_list.c src/screen_list.h \ src/screen_find.c src/screen_find.h \ src/screen_client.c src/screen_client.h \ src/screen_queue.c src/screen_queue.h \ src/screen_browser.c src/screen_browser.h \ src/screen_file.c src/screen_file.h \ src/list_window.c src/list_window.h \ src/save_playlist.c src/save_playlist.h \ src/paint.h \ src/song_paint.c src/song_paint.h \ src/colors.c src/colors.h \ src/charset.c src/charset.h \ src/window.h \ src/wreadln.c src/wreadln.h \ src/strfsong.c src/strfsong.h \ src/time_format.c src/time_format.h \ src/utils.c src/utils.h if ENABLE_ASYNC_CONNECT src_ncmpc_SOURCES += \ src/net/types.h \ src/net/socket.c src/net/socket.h \ src/net/resolver.c src/net/resolver.h \ src/net/async_connect.c src/net/async_connect.h \ src/net/async_rconnect.c src/net/async_rconnect.h \ src/aconnect.c src/aconnect.h endif # # Windows resource file # src/win/ncmpc_win32_rc.$(OBJEXT): src/win/ncmpc_win32_rc.rc $(WINDRES) -i $< -o $@ if HAVE_WINDOWS noinst_DATA = src/win/ncmpc_win32_rc.rc src_ncmpc_DEPENDENCIES = src/win/ncmpc_win32_rc.$(OBJEXT) src_ncmpc_LDFLAGS = -Wl,src/win/ncmpc_win32_rc.$(OBJEXT) else src_ncmpc_SOURCES += src/signals.c src/signals.h endif if NCMPC_MINI else src_ncmpc_SOURCES += \ src/db_completion.c src/db_completion.h \ src/xterm_title.c src/xterm_title.h \ src/hscroll.c src/hscroll.h \ src/match.c src/match.h \ src/conf.c src/conf.h endif if ENABLE_HELP_SCREEN src_ncmpc_SOURCES += src/screen_help.c src/screen_help.h endif if ENABLE_ARTIST_SCREEN src_ncmpc_SOURCES += src/screen_artist.c src/screen_artist.h endif if ENABLE_SEARCH_SCREEN src_ncmpc_SOURCES += src/screen_search.c src/screen_search.h endif if ENABLE_SONG_SCREEN src_ncmpc_SOURCES += src/screen_song.c src/screen_song.h endif if ENABLE_KEYDEF_SCREEN src_ncmpc_SOURCES += src/screen_keydef.c src/screen_keydef.h endif if ENABLE_PLUGIN_LIBRARY src_ncmpc_SOURCES += src/plugin.c src/plugin.h endif if ENABLE_SCREEN_TEXT src_ncmpc_SOURCES += src/screen_text.c src/screen_text.h endif if ENABLE_LYRICS_SCREEN src_ncmpc_SOURCES += \ src/screen_lyrics.c src/screen_lyrics.h \ src/lyrics.c src/lyrics.h endif if ENABLE_OUTPUTS_SCREEN src_ncmpc_SOURCES += src/screen_outputs.c src/screen_outputs.h endif if ENABLE_CHAT_SCREEN src_ncmpc_SOURCES += src/screen_chat.c src/screen_chat.h endif if ENABLE_LIRC src_ncmpc_SOURCES += src/lirc.c src/lirc.h endif # build the smallest possible ncmpc binary src/ncmpc-tiny: $(filter-out %.h,$(src_ncmpc_SOURCES)) $(COMPILE) --combine -fwhole-program $(src_ncmpc_LDFLAGS) $(src_ncmpc_LDADD) $(LIBS) $^ -o $@ strip --strip-all $@ CLEANFILES = src/ncmpc-tiny # # test suite # check_PROGRAMS = \ test/run_hscroll test_run_hscroll_SOURCES = test/run_hscroll.c src/hscroll.c src/charset.c test_run_hscroll_CPPFLAGS = -I$(srcdir)/src $(AM_CPPFLAGS) test_run_hscroll_LDADD = $(CURSES_LIBS) $(GLIB_LIBS) # # sparse # SPARSE = sparse SPARSE_FLAGS = -Wdecl -Wdefault-bitfield-sign -Wdo-while -Wenum-mismatch \ -Wnon-pointer-null -Wptr-subtraction-blows -Wreturn-void \ -Wshadow -Wtypesign \ -D__transparent_union__=unused sparse-check: $(SPARSE) -I. -I/usr/lib/gcc/$(shell gcc -dumpmachine)/4.3/include -I/usr/lib/gcc/$(shell gcc -dumpmachine)/4.3/include-fixed $(AM_CPPFLAGS) $(SPARSE_FLAGS) $(src_ncmpc_SOURCES) # # lyrics plugins # lyrics_plugins = lyrics/10-hd.sh lyrics/20-lyricwiki.rb if ENABLE_LYRICS_SCREEN lyricsdir = $(lyrics_plugin_dir) lyrics_SCRIPTS = $(lyrics_plugins) endif # # Documentation # doc_DATA = \ doc/config.sample doc/keys.sample doc/ncmpc.lirc \ AUTHORS NEWS README man_MANS = doc/ncmpc.1 if ENABLE_DOCUMENTATION doc/api/html/index.html: doc/doxygen.conf @mkdir -p $(@D) $(DOXYGEN) $< all-local: doc/api/html/index.html clean-local: rm -rf doc/api # copied from MPD, disabled --jn #--------------------------------------- #install-data-local: doc/api/html/index.html # $(mkinstalldirs) $(DESTDIR)$(docdir)/api/html # $(INSTALL_DATA) -c -m 644 doc/api/html/*.* \ # $(DESTDIR)$(docdir)/api/html # #uninstall-local: # rm -f $(DESTDIR)$(docdir)/api/html/*.* #--------------------------------------- endif # # Distribution # EXTRA_DIST = autogen.sh \ $(lyrics_plugins) \ $(man_MANS) $(doc_DATA) doc/doxygen.conf \ src/win/ncmpc_win32_rc.rc.in ncmpc-0.27/configure0000744000076400001440000114703313063773006011406 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for ncmpc 0.27. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and max@duempel.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ncmpc' PACKAGE_TARNAME='ncmpc' PACKAGE_VERSION='0.27' PACKAGE_STRING='ncmpc 0.27' PACKAGE_BUGREPORT='max@duempel.org' PACKAGE_URL='' ac_unique_file="src/main.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS AM_CFLAGS ENABLE_DOCUMENTATION_FALSE ENABLE_DOCUMENTATION_TRUE DOXYGEN ENABLE_TEST_FALSE ENABLE_TEST_TRUE VERSION_EXTRA VERSION_REVISION VERSION_MINOR VERSION_MAJOR ENABLE_SCREEN_TEXT_FALSE ENABLE_SCREEN_TEXT_TRUE ENABLE_CHAT_SCREEN_FALSE ENABLE_CHAT_SCREEN_TRUE ENABLE_OUTPUTS_SCREEN_FALSE ENABLE_OUTPUTS_SCREEN_TRUE ENABLE_PLUGIN_LIBRARY_FALSE ENABLE_PLUGIN_LIBRARY_TRUE lyrics_plugin_dir ENABLE_LYRICS_SCREEN_FALSE ENABLE_LYRICS_SCREEN_TRUE ENABLE_KEYDEF_SCREEN_FALSE ENABLE_KEYDEF_SCREEN_TRUE ENABLE_SONG_SCREEN_FALSE ENABLE_SONG_SCREEN_TRUE ENABLE_SEARCH_SCREEN_FALSE ENABLE_SEARCH_SCREEN_TRUE ENABLE_ARTIST_SCREEN_FALSE ENABLE_ARTIST_SCREEN_TRUE ENABLE_HELP_SCREEN_FALSE ENABLE_HELP_SCREEN_TRUE ENABLE_LIRC_FALSE ENABLE_LIRC_TRUE LIBLIRCCLIENT_LIBS LIBLIRCCLIENT_CFLAGS ENABLE_ASYNC_CONNECT_FALSE ENABLE_ASYNC_CONNECT_TRUE XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 GMSGFMT_015 MSGFMT_015 GETTEXT_MACRO_VERSION SED GETTEXT_PACKAGE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS EGREP GREP CPP LIBMPDCLIENT_LIBS LIBMPDCLIENT_CFLAGS GLIB_LIBS GLIB_CFLAGS HAVE_WINDOWS_FALSE HAVE_WINDOWS_TRUE WINDRES host_os host_vendor host_cpu host build_os build_vendor build_cpu build NCMPC_MINI_FALSE NCMPC_MINI_TRUE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG CURSES_CFLAGS CURSES_LIBS am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_ncurses with_ncursesw enable_mini enable_multibyte enable_locale enable_nls enable_tcp enable_async_connect enable_colors enable_lirc enable_help_screen enable_mouse enable_artist_screen enable_search_screen enable_song_screen enable_key_screen enable_lyrics_screen with_lyrics_plugin_dir enable_outputs_screen enable_chat_screen enable_werror enable_debug enable_test enable_documentation ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CURSES_LIBS CURSES_CFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GLIB_CFLAGS GLIB_LIBS LIBMPDCLIENT_CFLAGS LIBMPDCLIENT_LIBS CPP LIBLIRCCLIENT_CFLAGS LIBLIRCCLIENT_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures ncmpc 0.27 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ncmpc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of ncmpc 0.27:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-mini Build ncmpc-mini, i.e. without all optional features [default=no] --disable-multibyte Disable multibyte character support [default=yes] --disable-locale Disable locale support [default=auto] --disable-nls do not use Native Language Support --disable-tcp Disable TCP support [default=enabled] --enable-async-connect Disable asynchronous connect [default=yes] --enable-colors Enable color support --enable-lirc Enable LIRC support --enable-help-screen Enable the help screen [default=yes] --enable-mouse Enable curses getmouse support [default=yes] --enable-artist-screen Enable artist screen [default=yes] --enable-search-screen Enable search screen (EXPERIMENTAL) [default=yes] --enable-song-screen Enable song viewer screen [default=yes] --enable-key-screen Enable key editor screen [default=yes] --enable-lyrics-screen Enable lyrics screen [default=no] --enable-outputs-screen Enable outputs screen [default=yes] --enable-chat-screen Enable chat screen [default=no] --enable-werror Treat warnings as errors [default=no] --enable-debug Enable debugging [default=no] --enable-test build the test programs [default=no] --enable-documentation build doxygen documentation [default=no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ncurses force the use of Ncurses or NcursesW --without-ncursesw do not use NcursesW (wide character support) --with-lyrics-plugin-dir=DIRECTORY Directory where lyrics plugins are stored [default=PREFIX/lib/ncmpc/lyrics] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CURSES_LIBS linker library for Curses, e.g. -lcurses CURSES_CFLAGS preprocessor flags for Curses, e.g. -I/usr/include/ncursesw PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config LIBMPDCLIENT_CFLAGS C compiler flags for LIBMPDCLIENT, overriding pkg-config LIBMPDCLIENT_LIBS linker flags for LIBMPDCLIENT, overriding pkg-config CPP C preprocessor LIBLIRCCLIENT_CFLAGS C compiler flags for LIBLIRCCLIENT, overriding pkg-config LIBLIRCCLIENT_LIBS linker flags for LIBLIRCCLIENT, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF ncmpc configure 0.27 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------ ## ## Report this to max@duempel.org ## ## ------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by ncmpc $as_me 0.27, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu VERSION_MAJOR=0 VERSION_MINOR=27 VERSION_REVISION=0 VERSION_EXTRA=0 ac_aux_dir= for ac_dir in build "$srcdir"/build; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build \"$srcdir\"/build" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='ncmpc' VERSION='0.27' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers config.h" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check whether --with-ncurses was given. if test "${with_ncurses+set}" = set; then : withval=$with_ncurses; else with_ncurses=check fi # Check whether --with-ncursesw was given. if test "${with_ncursesw+set}" = set; then : withval=$with_ncursesw; else with_ncursesw=check fi ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS if test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes; then : ax_with_plaincurses=no else ax_with_plaincurses=check fi ax_cv_curses_which=no # Test for NcursesW if test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw via pkg-config" >&5 $as_echo_n "checking for ncursesw via pkg-config... " >&6; } if test -n "$_ax_cv_ncursesw_libs"; then pkg_cv__ax_cv_ncursesw_libs="$_ax_cv_ncursesw_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_libs=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncursesw_cppflags"; then pkg_cv__ax_cv_ncursesw_cppflags="$_ax_cv_ncursesw_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_cppflags=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # No suitable .pc file found, have to find flags via fallback { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw via fallback" >&5 $as_echo_n "checking for ncursesw via fallback... " >&6; } if ${ax_cv_ncursesw+:} false; then : $as_echo_n "(cached) " >&6 else $as_echo pkg_cv__ax_cv_ncursesw_libs="-lncursesw" pkg_cv__ax_cv_ncursesw_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncursesw=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_cv__ax_cv_ncursesw_libs="$pkg_cv__ax_cv_ncursesw_libs -ltinfow" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncursesw=yes else ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncursesw" >&5 $as_echo "$ax_cv_ncursesw" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" ax_cv_ncursesw=yes fi if test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes; then : as_fn_error $? "--with-ncursesw specified but could not find NcursesW library" "$LINENO" 5 fi if test "x$ax_cv_ncursesw" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" $as_echo "#define HAVE_NCURSESW 1" >>confdefs.h $as_echo "#define HAVE_CURSES 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncursesw/curses.h" >&5 $as_echo_n "checking for working ncursesw/curses.h... " >&6; } if ${ax_cv_header_ncursesw_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncursesw_curses_h=yes else ax_cv_header_ncursesw_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_curses_h" >&5 $as_echo "$ax_cv_header_ncursesw_curses_h" >&6; } if test "x$ax_cv_header_ncursesw_curses_h" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSESW_CURSES_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncursesw.h" >&5 $as_echo_n "checking for working ncursesw.h... " >&6; } if ${ax_cv_header_ncursesw_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncursesw_h=yes else ax_cv_header_ncursesw_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_h" >&5 $as_echo "$ax_cv_header_ncursesw_h" >&6; } if test "x$ax_cv_header_ncursesw_h" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSESW_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 $as_echo_n "checking for working ncurses.h... " >&6; } if ${ax_cv_header_ncurses_h_with_ncursesw+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_h_with_ncursesw=yes else ax_cv_header_ncurses_h_with_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h_with_ncursesw" >&5 $as_echo "$ax_cv_header_ncurses_h_with_ncursesw" >&6; } if test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&5 $as_echo "$as_me: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses if test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses via pkg-config" >&5 $as_echo_n "checking for ncurses via pkg-config... " >&6; } if test -n "$_ax_cv_ncurses_libs"; then pkg_cv__ax_cv_ncurses_libs="$_ax_cv_ncurses_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_libs=`$PKG_CONFIG --libs "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncurses_cppflags"; then pkg_cv__ax_cv_ncurses_cppflags="$_ax_cv_ncurses_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_cppflags=`$PKG_CONFIG --cflags "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } # No suitable .pc file found, have to find flags via fallback { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses via fallback" >&5 $as_echo_n "checking for ncurses via fallback... " >&6; } if ${ax_cv_ncurses+:} false; then : $as_echo_n "(cached) " >&6 else $as_echo pkg_cv__ax_cv_ncurses_libs="-lncurses" pkg_cv__ax_cv_ncurses_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for initscr() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncurses=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_cv__ax_cv_ncurses_libs="$pkg_cv__ax_cv_ncurses_libs -ltinfo" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 $as_echo_n "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char nodelay (); int main () { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_ncurses=yes else ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncurses" >&5 $as_echo "$ax_cv_ncurses" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" ax_cv_ncurses=yes fi if test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes; then : as_fn_error $? "--with-ncurses specified but could not find Ncurses library" "$LINENO" 5 fi if test "x$ax_cv_ncurses" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" $as_echo "#define HAVE_NCURSES 1" >>confdefs.h $as_echo "#define HAVE_CURSES 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses/curses.h" >&5 $as_echo_n "checking for working ncurses/curses.h... " >&6; } if ${ax_cv_header_ncurses_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_curses_h=yes else ax_cv_header_ncurses_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_curses_h" >&5 $as_echo "$ax_cv_header_ncurses_curses_h" >&6; } if test "x$ax_cv_header_ncurses_curses_h" = xyes; then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_CURSES_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 $as_echo_n "checking for working ncurses.h... " >&6; } if ${ax_cv_header_ncurses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_ncurses_h=yes else ax_cv_header_ncurses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h" >&5 $as_echo "$ax_cv_header_ncurses_h" >&6; } if test "x$ax_cv_header_ncurses_h" = xyes; then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h $as_echo "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&5 $as_echo "$as_me: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) if test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno; then : if test "x$CURSES_LIBS" != x; then : LIBS="$ax_saved_LIBS $CURSES_LIBS" else LIBS="$ax_saved_LIBS -lcurses" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses library" >&5 $as_echo_n "checking for Curses library... " >&6; } if ${ax_cv_plaincurses+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses=yes else ax_cv_plaincurses=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses" >&5 $as_echo "$ax_cv_plaincurses" >&6; } if test "x$ax_cv_plaincurses" = xyes; then : ax_cv_curses=yes ax_cv_curses_which=plaincurses if test "x$CURSES_LIBS" = x; then : CURSES_LIBS="-lcurses" fi $as_echo "#define HAVE_CURSES 1" >>confdefs.h # Check for base conformance (and header file) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working curses.h" >&5 $as_echo_n "checking for working curses.h... " >&6; } if ${ax_cv_header_curses_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_header_curses_h=yes else ax_cv_header_curses_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_curses_h" >&5 $as_echo "$ax_cv_header_curses_h" >&6; } if test "x$ax_cv_header_curses_h" = xyes; then : $as_echo "#define HAVE_CURSES_H 1" >>confdefs.h # Check for X/Open Enhanced conformance { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X/Open Enhanced Curses conformance" >&5 $as_echo_n "checking for X/Open Enhanced Curses conformance... " >&6; } if ${ax_cv_plaincurses_enhanced+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifndef _XOPEN_CURSES #error "this Curses library is not enhanced" "this Curses library is not enhanced" #endif int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_enhanced=yes else ax_cv_plaincurses_enhanced=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_enhanced" >&5 $as_echo "$ax_cv_plaincurses_enhanced" >&6; } if test "x$ax_cv_plaincurses_enhanced" = xyes; then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes $as_echo "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for color functions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Curses color functions" >&5 $as_echo_n "checking for Curses color functions... " >&6; } if ${ax_cv_plaincurses_color+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_color=yes else ax_cv_plaincurses_color=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_color" >&5 $as_echo "$ax_cv_plaincurses_color" >&6; } if test "x$ax_cv_plaincurses_color" = xyes; then : ax_cv_curses_color=yes $as_echo "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for obsolete functions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for obsolete Curses functions" >&5 $as_echo_n "checking for obsolete Curses functions... " >&6; } if ${ax_cv_plaincurses_obsolete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_plaincurses_obsolete=yes else ax_cv_plaincurses_obsolete=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_obsolete" >&5 $as_echo "$ax_cv_plaincurses_obsolete" >&6; } if test "x$ax_cv_plaincurses_obsolete" = xyes; then : ax_cv_curses_obsolete=yes $as_echo "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h fi fi if test "x$ax_cv_header_curses_h" = xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working curses.h" >&5 $as_echo "$as_me: WARNING: could not find a working curses.h" >&2;} fi fi fi if test "x$ax_cv_curses" != xyes; then : ax_cv_curses=no fi if test "x$ax_cv_curses_enhanced" != xyes; then : ax_cv_curses_enhanced=no fi if test "x$ax_cv_curses_color" != xyes; then : ax_cv_curses_color=no fi if test "x$ax_cv_curses_obsolete" != xyes; then : ax_cv_curses_obsolete=no fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test "x$ax_cv_curses" = xno ; then : as_fn_error $? "No curses support detected." "$LINENO" 5 fi ALL_LINGUAS=`grep -v '^\#' $srcdir/po/LINGUAS` set -- $CFLAGS # Check whether --enable-mini was given. if test "${enable_mini+set}" = set; then : enableval=$enable_mini; else enable_mini=no fi if test x$enable_mini = xyes; then NCMPC_MINI_TRUE= NCMPC_MINI_FALSE='#' else NCMPC_MINI_TRUE='#' NCMPC_MINI_FALSE= fi if test "x$enable_mini" = xyes; then $as_echo "#define NCMPC_MINI 1" >>confdefs.h auto=no disable_mini=no auto_mini=no else auto=auto disable_mini=yes auto_mini=auto fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case "$host_os" in mingw32* | windows*) LIBS="$LIBS -lws2_32" ac_config_files="$ac_config_files src/win/ncmpc_win32_rc.rc" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi HAVE_WINDOWS=1 ;; *) ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" if test "x$ac_cv_func_socket" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 $as_echo_n "checking for socket in -lsocket... " >&6; } if ${ac_cv_lib_socket_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_socket=yes else ac_cv_lib_socket_socket=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 $as_echo "$ac_cv_lib_socket_socket" >&6; } if test "x$ac_cv_lib_socket_socket" = xyes; then : LIBS="$LIBS -lsocket" else as_fn_error $? "No UNIX socket API found" "$LINENO" 5 fi fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : LIBS="$LIBS -lnsl" else as_fn_error $? "No UNIX gethostbyname API found" "$LINENO" 5 fi fi HAVE_WINDOWS=0 esac if test $HAVE_WINDOWS -eq 1; then HAVE_WINDOWS_TRUE= HAVE_WINDOWS_FALSE='#' else HAVE_WINDOWS_TRUE='#' HAVE_WINDOWS_FALSE= fi # Check whether --enable-multibyte was given. if test "${enable_multibyte+set}" = set; then : enableval=$enable_multibyte; else enable_multibyte=$disable_mini fi if test x$enable_multibyte = xyes; then $as_echo "#define ENABLE_MULTIBYTE 1" >>confdefs.h else if test "x$ax_cv_curses_enhanced" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: wide characters without multibyte characters makes little sense" >&5 $as_echo "$as_me: WARNING: wide characters without multibyte characters makes little sense" >&2;} fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.30" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.30" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 as_fn_error $? "glib 2.30 is required" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "glib 2.30 is required" "$LINENO" 5 else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBMPDCLIENT" >&5 $as_echo_n "checking for LIBMPDCLIENT... " >&6; } if test -n "$LIBMPDCLIENT_CFLAGS"; then pkg_cv_LIBMPDCLIENT_CFLAGS="$LIBMPDCLIENT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpdclient >= 2.9\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmpdclient >= 2.9") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBMPDCLIENT_CFLAGS=`$PKG_CONFIG --cflags "libmpdclient >= 2.9" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBMPDCLIENT_LIBS"; then pkg_cv_LIBMPDCLIENT_LIBS="$LIBMPDCLIENT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpdclient >= 2.9\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmpdclient >= 2.9") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBMPDCLIENT_LIBS=`$PKG_CONFIG --libs "libmpdclient >= 2.9" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBMPDCLIENT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmpdclient >= 2.9" 2>&1` else LIBMPDCLIENT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmpdclient >= 2.9" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBMPDCLIENT_PKG_ERRORS" >&5 as_fn_error $? "libmpdclient2 is required" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "libmpdclient2 is required" "$LINENO" 5 else LIBMPDCLIENT_CFLAGS=$pkg_cv_LIBMPDCLIENT_CFLAGS LIBMPDCLIENT_LIBS=$pkg_cv_LIBMPDCLIENT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Check whether --enable-locale was given. if test "${enable_locale+set}" = set; then : enableval=$enable_locale; else enable_locale=$auto_mini fi if test x$enable_locale = xyes; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : else as_fn_error $? "locale.h is unavailable" "$LINENO" 5 fi fi if test x$enable_locale = xauto; then ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : enable_locale=yes else enable_locale=no fi fi if test x$enable_locale = xyes; then $as_echo "#define ENABLE_LOCALE 1" >>confdefs.h fi if test x$enable_mini != xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } else USE_NLS=no fi if test x$USE_NLS = xyes; then for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES GETTEXT_PACKAGE=$PACKAGE cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "${GETTEXT_PACKAGE}" _ACEOF USE_NLS=$gt_cv_have_gettext if test x$USE_NLS != xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: NLS support disabled!" >&5 $as_echo "$as_me: WARNING: NLS support disabled!" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" fi # Check whether --enable-tcp was given. if test "${enable_tcp+set}" = set; then : enableval=$enable_tcp; else enable_tcp=$disable_mini fi if test "x$enable_tcp" = xyes; then $as_echo "#define ENABLE_TCP 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 $as_echo_n "checking for library containing gethostbyname... " >&6; } if ${ac_cv_search_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethostbyname=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethostbyname+:} false; then : break fi done if ${ac_cv_search_gethostbyname+:} false; then : else ac_cv_search_gethostbyname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 $as_echo "$ac_cv_search_gethostbyname" >&6; } ac_res=$ac_cv_search_gethostbyname if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in getaddrinfo do : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETADDRINFO 1 _ACEOF fi done fi # Check whether --enable-async-connect was given. if test "${enable_async_connect+set}" = set; then : enableval=$enable_async_connect; else enable_async_connect=$disable_mini fi if test x$enable_async_connect = xyes; then ENABLE_ASYNC_CONNECT_TRUE= ENABLE_ASYNC_CONNECT_FALSE='#' else ENABLE_ASYNC_CONNECT_TRUE='#' ENABLE_ASYNC_CONNECT_FALSE= fi if test "x$enable_async_connect" = xyes; then $as_echo "#define ENABLE_ASYNC_CONNECT 1" >>confdefs.h fi # Check whether --enable-colors was given. if test "${enable_colors+set}" = set; then : enableval=$enable_colors; else enable_colors=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include color support" >&5 $as_echo_n "checking whether to include color support... " >&6; } if test "x$enable_colors" = xyes || test "x$enable_colors" = xauto ; then : if test "x$disable_mini" = xyes; then : if test "x$ax_cv_curses_color" = xyes ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define ENABLE_COLORS 1" >>confdefs.h else if test "x$enable_colors" = xyes ; then : as_fn_error $? "\"No color support found in curses library\"" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Colors disabled due to mini mode being enabled.\"" >&5 $as_echo "$as_me: WARNING: \"Colors disabled due to mini mode being enabled.\"" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --enable-lirc was given. if test "${enable_lirc+set}" = set; then : enableval=$enable_lirc; else enable_lirc=no fi if test x$enable_lirc = xyes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBLIRCCLIENT" >&5 $as_echo_n "checking for LIBLIRCCLIENT... " >&6; } if test -n "$LIBLIRCCLIENT_CFLAGS"; then pkg_cv_LIBLIRCCLIENT_CFLAGS="$LIBLIRCCLIENT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lirc\""; } >&5 ($PKG_CONFIG --exists --print-errors "lirc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_CFLAGS=`$PKG_CONFIG --cflags "lirc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBLIRCCLIENT_LIBS"; then pkg_cv_LIBLIRCCLIENT_LIBS="$LIBLIRCCLIENT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lirc\""; } >&5 ($PKG_CONFIG --exists --print-errors "lirc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_LIBS=`$PKG_CONFIG --libs "lirc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "lirc" 2>&1` else LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "lirc" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBLIRCCLIENT_PKG_ERRORS" >&5 pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBLIRCCLIENT" >&5 $as_echo_n "checking for LIBLIRCCLIENT... " >&6; } if test -n "$LIBLIRCCLIENT_CFLAGS"; then pkg_cv_LIBLIRCCLIENT_CFLAGS="$LIBLIRCCLIENT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblircclient0\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblircclient0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_CFLAGS=`$PKG_CONFIG --cflags "liblircclient0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBLIRCCLIENT_LIBS"; then pkg_cv_LIBLIRCCLIENT_LIBS="$LIBLIRCCLIENT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblircclient0\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblircclient0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_LIBS=`$PKG_CONFIG --libs "liblircclient0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblircclient0" 2>&1` else LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblircclient0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBLIRCCLIENT_PKG_ERRORS" >&5 as_fn_error $? "lirc not found" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "lirc not found" "$LINENO" 5 else LIBLIRCCLIENT_CFLAGS=$pkg_cv_LIBLIRCCLIENT_CFLAGS LIBLIRCCLIENT_LIBS=$pkg_cv_LIBLIRCCLIENT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBLIRCCLIENT" >&5 $as_echo_n "checking for LIBLIRCCLIENT... " >&6; } if test -n "$LIBLIRCCLIENT_CFLAGS"; then pkg_cv_LIBLIRCCLIENT_CFLAGS="$LIBLIRCCLIENT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblircclient0\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblircclient0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_CFLAGS=`$PKG_CONFIG --cflags "liblircclient0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBLIRCCLIENT_LIBS"; then pkg_cv_LIBLIRCCLIENT_LIBS="$LIBLIRCCLIENT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblircclient0\""; } >&5 ($PKG_CONFIG --exists --print-errors "liblircclient0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBLIRCCLIENT_LIBS=`$PKG_CONFIG --libs "liblircclient0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblircclient0" 2>&1` else LIBLIRCCLIENT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblircclient0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBLIRCCLIENT_PKG_ERRORS" >&5 as_fn_error $? "lirc not found" "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "lirc not found" "$LINENO" 5 else LIBLIRCCLIENT_CFLAGS=$pkg_cv_LIBLIRCCLIENT_CFLAGS LIBLIRCCLIENT_LIBS=$pkg_cv_LIBLIRCCLIENT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi else LIBLIRCCLIENT_CFLAGS=$pkg_cv_LIBLIRCCLIENT_CFLAGS LIBLIRCCLIENT_LIBS=$pkg_cv_LIBLIRCCLIENT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi $as_echo "#define ENABLE_LIRC 1" >>confdefs.h fi if test x$enable_lirc = xyes; then ENABLE_LIRC_TRUE= ENABLE_LIRC_FALSE='#' else ENABLE_LIRC_TRUE='#' ENABLE_LIRC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the help screen" >&5 $as_echo_n "checking whether to include the help screen... " >&6; } # Check whether --enable-help-screen was given. if test "${enable_help_screen+set}" = set; then : enableval=$enable_help_screen; else enable_help_screen=$disable_mini fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_help_screen" >&5 $as_echo "$enable_help_screen" >&6; } if test "x$enable_help_screen" = "xyes" ; then $as_echo "#define ENABLE_HELP_SCREEN 1" >>confdefs.h fi if test x$enable_help_screen = xyes; then ENABLE_HELP_SCREEN_TRUE= ENABLE_HELP_SCREEN_FALSE='#' else ENABLE_HELP_SCREEN_TRUE='#' ENABLE_HELP_SCREEN_FALSE= fi ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $CURSES_CFLAGS" CXXFLAGS="$CXXFLAGS $CURSES_CFLAGS" LIBS="$LIBS $CURSES_LIBS" ac_fn_c_check_func "$LINENO" "getmouse" "ac_cv_func_getmouse" if test "x$ac_cv_func_getmouse" = xyes; then : ax_cv_curses_mouse=yes else ax_cv_curses_mouse=no fi CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" # Check whether --enable-mouse was given. if test "${enable_mouse+set}" = set; then : enableval=$enable_mouse; else enable_mouse=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include mouse support" >&5 $as_echo_n "checking whether to include mouse support... " >&6; } if test "x$enable_mouse" = xyes || test "x$enable_mouse" = xauto ; then : if test "x$disable_mini" = xyes; then : if test "x$ax_cv_curses_mouse" = xyes ; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_GETMOUSE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$enable_mouse" = xyes ; then : as_fn_error $? "\"No mouse support found in curses library\"" "$LINENO" 5 fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Mouse disabled due to mini mode being enabled.\"" >&5 $as_echo "$as_me: WARNING: \"Mouse disabled due to mini mode being enabled.\"" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the artist screen" >&5 $as_echo_n "checking whether to include the artist screen... " >&6; } # Check whether --enable-artist-screen was given. if test "${enable_artist_screen+set}" = set; then : enableval=$enable_artist_screen; else enable_artist_screen=$disable_mini fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_artist_screen" >&5 $as_echo "$enable_artist_screen" >&6; } if test "x$enable_artist_screen" = "xyes" ; then $as_echo "#define ENABLE_ARTIST_SCREEN 1" >>confdefs.h fi if test x$enable_artist_screen = xyes; then ENABLE_ARTIST_SCREEN_TRUE= ENABLE_ARTIST_SCREEN_FALSE='#' else ENABLE_ARTIST_SCREEN_TRUE='#' ENABLE_ARTIST_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the search screen" >&5 $as_echo_n "checking whether to include the search screen... " >&6; } # Check whether --enable-search-screen was given. if test "${enable_search_screen+set}" = set; then : enableval=$enable_search_screen; else enable_search_screen=$disable_mini fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_search_screen" >&5 $as_echo "$enable_search_screen" >&6; } if test "x$enable_search_screen" = "xyes" ; then $as_echo "#define ENABLE_SEARCH_SCREEN 1" >>confdefs.h fi if test x$enable_search_screen = xyes; then ENABLE_SEARCH_SCREEN_TRUE= ENABLE_SEARCH_SCREEN_FALSE='#' else ENABLE_SEARCH_SCREEN_TRUE='#' ENABLE_SEARCH_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the song viewer screen" >&5 $as_echo_n "checking whether to include the song viewer screen... " >&6; } # Check whether --enable-song-screen was given. if test "${enable_song_screen+set}" = set; then : enableval=$enable_song_screen; else enable_song_screen=$disable_mini fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_song_screen" >&5 $as_echo "$enable_song_screen" >&6; } if test "x$enable_song_screen" = "xyes" ; then $as_echo "#define ENABLE_SONG_SCREEN 1" >>confdefs.h fi if test x$enable_song_screen = xyes; then ENABLE_SONG_SCREEN_TRUE= ENABLE_SONG_SCREEN_FALSE='#' else ENABLE_SONG_SCREEN_TRUE='#' ENABLE_SONG_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the key editor screen" >&5 $as_echo_n "checking whether to include the key editor screen... " >&6; } # Check whether --enable-key-screen was given. if test "${enable_key_screen+set}" = set; then : enableval=$enable_key_screen; else enable_key_screen=$disable_mini fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_key_screen" >&5 $as_echo "$enable_key_screen" >&6; } if test "x$enable_key_screen" = "xyes" ; then $as_echo "#define ENABLE_KEYDEF_SCREEN 1" >>confdefs.h fi if test x$enable_key_screen = xyes; then ENABLE_KEYDEF_SCREEN_TRUE= ENABLE_KEYDEF_SCREEN_FALSE='#' else ENABLE_KEYDEF_SCREEN_TRUE='#' ENABLE_KEYDEF_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the lyrics screen" >&5 $as_echo_n "checking whether to include the lyrics screen... " >&6; } # Check whether --enable-lyrics-screen was given. if test "${enable_lyrics_screen+set}" = set; then : enableval=$enable_lyrics_screen; else enable_lyrics_screen=no fi case "$host_os" in mingw32* | windows*) if test "x$enable_lyrics_screen" = xyes ; then : as_fn_error $? "Lyrics screen is not yet compatible with windows." "$LINENO" 5 fi esac if test "x$enable_lyrics_screen" = "xyes" ; then $as_echo "#define ENABLE_LYRICS_SCREEN 1" >>confdefs.h fi if test x$enable_lyrics_screen = xyes; then ENABLE_LYRICS_SCREEN_TRUE= ENABLE_LYRICS_SCREEN_FALSE='#' else ENABLE_LYRICS_SCREEN_TRUE='#' ENABLE_LYRICS_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lyrics_screen" >&5 $as_echo "$enable_lyrics_screen" >&6; } # Check whether --with-lyrics-plugin-dir was given. if test "${with_lyrics_plugin_dir+set}" = set; then : withval=$with_lyrics_plugin_dir; lyrics_plugin_dir=$withval else lyrics_plugin_dir="" fi if test "x${lyrics_plugin_dir}" = "x"; then if test "x${prefix}" = "xNONE"; then lyrics_plugin_dir="${ac_default_prefix}/lib/ncmpc/lyrics" else lyrics_plugin_dir="${prefix}/lib/ncmpc/lyrics" fi fi cat >>confdefs.h <<_ACEOF #define LYRICS_PLUGIN_DIR "$lyrics_plugin_dir" _ACEOF if test x$enable_lyrics_screen = xyes; then ENABLE_PLUGIN_LIBRARY_TRUE= ENABLE_PLUGIN_LIBRARY_FALSE='#' else ENABLE_PLUGIN_LIBRARY_TRUE='#' ENABLE_PLUGIN_LIBRARY_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the outputs screen" >&5 $as_echo_n "checking whether to include the outputs screen... " >&6; } # Check whether --enable-outputs-screen was given. if test "${enable_outputs_screen+set}" = set; then : enableval=$enable_outputs_screen; else enable_outputs_screen=$disable_mini fi if test "x$enable_outputs_screen" = "xyes" ; then $as_echo "#define ENABLE_OUTPUTS_SCREEN 1" >>confdefs.h fi if test x$enable_outputs_screen = xyes; then ENABLE_OUTPUTS_SCREEN_TRUE= ENABLE_OUTPUTS_SCREEN_FALSE='#' else ENABLE_OUTPUTS_SCREEN_TRUE='#' ENABLE_OUTPUTS_SCREEN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_outputs_screen" >&5 $as_echo "$enable_outputs_screen" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include the chat screen" >&5 $as_echo_n "checking whether to include the chat screen... " >&6; } # Check whether --enable-chat-screen was given. if test "${enable_chat_screen+set}" = set; then : enableval=$enable_chat_screen; else enable_chat_screen=no fi if test "x$enable_chat_screen" = "xauto"; then enable_chat_screen=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_chat_screen" >&5 $as_echo "$enable_chat_screen" >&6; } if test "x$enable_chat_screen" = "xyes" ; then $as_echo "#define ENABLE_CHAT_SCREEN 1" >>confdefs.h fi if test x$enable_chat_screen = xyes; then ENABLE_CHAT_SCREEN_TRUE= ENABLE_CHAT_SCREEN_FALSE='#' else ENABLE_CHAT_SCREEN_TRUE='#' ENABLE_CHAT_SCREEN_FALSE= fi if test x$enable_lyrics_screen = xyes -o x$enable_chat_screen = xyes; then ENABLE_SCREEN_TEXT_TRUE= ENABLE_SCREEN_TEXT_FALSE='#' else ENABLE_SCREEN_TEXT_TRUE='#' ENABLE_SCREEN_TEXT_FALSE= fi # Check whether --enable-werror was given. if test "${enable_werror+set}" = set; then : enableval=$enable_werror; else enable_werror=no fi if test "x$enable_werror" = xyes; then for flag in -Werror; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; else enable_debug=no fi if test "x$enable_debug" = xno; then AM_CFLAGS="$AM_CFLAGS -DNDEBUG" for flag in -ffunction-sections; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -fdata-sections; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wl,--gc-sections; do as_CACHEVAR=`$as_echo "ax_cv_check_ldflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts $flag" >&5 $as_echo_n "checking whether the linker accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$LDFLAGS LDFLAGS="$LDFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${LDFLAGS+:} false; then : case " $LDFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : LDFLAGS already contains \$flag"; } >&5 (: LDFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append LDFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : LDFLAGS=\"\$LDFLAGS\""; } >&5 (: LDFLAGS="$LDFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else LDFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : LDFLAGS=\"\$LDFLAGS\""; } >&5 (: LDFLAGS="$LDFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done fi # Check whether --enable-test was given. if test "${enable_test+set}" = set; then : enableval=$enable_test; else enable_test=$enable_debug fi if test "x$enable_test" = xyes; then ENABLE_TEST_TRUE= ENABLE_TEST_FALSE='#' else ENABLE_TEST_TRUE='#' ENABLE_TEST_FALSE= fi # Check whether --enable-documentation was given. if test "${enable_documentation+set}" = set; then : enableval=$enable_documentation; else enable_documentation=no fi if test x$enable_documentation = xyes; then # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOXYGEN+:} false; then : $as_echo_n "(cached) " >&6 else case $DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DOXYGEN=$ac_cv_path_DOXYGEN if test -n "$DOXYGEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5 $as_echo "$DOXYGEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$DOXYGEN = x; then as_fn_error $? "doxygen not found" "$LINENO" 5 fi fi if test x$enable_documentation = xyes; then ENABLE_DOCUMENTATION_TRUE= ENABLE_DOCUMENTATION_FALSE='#' else ENABLE_DOCUMENTATION_TRUE='#' ENABLE_DOCUMENTATION_FALSE= fi for flag in -fvisibility=hidden; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -ffast-math; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -ftree-vectorize; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wall; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wextra; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wno-deprecated-declarations; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wmissing-prototypes; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wshadow; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wpointer-arith; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wstrict-prototypes; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wcast-qual; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done for flag in -Wwrite-strings; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done ac_config_files="$ac_config_files Makefile po/Makefile.in po/Makefile" ac_config_files="$ac_config_files doc/doxygen.conf" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NCMPC_MINI_TRUE}" && test -z "${NCMPC_MINI_FALSE}"; then as_fn_error $? "conditional \"NCMPC_MINI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_WINDOWS_TRUE}" && test -z "${HAVE_WINDOWS_FALSE}"; then as_fn_error $? "conditional \"HAVE_WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_ASYNC_CONNECT_TRUE}" && test -z "${ENABLE_ASYNC_CONNECT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ASYNC_CONNECT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_LIRC_TRUE}" && test -z "${ENABLE_LIRC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_LIRC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_HELP_SCREEN_TRUE}" && test -z "${ENABLE_HELP_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_HELP_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_ARTIST_SCREEN_TRUE}" && test -z "${ENABLE_ARTIST_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_ARTIST_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SEARCH_SCREEN_TRUE}" && test -z "${ENABLE_SEARCH_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SEARCH_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SONG_SCREEN_TRUE}" && test -z "${ENABLE_SONG_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SONG_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_KEYDEF_SCREEN_TRUE}" && test -z "${ENABLE_KEYDEF_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_KEYDEF_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_LYRICS_SCREEN_TRUE}" && test -z "${ENABLE_LYRICS_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_LYRICS_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PLUGIN_LIBRARY_TRUE}" && test -z "${ENABLE_PLUGIN_LIBRARY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PLUGIN_LIBRARY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_OUTPUTS_SCREEN_TRUE}" && test -z "${ENABLE_OUTPUTS_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_OUTPUTS_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CHAT_SCREEN_TRUE}" && test -z "${ENABLE_CHAT_SCREEN_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CHAT_SCREEN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SCREEN_TEXT_TRUE}" && test -z "${ENABLE_SCREEN_TEXT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SCREEN_TEXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_TEST_TRUE}" && test -z "${ENABLE_TEST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TEST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DOCUMENTATION_TRUE}" && test -z "${ENABLE_DOCUMENTATION_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DOCUMENTATION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by ncmpc $as_me 0.27, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ ncmpc config.status 0.27 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/win/ncmpc_win32_rc.rc") CONFIG_FILES="$CONFIG_FILES src/win/ncmpc_win32_rc.rc" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; "doc/doxygen.conf") CONFIG_FILES="$CONFIG_FILES doc/doxygen.conf" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ncmpc-0.27/configure.ac0000644000076400001440000003125713063772064011771 00000000000000AC_PREREQ(2.60) AC_INIT(ncmpc, 0.27, max@duempel.org) VERSION_MAJOR=0 VERSION_MINOR=27 VERSION_REVISION=0 VERSION_EXTRA=0 AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_AUX_DIR(build) AM_INIT_AUTOMAKE([foreign 1.11 dist-xz subdir-objects]) AM_SILENT_RULES AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) dnl Check for programs AC_PROG_CC_C99 AC_PROG_INSTALL AX_WITH_CURSES AS_IF([ test "x$ax_cv_curses" = xno ], [AC_MSG_ERROR([No curses support detected.]) ]) dnl ======================================================= dnl initialize variables dnl ======================================================= dnl i18n ALL_LINGUAS=`grep -v '^\#' $srcdir/po/LINGUAS` set -- $CFLAGS dnl dnl ncmpc-mini dnl AC_ARG_ENABLE(mini, AS_HELP_STRING([--enable-mini], [Build ncmpc-mini, i.e. without all optional features @<:@default=no@:>@]),, [enable_mini=no]) AM_CONDITIONAL(NCMPC_MINI, test x$enable_mini = xyes) if test "x$enable_mini" = xyes; then AC_DEFINE([NCMPC_MINI], [1], [Build ncmpc-mini, which disables lots of features]) auto=no disable_mini=no auto_mini=no else auto=auto disable_mini=yes auto_mini=auto fi AC_CANONICAL_HOST case "$host_os" in mingw32* | windows*) LIBS="$LIBS -lws2_32" AC_CONFIG_FILES([ src/win/ncmpc_win32_rc.rc ]) AC_CHECK_TOOL(WINDRES, windres) HAVE_WINDOWS=1 ;; *) AC_CHECK_FUNC([socket], [], [AC_CHECK_LIB([socket],[socket],[LIBS="$LIBS -lsocket"], [AC_MSG_ERROR(No UNIX socket API found)]) ]) AC_CHECK_FUNC([gethostbyname], [], [AC_CHECK_LIB([nsl],[gethostbyname],[LIBS="$LIBS -lnsl"], [AC_MSG_ERROR(No UNIX gethostbyname API found)]) ]) HAVE_WINDOWS=0 esac AM_CONDITIONAL([HAVE_WINDOWS], [test $HAVE_WINDOWS -eq 1]) dnl multi-byte character support AC_ARG_ENABLE([multibyte], AS_HELP_STRING([--disable-multibyte], [Disable multibyte character support @<:@default=yes@:>@]),, [enable_multibyte=$disable_mini]) if test x$enable_multibyte = xyes; then AC_DEFINE([ENABLE_MULTIBYTE], [1], [Enable multibyte character support]) else if test "x$ax_cv_curses_enhanced" = xyes; then AC_MSG_WARN(wide characters without multibyte characters makes little sense) fi fi dnl Check for GLib PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.30],, [AC_MSG_ERROR([glib 2.30 is required])]) dnl Check for libmpdclient 2.9 PKG_CHECK_MODULES([LIBMPDCLIENT], [libmpdclient >= 2.9],, [AC_MSG_ERROR([libmpdclient2 is required])]) dnl i18n AC_ARG_ENABLE([locale], AS_HELP_STRING([--disable-locale], [Disable locale support @<:@default=auto@:>@]),, [enable_locale=$auto_mini]) if test x$enable_locale = xyes; then AC_CHECK_HEADER([locale.h],, [AC_MSG_ERROR(locale.h is unavailable)]) fi if test x$enable_locale = xauto; then AC_CHECK_HEADER([locale.h], [enable_locale=yes], [enable_locale=no]) fi if test x$enable_locale = xyes; then AC_DEFINE([ENABLE_LOCALE], [1], [Locale support is enabled]) fi if test x$enable_mini != xyes; then AM_NLS else USE_NLS=no fi if test x$USE_NLS = xyes; then AM_GLIB_GNU_GETTEXT GETTEXT_PACKAGE=$PACKAGE AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["${GETTEXT_PACKAGE}"], [gettext domain]) USE_NLS=$gt_cv_have_gettext if test x$USE_NLS != xyes; then AC_MSG_WARN([NLS support disabled!]) fi else AM_PO_SUBDIRS fi dnl Networking AC_ARG_ENABLE(tcp, AS_HELP_STRING([--disable-tcp], [Disable TCP support @<:@default=enabled@:>@]),, [enable_tcp=$disable_mini]) if test "x$enable_tcp" = xyes; then AC_DEFINE([ENABLE_TCP], 1, [Define to enable TCP support]) AC_SEARCH_LIBS([gethostbyname], [nsl]) AC_CHECK_FUNCS([getaddrinfo]) fi AC_ARG_ENABLE([async-connect], AS_HELP_STRING([--enable-async-connect], [Disable asynchronous connect @<:@default=yes@:>@]),, [enable_async_connect=$disable_mini]) AM_CONDITIONAL(ENABLE_ASYNC_CONNECT, test x$enable_async_connect = xyes) if test "x$enable_async_connect" = xyes; then AC_DEFINE([ENABLE_ASYNC_CONNECT], [1], [Enable asynchronous connect?]) fi dnl enable colors AC_ARG_ENABLE([colors], AS_HELP_STRING([--enable-colors], [Enable color support]),, [enable_colors=auto]) AC_MSG_CHECKING([whether to include color support]) AS_IF([ test "x$enable_colors" = xyes || test "x$enable_colors" = xauto ], [AS_IF([ test "x$disable_mini" = xyes], [AS_IF([ test "x$ax_cv_curses_color" = xyes ], [AC_MSG_RESULT([yes]) AC_DEFINE([ENABLE_COLORS], [1], [Enable color support])], [AS_IF([ test "x$enable_colors" = xyes ], AC_MSG_ERROR(["No color support found in curses library"]) AC_MSG_RESULT([no]), AC_MSG_RESULT([no]) ) ]) ], [AC_MSG_RESULT([no]) AC_MSG_WARN(["Colors disabled due to mini mode being enabled."])] )], [AC_MSG_RESULT([no])]) dnl test for LIRC support AC_ARG_ENABLE([lirc], AS_HELP_STRING([--enable-lirc], [Enable LIRC support]),, [enable_lirc=no]) if test x$enable_lirc = xyes; then PKG_CHECK_MODULES([LIBLIRCCLIENT], [lirc],, [PKG_CHECK_MODULES([LIBLIRCCLIENT], [liblircclient0],, [AC_MSG_ERROR([lirc not found])] )] ) AC_DEFINE([ENABLE_LIRC], [1], [Enable LIRC support]) fi AM_CONDITIONAL(ENABLE_LIRC, test x$enable_lirc = xyes) dnl Optional screen - help screen AC_MSG_CHECKING([whether to include the help screen]) AC_ARG_ENABLE([help-screen], AS_HELP_STRING([--enable-help-screen], [Enable the help screen @<:@default=yes@:>@]),, [enable_help_screen=$disable_mini]) AC_MSG_RESULT([$enable_help_screen]) if test "x$enable_help_screen" = "xyes" ; then AC_DEFINE(ENABLE_HELP_SCREEN, 1, [Enable the help screen]) fi AM_CONDITIONAL(ENABLE_HELP_SCREEN, test x$enable_help_screen = xyes) dnl Optional - curses getmouse support MPD_WITH_LIBRARY([CURSES], [AC_CHECK_FUNC([getmouse], [ax_cv_curses_mouse=yes], [ax_cv_curses_mouse=no])]) AC_ARG_ENABLE([mouse], AS_HELP_STRING([--enable-mouse], [Enable curses getmouse support @<:@default=yes@:>@]),, [enable_mouse=auto]) AC_MSG_CHECKING([whether to include mouse support]) AS_IF([ test "x$enable_mouse" = xyes || test "x$enable_mouse" = xauto ], [AS_IF([ test "x$disable_mini" = xyes], [AS_IF([ test "x$ax_cv_curses_mouse" = xyes ], [AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_GETMOUSE], [1], [Enable mouse support])], [AC_MSG_RESULT([no]) AS_IF([ test "x$enable_mouse" = xyes ], [AC_MSG_ERROR(["No mouse support found in curses library"]) ]) ]) ], [AC_MSG_RESULT([no]) AC_MSG_WARN("Mouse disabled due to mini mode being enabled.")] )], [AC_MSG_RESULT([no])]) dnl Optional screen - artist AC_MSG_CHECKING([whether to include the artist screen]) AC_ARG_ENABLE([artist-screen], AS_HELP_STRING([--enable-artist-screen], [Enable artist screen @<:@default=yes@:>@]),, [enable_artist_screen=$disable_mini]) AC_MSG_RESULT([$enable_artist_screen]) if test "x$enable_artist_screen" = "xyes" ; then AC_DEFINE(ENABLE_ARTIST_SCREEN, 1, [Enable artist screen]) fi AM_CONDITIONAL(ENABLE_ARTIST_SCREEN, test x$enable_artist_screen = xyes) dnl Optional screen - search AC_MSG_CHECKING([whether to include the search screen]) AC_ARG_ENABLE([search-screen], AS_HELP_STRING([--enable-search-screen], [Enable search screen (EXPERIMENTAL) @<:@default=yes@:>@]),, [enable_search_screen=$disable_mini]) AC_MSG_RESULT([$enable_search_screen]) if test "x$enable_search_screen" = "xyes" ; then AC_DEFINE(ENABLE_SEARCH_SCREEN, 1, [Enable search screen]) fi AM_CONDITIONAL(ENABLE_SEARCH_SCREEN, test x$enable_search_screen = xyes) dnl Optional screen - song viewer AC_MSG_CHECKING([whether to include the song viewer screen]) AC_ARG_ENABLE([song-screen], AS_HELP_STRING([--enable-song-screen], [Enable song viewer screen @<:@default=yes@:>@]),, [enable_song_screen=$disable_mini]) AC_MSG_RESULT([$enable_song_screen]) if test "x$enable_song_screen" = "xyes" ; then AC_DEFINE(ENABLE_SONG_SCREEN, 1, [Enable song viewer screen]) fi AM_CONDITIONAL(ENABLE_SONG_SCREEN, test x$enable_song_screen = xyes) dnl Optional screen - key editor AC_MSG_CHECKING([whether to include the key editor screen]) AC_ARG_ENABLE([key-screen], AS_HELP_STRING([--enable-key-screen], [Enable key editor screen @<:@default=yes@:>@]),, [enable_key_screen=$disable_mini]) AC_MSG_RESULT([$enable_key_screen]) if test "x$enable_key_screen" = "xyes" ; then AC_DEFINE(ENABLE_KEYDEF_SCREEN, 1, [Enable key editor screen]) fi AM_CONDITIONAL(ENABLE_KEYDEF_SCREEN, test x$enable_key_screen = xyes) dnl Optional screen - lyrics AC_MSG_CHECKING([whether to include the lyrics screen]) AC_ARG_ENABLE([lyrics-screen], AS_HELP_STRING([--enable-lyrics-screen], [Enable lyrics screen @<:@default=no@:>@]),, [enable_lyrics_screen=no]) case "$host_os" in mingw32* | windows*) AS_IF([ test "x$enable_lyrics_screen" = xyes ], [AC_MSG_ERROR([Lyrics screen is not yet compatible with windows.]) ]) esac if test "x$enable_lyrics_screen" = "xyes" ; then AC_DEFINE(ENABLE_LYRICS_SCREEN, 1, [Enable lyrics screen]) fi AM_CONDITIONAL(ENABLE_LYRICS_SCREEN, test x$enable_lyrics_screen = xyes) AC_MSG_RESULT([$enable_lyrics_screen]) AC_ARG_WITH([lyrics-plugin-dir], AS_HELP_STRING([[--with-lyrics-plugin-dir[=DIRECTORY]]], [Directory where lyrics plugins are stored @<:@default=PREFIX/lib/ncmpc/lyrics@:>@]), [lyrics_plugin_dir=$withval], [lyrics_plugin_dir=""]) if test "x${lyrics_plugin_dir}" = "x"; then if test "x${prefix}" = "xNONE"; then lyrics_plugin_dir="${ac_default_prefix}/lib/ncmpc/lyrics" else lyrics_plugin_dir="${prefix}/lib/ncmpc/lyrics" fi fi AC_DEFINE_UNQUOTED([LYRICS_PLUGIN_DIR], ["$lyrics_plugin_dir"], [Directory to search for lyrics plugins]) AC_SUBST(lyrics_plugin_dir) AM_CONDITIONAL(ENABLE_PLUGIN_LIBRARY, test x$enable_lyrics_screen = xyes) dnl Optional screen - outputs AC_MSG_CHECKING([whether to include the outputs screen]) AC_ARG_ENABLE([outputs-screen], AS_HELP_STRING([--enable-outputs-screen], [Enable outputs screen @<:@default=yes@:>@]),, [enable_outputs_screen=$disable_mini]) if test "x$enable_outputs_screen" = "xyes" ; then AC_DEFINE(ENABLE_OUTPUTS_SCREEN, 1, [Enable outputs screen]) fi AM_CONDITIONAL(ENABLE_OUTPUTS_SCREEN, test x$enable_outputs_screen = xyes) AC_MSG_RESULT([$enable_outputs_screen]) dnl Optional screen - client-to-client chat AC_MSG_CHECKING([whether to include the chat screen]) AC_ARG_ENABLE([chat-screen], AC_HELP_STRING([--enable-chat-screen], [Enable chat screen @<:@default=no@:>@]),, [enable_chat_screen=no]) if test "x$enable_chat_screen" = "xauto"; then enable_chat_screen=yes fi AC_MSG_RESULT([$enable_chat_screen]) if test "x$enable_chat_screen" = "xyes" ; then AC_DEFINE(ENABLE_CHAT_SCREEN, 1, [Enable chat screen]) fi AM_CONDITIONAL(ENABLE_CHAT_SCREEN, test x$enable_chat_screen = xyes) AM_CONDITIONAL(ENABLE_SCREEN_TEXT, test x$enable_lyrics_screen = xyes -o x$enable_chat_screen = xyes) dnl dnl Windows OS Resource File dnl AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_REVISION) AC_SUBST(VERSION_EXTRA) dnl dnl build options dnl AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], [Treat warnings as errors @<:@default=no@:>@]),, enable_werror=no) if test "x$enable_werror" = xyes; then AX_APPEND_COMPILE_FLAGS([-Werror]) fi AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging @<:@default=no@:>@]),, enable_debug=no) if test "x$enable_debug" = xno; then AM_CFLAGS="$AM_CFLAGS -DNDEBUG" AX_APPEND_COMPILE_FLAGS([-ffunction-sections]) AX_APPEND_COMPILE_FLAGS([-fdata-sections]) AX_APPEND_LINK_FLAGS([-Wl,--gc-sections]) fi AC_ARG_ENABLE(test, AS_HELP_STRING([--enable-test], [build the test programs @<:@default=no@:>@]),, enable_test=$enable_debug) AM_CONDITIONAL(ENABLE_TEST, test "x$enable_test" = xyes) dnl dnl autogenerated documentation dnl AC_ARG_ENABLE(documentation, AS_HELP_STRING([--enable-documentation], [build doxygen documentation @<:@default=no@:>@]),, enable_documentation=no) if test x$enable_documentation = xyes; then AC_PATH_PROG(DOXYGEN, doxygen) if test x$DOXYGEN = x; then AC_MSG_ERROR([doxygen not found]) fi AC_SUBST(DOXYGEN) fi AM_CONDITIONAL(ENABLE_DOCUMENTATION, test x$enable_documentation = xyes) dnl dnl CFLAGS dnl AC_SUBST(AM_CFLAGS) AX_APPEND_COMPILE_FLAGS([-fvisibility=hidden]) AX_APPEND_COMPILE_FLAGS([-ffast-math]) AX_APPEND_COMPILE_FLAGS([-ftree-vectorize]) AX_APPEND_COMPILE_FLAGS([-Wall]) AX_APPEND_COMPILE_FLAGS([-Wextra]) AX_APPEND_COMPILE_FLAGS([-Wno-deprecated-declarations]) AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes]) AX_APPEND_COMPILE_FLAGS([-Wshadow]) AX_APPEND_COMPILE_FLAGS([-Wpointer-arith]) AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes]) AX_APPEND_COMPILE_FLAGS([-Wcast-qual]) AX_APPEND_COMPILE_FLAGS([-Wwrite-strings]) dnl dnl Generate output files dnl AC_CONFIG_FILES([Makefile po/Makefile.in po/Makefile]) AC_OUTPUT(doc/doxygen.conf) ncmpc-0.27/aclocal.m40000644000076400001440000012313013063773006011330 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_append_compile_flags.m4]) m4_include([m4/ax_append_flag.m4]) m4_include([m4/ax_append_link_flags.m4]) m4_include([m4/ax_check_compile_flag.m4]) m4_include([m4/ax_check_link_flag.m4]) m4_include([m4/ax_require_defined.m4]) m4_include([m4/ax_with_curses.m4]) m4_include([m4/glib-gettext.m4]) m4_include([m4/mpd_with_flags.m4]) m4_include([m4/nls.m4]) m4_include([m4/pkg.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) ncmpc-0.27/Makefile.in0000644000076400001440000017754113064317146011554 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = src/ncmpc$(EXEEXT) @ENABLE_ASYNC_CONNECT_TRUE@am__append_1 = \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/types.h \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/socket.c src/net/socket.h \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/resolver.c src/net/resolver.h \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/async_connect.c src/net/async_connect.h \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/async_rconnect.c src/net/async_rconnect.h \ @ENABLE_ASYNC_CONNECT_TRUE@ src/aconnect.c src/aconnect.h @HAVE_WINDOWS_FALSE@src_ncmpc_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @HAVE_WINDOWS_FALSE@ $(am__DEPENDENCIES_1) \ @HAVE_WINDOWS_FALSE@ $(am__DEPENDENCIES_1) \ @HAVE_WINDOWS_FALSE@ $(am__DEPENDENCIES_1) @HAVE_WINDOWS_FALSE@am__append_2 = src/signals.c src/signals.h @NCMPC_MINI_FALSE@am__append_3 = \ @NCMPC_MINI_FALSE@ src/db_completion.c src/db_completion.h \ @NCMPC_MINI_FALSE@ src/xterm_title.c src/xterm_title.h \ @NCMPC_MINI_FALSE@ src/hscroll.c src/hscroll.h \ @NCMPC_MINI_FALSE@ src/match.c src/match.h \ @NCMPC_MINI_FALSE@ src/conf.c src/conf.h @ENABLE_HELP_SCREEN_TRUE@am__append_4 = src/screen_help.c src/screen_help.h @ENABLE_ARTIST_SCREEN_TRUE@am__append_5 = src/screen_artist.c src/screen_artist.h @ENABLE_SEARCH_SCREEN_TRUE@am__append_6 = src/screen_search.c src/screen_search.h @ENABLE_SONG_SCREEN_TRUE@am__append_7 = src/screen_song.c src/screen_song.h @ENABLE_KEYDEF_SCREEN_TRUE@am__append_8 = src/screen_keydef.c src/screen_keydef.h @ENABLE_PLUGIN_LIBRARY_TRUE@am__append_9 = src/plugin.c src/plugin.h @ENABLE_SCREEN_TEXT_TRUE@am__append_10 = src/screen_text.c src/screen_text.h @ENABLE_LYRICS_SCREEN_TRUE@am__append_11 = \ @ENABLE_LYRICS_SCREEN_TRUE@ src/screen_lyrics.c src/screen_lyrics.h \ @ENABLE_LYRICS_SCREEN_TRUE@ src/lyrics.c src/lyrics.h @ENABLE_OUTPUTS_SCREEN_TRUE@am__append_12 = src/screen_outputs.c src/screen_outputs.h @ENABLE_CHAT_SCREEN_TRUE@am__append_13 = src/screen_chat.c src/screen_chat.h @ENABLE_LIRC_TRUE@am__append_14 = src/lirc.c src/lirc.h check_PROGRAMS = test/run_hscroll$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_append_link_flags.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_check_link_flag.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/ax_with_curses.m4 \ $(top_srcdir)/m4/glib-gettext.m4 \ $(top_srcdir)/m4/mpd_with_flags.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = src/win/ncmpc_win32_rc.rc doc/doxygen.conf CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(lyricsdir)" \ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" PROGRAMS = $(bin_PROGRAMS) am__src_ncmpc_SOURCES_DIST = src/Compiler.h src/ncmpc.h src/defaults.h \ src/ncmpc_curses.h src/i18n.h src/main.c src/gidle.c \ src/gidle.h src/mpdclient.c src/mpdclient.h src/callbacks.c \ src/callbacks.h src/playlist.c src/playlist.h src/filelist.c \ src/filelist.h src/options.c src/options.h src/command.c \ src/command.h src/keyboard.c src/keyboard.h src/ncfix.h \ src/ncu.c src/ncu.h src/player_command.c src/player_command.h \ src/title_bar.c src/title_bar.h src/progress_bar.c \ src/progress_bar.h src/status_bar.c src/status_bar.h \ src/screen.c src/screen.h src/screen_interface.h \ src/screen_init.c src/screen_paint.c src/screen_utils.c \ src/screen_utils.h src/screen_status.c src/screen_status.h \ src/screen_list.c src/screen_list.h src/screen_find.c \ src/screen_find.h src/screen_client.c src/screen_client.h \ src/screen_queue.c src/screen_queue.h src/screen_browser.c \ src/screen_browser.h src/screen_file.c src/screen_file.h \ src/list_window.c src/list_window.h src/save_playlist.c \ src/save_playlist.h src/paint.h src/song_paint.c \ src/song_paint.h src/colors.c src/colors.h src/charset.c \ src/charset.h src/window.h src/wreadln.c src/wreadln.h \ src/strfsong.c src/strfsong.h src/time_format.c \ src/time_format.h src/utils.c src/utils.h src/net/types.h \ src/net/socket.c src/net/socket.h src/net/resolver.c \ src/net/resolver.h src/net/async_connect.c \ src/net/async_connect.h src/net/async_rconnect.c \ src/net/async_rconnect.h src/aconnect.c src/aconnect.h \ src/signals.c src/signals.h src/db_completion.c \ src/db_completion.h src/xterm_title.c src/xterm_title.h \ src/hscroll.c src/hscroll.h src/match.c src/match.h src/conf.c \ src/conf.h src/screen_help.c src/screen_help.h \ src/screen_artist.c src/screen_artist.h src/screen_search.c \ src/screen_search.h src/screen_song.c src/screen_song.h \ src/screen_keydef.c src/screen_keydef.h src/plugin.c \ src/plugin.h src/screen_text.c src/screen_text.h \ src/screen_lyrics.c src/screen_lyrics.h src/lyrics.c \ src/lyrics.h src/screen_outputs.c src/screen_outputs.h \ src/screen_chat.c src/screen_chat.h src/lirc.c src/lirc.h am__dirstamp = $(am__leading_dot)dirstamp @ENABLE_ASYNC_CONNECT_TRUE@am__objects_1 = src/net/socket.$(OBJEXT) \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/resolver.$(OBJEXT) \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/async_connect.$(OBJEXT) \ @ENABLE_ASYNC_CONNECT_TRUE@ src/net/async_rconnect.$(OBJEXT) \ @ENABLE_ASYNC_CONNECT_TRUE@ src/aconnect.$(OBJEXT) @HAVE_WINDOWS_FALSE@am__objects_2 = src/signals.$(OBJEXT) @NCMPC_MINI_FALSE@am__objects_3 = src/db_completion.$(OBJEXT) \ @NCMPC_MINI_FALSE@ src/xterm_title.$(OBJEXT) \ @NCMPC_MINI_FALSE@ src/hscroll.$(OBJEXT) src/match.$(OBJEXT) \ @NCMPC_MINI_FALSE@ src/conf.$(OBJEXT) @ENABLE_HELP_SCREEN_TRUE@am__objects_4 = src/screen_help.$(OBJEXT) @ENABLE_ARTIST_SCREEN_TRUE@am__objects_5 = \ @ENABLE_ARTIST_SCREEN_TRUE@ src/screen_artist.$(OBJEXT) @ENABLE_SEARCH_SCREEN_TRUE@am__objects_6 = \ @ENABLE_SEARCH_SCREEN_TRUE@ src/screen_search.$(OBJEXT) @ENABLE_SONG_SCREEN_TRUE@am__objects_7 = src/screen_song.$(OBJEXT) @ENABLE_KEYDEF_SCREEN_TRUE@am__objects_8 = \ @ENABLE_KEYDEF_SCREEN_TRUE@ src/screen_keydef.$(OBJEXT) @ENABLE_PLUGIN_LIBRARY_TRUE@am__objects_9 = src/plugin.$(OBJEXT) @ENABLE_SCREEN_TEXT_TRUE@am__objects_10 = src/screen_text.$(OBJEXT) @ENABLE_LYRICS_SCREEN_TRUE@am__objects_11 = \ @ENABLE_LYRICS_SCREEN_TRUE@ src/screen_lyrics.$(OBJEXT) \ @ENABLE_LYRICS_SCREEN_TRUE@ src/lyrics.$(OBJEXT) @ENABLE_OUTPUTS_SCREEN_TRUE@am__objects_12 = \ @ENABLE_OUTPUTS_SCREEN_TRUE@ src/screen_outputs.$(OBJEXT) @ENABLE_CHAT_SCREEN_TRUE@am__objects_13 = src/screen_chat.$(OBJEXT) @ENABLE_LIRC_TRUE@am__objects_14 = src/lirc.$(OBJEXT) am_src_ncmpc_OBJECTS = src/main.$(OBJEXT) src/gidle.$(OBJEXT) \ src/mpdclient.$(OBJEXT) src/callbacks.$(OBJEXT) \ src/playlist.$(OBJEXT) src/filelist.$(OBJEXT) \ src/options.$(OBJEXT) src/command.$(OBJEXT) \ src/keyboard.$(OBJEXT) src/ncu.$(OBJEXT) \ src/player_command.$(OBJEXT) src/title_bar.$(OBJEXT) \ src/progress_bar.$(OBJEXT) src/status_bar.$(OBJEXT) \ src/screen.$(OBJEXT) src/screen_init.$(OBJEXT) \ src/screen_paint.$(OBJEXT) src/screen_utils.$(OBJEXT) \ src/screen_status.$(OBJEXT) src/screen_list.$(OBJEXT) \ src/screen_find.$(OBJEXT) src/screen_client.$(OBJEXT) \ src/screen_queue.$(OBJEXT) src/screen_browser.$(OBJEXT) \ src/screen_file.$(OBJEXT) src/list_window.$(OBJEXT) \ src/save_playlist.$(OBJEXT) src/song_paint.$(OBJEXT) \ src/colors.$(OBJEXT) src/charset.$(OBJEXT) \ src/wreadln.$(OBJEXT) src/strfsong.$(OBJEXT) \ src/time_format.$(OBJEXT) src/utils.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) $(am__objects_9) $(am__objects_10) \ $(am__objects_11) $(am__objects_12) $(am__objects_13) \ $(am__objects_14) src_ncmpc_OBJECTS = $(am_src_ncmpc_OBJECTS) am__DEPENDENCIES_1 = src_ncmpc_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(src_ncmpc_LDFLAGS) \ $(LDFLAGS) -o $@ am_test_run_hscroll_OBJECTS = \ test/test_run_hscroll-run_hscroll.$(OBJEXT) \ src/test_run_hscroll-hscroll.$(OBJEXT) \ src/test_run_hscroll-charset.$(OBJEXT) test_run_hscroll_OBJECTS = $(am_test_run_hscroll_OBJECTS) test_run_hscroll_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(lyrics_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(src_ncmpc_SOURCES) $(test_run_hscroll_SOURCES) DIST_SOURCES = $(am__src_ncmpc_SOURCES_DIST) \ $(test_run_hscroll_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) $(noinst_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build/compile $(top_srcdir)/build/config.guess \ $(top_srcdir)/build/config.sub $(top_srcdir)/build/depcomp \ $(top_srcdir)/build/install-sh $(top_srcdir)/build/missing \ $(top_srcdir)/doc/doxygen.conf.in \ $(top_srcdir)/src/win/ncmpc_win32_rc.rc.in AUTHORS COPYING \ INSTALL NEWS README build/compile build/config.guess \ build/config.sub build/depcomp build/install-sh build/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz GZIP_ENV = --best DIST_TARGETS = dist-xz dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_CFLAGS = @CURSES_CFLAGS@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBLIRCCLIENT_CFLAGS = @LIBLIRCCLIENT_CFLAGS@ LIBLIRCCLIENT_LIBS = @LIBLIRCCLIENT_LIBS@ LIBMPDCLIENT_CFLAGS = @LIBMPDCLIENT_CFLAGS@ LIBMPDCLIENT_LIBS = @LIBMPDCLIENT_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VERSION_EXTRA = @VERSION_EXTRA@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_REVISION = @VERSION_REVISION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lyrics_plugin_dir = @lyrics_plugin_dir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = \ po ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign 1.11 dist-xz subdir-objects AM_CPPFLAGS = \ $(CURSES_CFLAGS) \ $(LIBMPDCLIENT_CFLAGS) \ $(GLIB_CFLAGS) \ $(LIBLIRCCLIENT_CFLAGS) \ -DLOCALE_DIR=\""$(datadir)/locale"\"\ -DSYSCONFDIR=\""$(sysconfdir)"\" src_ncmpc_LDADD = \ $(CURSES_LIBS) \ $(LIBMPDCLIENT_LIBS) \ $(GLIB_LIBS) \ $(LIBLIRCCLIENT_LIBS) src_ncmpc_SOURCES = src/Compiler.h src/ncmpc.h src/defaults.h \ src/ncmpc_curses.h src/i18n.h src/main.c src/gidle.c \ src/gidle.h src/mpdclient.c src/mpdclient.h src/callbacks.c \ src/callbacks.h src/playlist.c src/playlist.h src/filelist.c \ src/filelist.h src/options.c src/options.h src/command.c \ src/command.h src/keyboard.c src/keyboard.h src/ncfix.h \ src/ncu.c src/ncu.h src/player_command.c src/player_command.h \ src/title_bar.c src/title_bar.h src/progress_bar.c \ src/progress_bar.h src/status_bar.c src/status_bar.h \ src/screen.c src/screen.h src/screen_interface.h \ src/screen_init.c src/screen_paint.c src/screen_utils.c \ src/screen_utils.h src/screen_status.c src/screen_status.h \ src/screen_list.c src/screen_list.h src/screen_find.c \ src/screen_find.h src/screen_client.c src/screen_client.h \ src/screen_queue.c src/screen_queue.h src/screen_browser.c \ src/screen_browser.h src/screen_file.c src/screen_file.h \ src/list_window.c src/list_window.h src/save_playlist.c \ src/save_playlist.h src/paint.h src/song_paint.c \ src/song_paint.h src/colors.c src/colors.h src/charset.c \ src/charset.h src/window.h src/wreadln.c src/wreadln.h \ src/strfsong.c src/strfsong.h src/time_format.c \ src/time_format.h src/utils.c src/utils.h $(am__append_1) \ $(am__append_2) $(am__append_3) $(am__append_4) \ $(am__append_5) $(am__append_6) $(am__append_7) \ $(am__append_8) $(am__append_9) $(am__append_10) \ $(am__append_11) $(am__append_12) $(am__append_13) \ $(am__append_14) @HAVE_WINDOWS_TRUE@noinst_DATA = src/win/ncmpc_win32_rc.rc @HAVE_WINDOWS_TRUE@src_ncmpc_DEPENDENCIES = src/win/ncmpc_win32_rc.$(OBJEXT) @HAVE_WINDOWS_TRUE@src_ncmpc_LDFLAGS = -Wl,src/win/ncmpc_win32_rc.$(OBJEXT) CLEANFILES = src/ncmpc-tiny test_run_hscroll_SOURCES = test/run_hscroll.c src/hscroll.c src/charset.c test_run_hscroll_CPPFLAGS = -I$(srcdir)/src $(AM_CPPFLAGS) test_run_hscroll_LDADD = $(CURSES_LIBS) $(GLIB_LIBS) # # sparse # SPARSE = sparse SPARSE_FLAGS = -Wdecl -Wdefault-bitfield-sign -Wdo-while -Wenum-mismatch \ -Wnon-pointer-null -Wptr-subtraction-blows -Wreturn-void \ -Wshadow -Wtypesign \ -D__transparent_union__=unused # # lyrics plugins # lyrics_plugins = lyrics/10-hd.sh lyrics/20-lyricwiki.rb @ENABLE_LYRICS_SCREEN_TRUE@lyricsdir = $(lyrics_plugin_dir) @ENABLE_LYRICS_SCREEN_TRUE@lyrics_SCRIPTS = $(lyrics_plugins) # # Documentation # doc_DATA = \ doc/config.sample doc/keys.sample doc/ncmpc.lirc \ AUTHORS NEWS README man_MANS = doc/ncmpc.1 # copied from MPD, disabled --jn #--------------------------------------- #install-data-local: doc/api/html/index.html # $(mkinstalldirs) $(DESTDIR)$(docdir)/api/html # $(INSTALL_DATA) -c -m 644 doc/api/html/*.* \ # $(DESTDIR)$(docdir)/api/html # #uninstall-local: # rm -f $(DESTDIR)$(docdir)/api/html/*.* #--------------------------------------- # # Distribution # EXTRA_DIST = autogen.sh \ $(lyrics_plugins) \ $(man_MANS) $(doc_DATA) doc/doxygen.conf \ src/win/ncmpc_win32_rc.rc.in all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 src/win/ncmpc_win32_rc.rc: $(top_builddir)/config.status $(top_srcdir)/src/win/ncmpc_win32_rc.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ doc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/main.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/gidle.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/mpdclient.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/callbacks.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/playlist.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/filelist.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/options.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/command.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/keyboard.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/ncu.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/player_command.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/title_bar.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/progress_bar.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/status_bar.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_init.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_paint.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_utils.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_status.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_list.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_find.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_client.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_queue.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_browser.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_file.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/list_window.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/save_playlist.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/song_paint.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/colors.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/charset.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/wreadln.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/strfsong.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/time_format.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/utils.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/net/$(am__dirstamp): @$(MKDIR_P) src/net @: > src/net/$(am__dirstamp) src/net/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/net/$(DEPDIR) @: > src/net/$(DEPDIR)/$(am__dirstamp) src/net/socket.$(OBJEXT): src/net/$(am__dirstamp) \ src/net/$(DEPDIR)/$(am__dirstamp) src/net/resolver.$(OBJEXT): src/net/$(am__dirstamp) \ src/net/$(DEPDIR)/$(am__dirstamp) src/net/async_connect.$(OBJEXT): src/net/$(am__dirstamp) \ src/net/$(DEPDIR)/$(am__dirstamp) src/net/async_rconnect.$(OBJEXT): src/net/$(am__dirstamp) \ src/net/$(DEPDIR)/$(am__dirstamp) src/aconnect.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/signals.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/db_completion.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/xterm_title.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/hscroll.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/match.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/conf.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/screen_help.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_artist.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_search.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_song.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_keydef.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/plugin.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_text.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_lyrics.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/lyrics.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_outputs.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/screen_chat.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/lirc.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/ncmpc$(EXEEXT): $(src_ncmpc_OBJECTS) $(src_ncmpc_DEPENDENCIES) $(EXTRA_src_ncmpc_DEPENDENCIES) src/$(am__dirstamp) @rm -f src/ncmpc$(EXEEXT) $(AM_V_CCLD)$(src_ncmpc_LINK) $(src_ncmpc_OBJECTS) $(src_ncmpc_LDADD) $(LIBS) test/$(am__dirstamp): @$(MKDIR_P) test @: > test/$(am__dirstamp) test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) test/$(DEPDIR) @: > test/$(DEPDIR)/$(am__dirstamp) test/test_run_hscroll-run_hscroll.$(OBJEXT): test/$(am__dirstamp) \ test/$(DEPDIR)/$(am__dirstamp) src/test_run_hscroll-hscroll.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/test_run_hscroll-charset.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) test/run_hscroll$(EXEEXT): $(test_run_hscroll_OBJECTS) $(test_run_hscroll_DEPENDENCIES) $(EXTRA_test_run_hscroll_DEPENDENCIES) test/$(am__dirstamp) @rm -f test/run_hscroll$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_run_hscroll_OBJECTS) $(test_run_hscroll_LDADD) $(LIBS) install-lyricsSCRIPTS: $(lyrics_SCRIPTS) @$(NORMAL_INSTALL) @list='$(lyrics_SCRIPTS)'; test -n "$(lyricsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(lyricsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(lyricsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(lyricsdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(lyricsdir)$$dir" || exit $$?; \ } \ ; done uninstall-lyricsSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(lyrics_SCRIPTS)'; test -n "$(lyricsdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(lyricsdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/*.$(OBJEXT) -rm -f src/net/*.$(OBJEXT) -rm -f test/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/aconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/charset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/colors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/command.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/conf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/db_completion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/filelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gidle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/hscroll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/lirc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/list_window.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/lyrics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/match.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/mpdclient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ncu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/player_command.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/playlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/plugin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/progress_bar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/save_playlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_artist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_browser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_chat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_find.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_keydef.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_lyrics.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_outputs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_paint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_queue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_search.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_song.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_status.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_text.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/screen_utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/signals.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/song_paint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/status_bar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/strfsong.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_run_hscroll-charset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/test_run_hscroll-hscroll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/time_format.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/title_bar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/wreadln.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/xterm_title.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/net/$(DEPDIR)/async_connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/net/$(DEPDIR)/async_rconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/net/$(DEPDIR)/resolver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/net/$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/test_run_hscroll-run_hscroll.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` test/test_run_hscroll-run_hscroll.o: test/run_hscroll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/test_run_hscroll-run_hscroll.o -MD -MP -MF test/$(DEPDIR)/test_run_hscroll-run_hscroll.Tpo -c -o test/test_run_hscroll-run_hscroll.o `test -f 'test/run_hscroll.c' || echo '$(srcdir)/'`test/run_hscroll.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_run_hscroll-run_hscroll.Tpo test/$(DEPDIR)/test_run_hscroll-run_hscroll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/run_hscroll.c' object='test/test_run_hscroll-run_hscroll.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/test_run_hscroll-run_hscroll.o `test -f 'test/run_hscroll.c' || echo '$(srcdir)/'`test/run_hscroll.c test/test_run_hscroll-run_hscroll.obj: test/run_hscroll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test/test_run_hscroll-run_hscroll.obj -MD -MP -MF test/$(DEPDIR)/test_run_hscroll-run_hscroll.Tpo -c -o test/test_run_hscroll-run_hscroll.obj `if test -f 'test/run_hscroll.c'; then $(CYGPATH_W) 'test/run_hscroll.c'; else $(CYGPATH_W) '$(srcdir)/test/run_hscroll.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) test/$(DEPDIR)/test_run_hscroll-run_hscroll.Tpo test/$(DEPDIR)/test_run_hscroll-run_hscroll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/run_hscroll.c' object='test/test_run_hscroll-run_hscroll.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test/test_run_hscroll-run_hscroll.obj `if test -f 'test/run_hscroll.c'; then $(CYGPATH_W) 'test/run_hscroll.c'; else $(CYGPATH_W) '$(srcdir)/test/run_hscroll.c'; fi` src/test_run_hscroll-hscroll.o: src/hscroll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/test_run_hscroll-hscroll.o -MD -MP -MF src/$(DEPDIR)/test_run_hscroll-hscroll.Tpo -c -o src/test_run_hscroll-hscroll.o `test -f 'src/hscroll.c' || echo '$(srcdir)/'`src/hscroll.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_run_hscroll-hscroll.Tpo src/$(DEPDIR)/test_run_hscroll-hscroll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/hscroll.c' object='src/test_run_hscroll-hscroll.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/test_run_hscroll-hscroll.o `test -f 'src/hscroll.c' || echo '$(srcdir)/'`src/hscroll.c src/test_run_hscroll-hscroll.obj: src/hscroll.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/test_run_hscroll-hscroll.obj -MD -MP -MF src/$(DEPDIR)/test_run_hscroll-hscroll.Tpo -c -o src/test_run_hscroll-hscroll.obj `if test -f 'src/hscroll.c'; then $(CYGPATH_W) 'src/hscroll.c'; else $(CYGPATH_W) '$(srcdir)/src/hscroll.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_run_hscroll-hscroll.Tpo src/$(DEPDIR)/test_run_hscroll-hscroll.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/hscroll.c' object='src/test_run_hscroll-hscroll.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/test_run_hscroll-hscroll.obj `if test -f 'src/hscroll.c'; then $(CYGPATH_W) 'src/hscroll.c'; else $(CYGPATH_W) '$(srcdir)/src/hscroll.c'; fi` src/test_run_hscroll-charset.o: src/charset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/test_run_hscroll-charset.o -MD -MP -MF src/$(DEPDIR)/test_run_hscroll-charset.Tpo -c -o src/test_run_hscroll-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_run_hscroll-charset.Tpo src/$(DEPDIR)/test_run_hscroll-charset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/charset.c' object='src/test_run_hscroll-charset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/test_run_hscroll-charset.o `test -f 'src/charset.c' || echo '$(srcdir)/'`src/charset.c src/test_run_hscroll-charset.obj: src/charset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/test_run_hscroll-charset.obj -MD -MP -MF src/$(DEPDIR)/test_run_hscroll-charset.Tpo -c -o src/test_run_hscroll-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/test_run_hscroll-charset.Tpo src/$(DEPDIR)/test_run_hscroll-charset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/charset.c' object='src/test_run_hscroll-charset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_run_hscroll_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/test_run_hscroll-charset.obj `if test -f 'src/charset.c'; then $(CYGPATH_W) 'src/charset.c'; else $(CYGPATH_W) '$(srcdir)/src/charset.c'; fi` install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-recursive @ENABLE_DOCUMENTATION_FALSE@all-local: all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) config.h \ all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(lyricsdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f src/net/$(DEPDIR)/$(am__dirstamp) -rm -f src/net/$(am__dirstamp) -rm -f test/$(DEPDIR)/$(am__dirstamp) -rm -f test/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @ENABLE_DOCUMENTATION_FALSE@clean-local: clean: clean-recursive clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf src/$(DEPDIR) src/net/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-docDATA install-lyricsSCRIPTS install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf src/$(DEPDIR) src/net/$(DEPDIR) test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-docDATA \ uninstall-lyricsSCRIPTS uninstall-man uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) all check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--refresh check check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-cscope clean-generic clean-local \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-docDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-lyricsSCRIPTS install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-docDATA \ uninstall-lyricsSCRIPTS uninstall-man uninstall-man1 .PRECIOUS: Makefile # # Windows resource file # src/win/ncmpc_win32_rc.$(OBJEXT): src/win/ncmpc_win32_rc.rc $(WINDRES) -i $< -o $@ # build the smallest possible ncmpc binary src/ncmpc-tiny: $(filter-out %.h,$(src_ncmpc_SOURCES)) $(COMPILE) --combine -fwhole-program $(src_ncmpc_LDFLAGS) $(src_ncmpc_LDADD) $(LIBS) $^ -o $@ strip --strip-all $@ sparse-check: $(SPARSE) -I. -I/usr/lib/gcc/$(shell gcc -dumpmachine)/4.3/include -I/usr/lib/gcc/$(shell gcc -dumpmachine)/4.3/include-fixed $(AM_CPPFLAGS) $(SPARSE_FLAGS) $(src_ncmpc_SOURCES) @ENABLE_DOCUMENTATION_TRUE@doc/api/html/index.html: doc/doxygen.conf @ENABLE_DOCUMENTATION_TRUE@ @mkdir -p $(@D) @ENABLE_DOCUMENTATION_TRUE@ $(DOXYGEN) $< @ENABLE_DOCUMENTATION_TRUE@all-local: doc/api/html/index.html @ENABLE_DOCUMENTATION_TRUE@clean-local: @ENABLE_DOCUMENTATION_TRUE@ rm -rf doc/api # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ncmpc-0.27/config.h.in0000644000076400001440000000756113063773007011525 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Enable artist screen */ #undef ENABLE_ARTIST_SCREEN /* Enable asynchronous connect? */ #undef ENABLE_ASYNC_CONNECT /* Enable chat screen */ #undef ENABLE_CHAT_SCREEN /* Enable color support */ #undef ENABLE_COLORS /* Enable the help screen */ #undef ENABLE_HELP_SCREEN /* Enable key editor screen */ #undef ENABLE_KEYDEF_SCREEN /* Enable LIRC support */ #undef ENABLE_LIRC /* Locale support is enabled */ #undef ENABLE_LOCALE /* Enable lyrics screen */ #undef ENABLE_LYRICS_SCREEN /* Enable multibyte character support */ #undef ENABLE_MULTIBYTE /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Enable outputs screen */ #undef ENABLE_OUTPUTS_SCREEN /* Enable search screen */ #undef ENABLE_SEARCH_SCREEN /* Enable song viewer screen */ #undef ENABLE_SONG_SCREEN /* Define to enable TCP support */ #undef ENABLE_TCP /* gettext domain */ #undef GETTEXT_PACKAGE /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if a SysV or X/Open compatible Curses library is present */ #undef HAVE_CURSES /* Define to 1 if library supports color (enhanced functions) */ #undef HAVE_CURSES_COLOR /* Define to 1 if library supports X/Open Enhanced functions */ #undef HAVE_CURSES_ENHANCED /* Define to 1 if is present */ #undef HAVE_CURSES_H /* Define to 1 if library supports certain obsolete features */ #undef HAVE_CURSES_OBSOLETE /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Enable mouse support */ #undef HAVE_GETMOUSE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if the Ncurses library is present */ #undef HAVE_NCURSES /* Define to 1 if the NcursesW library is present */ #undef HAVE_NCURSESW /* Define to 1 if is present */ #undef HAVE_NCURSESW_CURSES_H /* Define to 1 if is present */ #undef HAVE_NCURSESW_H /* Define to 1 if is present */ #undef HAVE_NCURSES_CURSES_H /* Define to 1 if is present */ #undef HAVE_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Directory to search for lyrics plugins */ #undef LYRICS_PLUGIN_DIR /* Build ncmpc-mini, which disables lots of features */ #undef NCMPC_MINI /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION ncmpc-0.27/AUTHORS0000644000076400001440000000343613062774214010547 00000000000000The current ncmpc development team ================================== Max Kellermann Thomas Jansen Romain Bignon Patrick Hallen Jeffrey Middleton Andy Spencer Jonathan Neuschäfer Translators =========== Johám-Luís Miguéns Vila Galician and Spanish Jozef Riha Slovak Björn Pettersson Swedish László Áshin Hungarian Max Arnold Russian Mikkel Kirkgaard Nielsen Danish Monika Brinkert German Jon Bergli Heier Norwegian Yann Cézard François Blondel French Jay Whang , Atie Korean Gao Jie Simplified Chinese Niels Anker Danish (plus some Norwegian and Swedish) Vojtěch Trefný Czech Oleksandr Kovalenko Ukrainian Thomas Casteleyn Dutch Itai Kloog Hebrew Luis Miguel Domínguez Peinado Italian Krzysztof Krakowiak , Author and maintainer (2004-2006) Jonathan Fors Andreas Obergrusberger , Maintainer (2006-2008) J. Alexander Treuman Mikael Svantesson Other authors who may have gone unmentioned are listed in the repository logs. ncmpc-0.27/COPYING0000644000076400001440000004310311216360077010522 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ncmpc-0.27/INSTALL0000644000076400001440000000100713063457017010520 00000000000000ncmpc INSTALL ============= Requirements ------------ * a C99 compliant compiler (e.g. gcc) * libmpdclient 2.9 * ncurses (ncursesw for unicode / wide character support) * GLib 2.30 Configure and compile --------------------- Download and unpack the source code: tar xjf ncmpc-x.y.z.tar.bz2 cd ncmpc-x.y.z Run "./configure" (or "./autogen.sh" if you cloned from git): ./configure The configure option "--help" lists all available compile time options. Compile and install: make sudo make install ncmpc-0.27/NEWS0000644000076400001440000002101213065552236010165 00000000000000ncmpc 0.27 - (2017-03-25) * work around connect failure if /var/run/mpd/socket does not exist * remove the status bar clock (option "display-time") * fix assertion failure after connect failure * several Windows build fixes ncmpc 0.26 - (2017-03-20) * require libmpdclient 2.9 * adapt to lirc 0.9.4 * lyricswiki: update regex * screen_song: show "f" and "dsd" formats * connect asynchronously * fix flickering in color mode * fix gcc 7 warnings ncmpc 0.25 - (2016-08-18) * implement "%disc%" * lyricswiki: handle redirects * lyricswiki: update XML format ncmpc 0.24 - (2014-07-14) * fix crash on "jump" (hotkey ".") * save keys to path specified by --key-file ncmpc 0.23 - (2014-07-10) * fix broken l10n in out-of-tree builds ncmpc 0.22 - (2014-06-09) * rename "playlist" to "queue" * remove useless "Connected to ..." message * require libmpdclient 2.3, MPD 0.16 * patched color line-flags * configuration option "search-format" * remove broken leoslyrics plugin * show audio format in song screen ncmpc 0.21 - (2013-04-11) * add a chat screen for communication with other clients on the same server * song format: evaluate literal strings as true * fix crash on search screen when disconnected * screen_queue: fix crash on CMD_SCREEN_SWAP when the queue is empty * lyricswiki: fix Ruby 2.0 and UTF-8 ncmpc 0.20 - (02/05/2012) * increase connection timeout to 5 seconds * screen_queue: follow songs when they are moved out of the visible range * add a doxygen configuration file. Documentation will be generated if the configure script is called with --enable-documentation * screen_lyrics: You can now edit lyrics by pressing 'e' * configurable timeout for MPD connections * screen_keydef: show command descriptions * show the paths of the configuration files in --version output ncmpc 0.19 - (07/23/2011) * require libmpdclient 2.2 * show real server address in status message * fix crash after "clear" command * po: added Polish translation ncmpc 0.18 - (09/22/2010) * screen_song: show song range * screen_artist: respect artist when adding albums * po: added Italian translation ncmpc 0.17 - (06/22/2010) * screen_queue: fix range selection check on "shuffle" * screen_browser: check for error before adding song to playlist * po: added Brazilian Portuguese translation ncmpc 0.16.1 - (01/17/2009) * screen_queue: always update the list size * screen_browser: fixed jump to playlist file ncmpc 0.16 - (12/25/2009) * using libmpdclient 2.0 instead of built-in libmpdclient * require MPD 0.12 * allow multiple queued database updates * reactivate incremental playlist changes * optimize "add+play song" with addid/playid * handle stderr messages from lyrics plugins * search: eliminate duplicate results * use the "idle" command to reduce CPU and network usage * disable the status bar clock by default * list_window: fix narrow cursor drawing * screen_play: repaint after the "select-playing" command * screen_text: start searching at window origin, not bottom * strfsong: support multiple values for a tag * screen_browser: different colors for directories and playlists * screen_browser: display song duration * screen_queue: move ranges with one single "move" command * status_bar: fix display_remaining_time while seeking * status_bar: display elapsed time event when total time is unknown * charset: added support for zero-width characters * colors: added support for 256 colors and text attributes * compatibility fixes for GLib 2.12 ncmpc 0.15 - 2009-09-24 * added the "lyrics-autosave" option * added CMD_SELECT_PLAYING * display song duration in the playlist * added the "hardware_cursor" option * show plugin error messages on the screen * fixed NULL pointer dereference when not yet connected * new translation: Hebrew ncmpc 0.14 - 2009-04-21 * bell on wrapped search (optionally) * added new "jump" ('.') command, which queries the user for a string and jumps to the entry which begins with that string while the user is typing. * added new "select range" ('v') command, which lets the user perform various actions (e.g. add to playlist, delete, move, shuffle) on ranges of songs * added commands ('H', 'M', 'L') to jump to top, middle, and bottom of screen * added scrolling commands ('^B', '^N', 'B', 'N') to scroll up/down one line or up/down half a screen * added screen swap ('`') command to switch to the most recently used screen * added MPD information and currently playing song to the info screen ('i') * support for new MPD 0.15 modes: single ('y'), consume ('C') * added "scroll-offset" option * new translations: Czech, Simplified Chinese, Korean, Ukrainian, Dutch ncmpc 0.13 - 2009-01-09 * added output configuration screen, default hotkey F8 * new --disable-locale configure option * new --disable-multibyte configure option; this allows you to disable wide character support, retaining multibyte character support * search with regular expressions ncmpc 0.12 - 2008-12-05 * added artist screen (tag browser) * added highly experimental lyrics screen (disabled by default) * removed clock screen * support wide characters * optimized memory usage * always try to reconnect after server failure * support unix domain sockets for the MPD connection * added compile-time "mini" option which produces the smallest possible ncmpc binary * added LIRC support * scroll long song names in the playlist * added command "locate" ('G') which locates a song in the database browser * added "song" screen ('i') which displays song information ncmpc 0.11.1 - 2005-01-24 + Spanish translations from Jose Cedeno + Russian translations from Nikolay Pavlov + French translations from Yann Cézard + ncmpc now supports SIGSTOP and SIGCONT (Ctrl-Z) + ncmpc now hides the cursor on the help screen + ncmpc now can enqueue and play a song from the browse screen (Enter) + configuration changes: o ncmpc no longer supports the old configuration file syntax o the crossfade time can now be definied in (crossfade-time) o support for ncurses mouse events is now optional (enable-mouse) + bugfixes: o fixed short option handling for multiple short options o %time% format fix from Aurelien Foret (use %02d for seconds) o Fixed abort (Ctrl-G) handling when saving playlist o survive select/find operations on empty lists (Niko Tyni) ncmpc 0.11.0 - 2004-07-09 + removed popt dependency + the default port is now 6600 (mpd-0.11.0) + nls support (glib-2.4 required for nls) + ncmpc now uses the terminal in raw mode (enabling key bindings to Ctrl-C...) + changed key bindings: o cursor movement up/down with j and k (used to be . and ,) o the update/redraw command is now executed with Ctrl-L (used to be u) + new ncmpc commands: o move a playlist entry up/down with Ctrl-K, Ctrl-J (playlist screen) o add a song/url with a (playlist screen) o support for MPD db updates with Ctrl-U + new command line options --config=FILE and --key-file=FILE + configuration changes: o replaced '_' with '-' in configuration field names o the color support in ncmpc have been redesigned - more colors and color fields o the display of song names can now be customized (list-format, status-format, xterm-title-format) o ncmpc no longer changes the xterm title by default (set-xterm-title) o new option for default find mode (find-wrap) o new option for cplay like cursor movement (wrap-around) o alert bells can be customized (audible-bell,visible-bell) o the wide cursor is now enabled by default (wide-cursor) o view the sample configuration file or the manual page for details + ncmpc now scrolls long song names on the status line + ncmpc now have a new build in line editor with completion and history + ncmpc now remembers the cursor position when changing directories + ncmpc now offers to overwrite when saving playlists + ncmpc now have an optional clock screen + ncmpc now updates the local playlists via MPD's plchanges command... + ncmpc now support ncurses mouse events (xterm) + ncmpc now has german translations from Ingmar Gebert ncmpc 0.10.1 - 2004-04-26 + support for user key bindings (~/.ncmpc/keys) + a key configuration screen (press 'K') + fixed resize event (SIGWINCH) handling. + improved drawing routines (removes flickering) + support for seeking, toggle crossfade + support for a wide (like cplay) cursor (se the man page for details) + display mpd status flags on the second row [rzx] (repeat,random,crossfade) + support for system-wide configuration files (config,keys) + the user configuration file is moved to ~/.ncmpc/config + and some small changes (view the ChangeLog for details) ncmpc 0.10.0 - 2004-04-12 ncmpc-0.27/README0000644000076400001440000000274012360711076010351 00000000000000 Overview ------------------------------------------------------------------------------ ncmpc is a curses client for the Music Player Daemon (MPD). ncmpc connects to a MPD running on a machine on the local network, and controls this with an interface inspired by cplay. Music Player Daemon (MPD) allows remote access for playing music (MP3, Ogg Vorbis, FLAC, AAC, and wave files) and managing playlists. MPD is designed for integrating a computer into a stereo system that provides control for music playback over a local network. Read more at musicpd.org How to compile and install ncmpc ------------------------------------------------------------------------------- See the INSTALL file. Usage ------------------------------------------------------------------------------- ncmpc connects to a MPD running on a machine on the local network. By default, ncmpc connects to localhost:6600. This can be changed either at compile-time, or by exporting the MPD_HOST and MPD_PORT environment variables, or by the command line options --host and --port. $ ncmpc --host=musicserver --port=44000 For more information please view ncmpc's manual page. Web Page, Forums and Bug Reports ------------------------------------------------------------------------------- Home page and download: http://www.musicpd.org/clients/ncmpc/ MPD's home page: http://www.musicpd.org/ Bug tracker: http://bugs.musicpd.org/ Forum: http://forum.musicpd.org/ ncmpc-0.27/autogen.sh0000744000076400001440000000074112131463276011471 00000000000000#!/bin/sh -e rm -rf config.cache build mkdir build # create po/Makefile.in.in glib-gettextize --force --copy # add aclocal.m4 to current dir echo "aclocal..." aclocal -I m4 # This generates the configure script from configure.in echo "autoconf..." autoconf echo "autoheader..." autoheader # Generate Makefile.in from Makefile.am echo "automake..." automake --add-missing $AUTOMAKE_FLAGS # configure if test x$NOCONFIGURE = x; then echo "./configure $*" ./configure $* fi ncmpc-0.27/po/0000755000076400001440000000000013065552243010166 500000000000000ncmpc-0.27/po/LINGUAS0000644000076400001440000000010511611621431011116 00000000000000cs da de eo es fi fr gl he hu it ko nb nl ru pl pt_BR sk sv uk zh_CN ncmpc-0.27/po/ChangeLog0000644000076400001440000000000011110336310011626 00000000000000ncmpc-0.27/po/Makefile.in.in0000644000076400001440000001760413063456226012572 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ libdir = @libdir@ localedir = $(libdir)/locale gnulocaledir = $(datadir)/locale gettextsrcdir = $(datadir)/glib-2.0/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = mkdir -p CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: $(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) \ --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ --add-comments --keyword=_ --keyword=N_ \ --keyword=C_:1c,2 \ --keyword=NC_:1c,2 \ --keyword=g_dcgettext:2 \ --keyword=g_dngettext:2,3 \ --keyword=g_dpgettext2:2c,3 \ --flag=N_:1:pass-c-format \ --flag=C_:2:pass-c-format \ --flag=NC_:2:pass-c-format \ --flag=g_dngettext:2:pass-c-format \ --flag=g_strdup_printf:1:c-format \ --flag=g_string_printf:2:c-format \ --flag=g_string_append_printf:2:c-format \ --flag=g_error_new:3:c-format \ --flag=g_set_error:4:c-format \ --flag=g_markup_printf_escaped:1:c-format \ --flag=g_log:3:c-format \ --flag=g_print:1:c-format \ --flag=g_printerr:1:c-format \ --flag=g_printf:1:c-format \ --flag=g_fprintf:2:c-format \ --flag=g_sprintf:2:c-format \ --flag=g_snprintf:3:c-format \ --flag=g_scanner_error:2:c-format \ --flag=g_scanner_warn:2:c-format \ $(POTFILES) \ && test ! -f $(GETTEXT_PACKAGE).po \ || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ $(MKINSTALLDIRS) $$dir; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "glib"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done if test "$(PACKAGE)" = "glib"; then \ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ fi check: all dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done # POTFILES is created from POTFILES.in by stripping comments, empty lines # and Intltool tags (enclosed in square brackets), and appending a full # relative path to them POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' \ -e "s/^\[.*\] +//" \ -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && $(SHELL) ./config.status $(subdir)/$@.in # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ncmpc-0.27/po/POTFILES.in0000644000076400001440000000075713064040416011665 00000000000000# source files src/colors.c src/command.c src/conf.c src/i18n.h src/list_window.c src/main.c src/options.c src/player_command.c src/save_playlist.c src/screen.c src/screen_artist.c src/screen_browser.c src/screen_chat.c src/screen_client.c src/screen_file.c src/screen_find.c src/screen_help.c src/screen_init.c src/screen_keydef.c src/screen_lyrics.c src/screen_outputs.c src/screen_queue.c src/screen_search.c src/screen_song.c src/screen_utils.c src/status_bar.c src/title_bar.c src/utils.c ncmpc-0.27/po/ncmpc.pot0000644000076400001440000004760313065551743011750 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/i18n.h:42 msgid "y" msgstr "" #: src/i18n.h:43 msgid "n" msgstr "" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "" #: src/main.c:214 #, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "" #: src/player_command.c:174 #: src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "" #: src/screen.c:163 msgid "Random mode is on" msgstr "" #: src/screen.c:164 msgid "Random mode is off" msgstr "" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "" #: src/screen.c:174 msgid "Single mode is off" msgstr "" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "" #: src/screen.c:183 msgid "Consume mode is off" msgstr "" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "" #: src/screen.c:198 msgid "Database updated" msgstr "" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "" #: src/screen_artist.c:72 #: src/screen_artist.c:354 msgid "All tracks" msgstr "" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "" #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "" #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "" #: src/screen_browser.c:168 #: src/screen_browser.c:261 #: src/screen_browser.c:286 #, c-format msgid "Adding '%s' to queue" msgstr "" #: src/screen_client.c:41 msgid "Database update running..." msgstr "" #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "" #: src/screen_client.c:52 msgid "Database update started" msgstr "" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 #: src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "" #: src/screen_find.c:30 msgid "Find backward" msgstr "" #: src/screen_find.c:31 msgid "Jump" msgstr "" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, c-format msgid "%s [%s/%s] " msgstr "" #: src/screen_utils.c:121 msgid "Password" msgstr "" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, c-format msgid "Replace %s?" msgstr "" #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 #: src/screen_file.c:220 #: src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "" #: src/screen_queue.c:497 #: src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "" #: src/screen_file.c:213 #, c-format msgid "Delete playlist %s?" msgstr "" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "" #. translators: caption of the browser screen #: src/screen_file.c:287 #: src/title_bar.c:77 msgid "Browse" msgstr "" #: src/screen_search.c:46 msgid "artist" msgstr "" #: src/screen_search.c:47 msgid "album" msgstr "" #: src/screen_search.c:48 msgid "title" msgstr "" #: src/screen_search.c:49 msgid "track" msgstr "" #: src/screen_search.c:50 msgid "name" msgstr "" #: src/screen_search.c:51 msgid "genre" msgstr "" #: src/screen_search.c:52 msgid "date" msgstr "" #: src/screen_search.c:53 msgid "composer" msgstr "" #: src/screen_search.c:54 msgid "performer" msgstr "" #: src/screen_search.c:55 msgid "comment" msgstr "" #: src/screen_search.c:62 msgid "file" msgstr "" #: src/screen_search.c:80 #: src/screen_song.c:47 msgid "Title" msgstr "" #: src/screen_search.c:81 #: src/screen_song.c:46 #: src/title_bar.c:79 msgid "Artist" msgstr "" #: src/screen_search.c:82 #: src/screen_song.c:48 msgid "Album" msgstr "" #: src/screen_search.c:83 msgid "Filename" msgstr "" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "" #: src/screen_search.c:328 #: src/screen_help.c:150 #: src/title_bar.c:82 msgid "Search" msgstr "" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "" #: src/screen_keydef.c:164 #: src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "" #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "" #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "" #: src/screen_keydef.c:347 msgid "Add new key" msgstr "" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "" #: src/screen_help.c:39 msgid "Movement" msgstr "" #: src/screen_help.c:84 msgid "Global" msgstr "" #: src/screen_help.c:119 #: src/command.c:105 msgid "Queue screen" msgstr "" #: src/screen_help.c:121 msgid "Play" msgstr "" #: src/screen_help.c:124 msgid "Move song up" msgstr "" #: src/screen_help.c:125 msgid "Move song down" msgstr "" #: src/screen_help.c:128 msgid "Center" msgstr "" #: src/screen_help.c:134 #: src/command.c:107 msgid "Browse screen" msgstr "" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "" #: src/screen_help.c:138 #: src/screen_help.c:153 msgid "Append song to queue" msgstr "" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "" #: src/screen_help.c:148 #: src/command.c:218 msgid "Search screen" msgstr "" #: src/screen_help.c:151 msgid "Select and play" msgstr "" #: src/screen_help.c:160 #: src/command.c:228 msgid "Lyrics screen" msgstr "" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "" #: src/screen_help.c:175 #: src/command.c:243 msgid "Outputs screen" msgstr "" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "" #: src/screen_help.c:182 #: src/command.c:248 msgid "Chat screen" msgstr "" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "" #: src/screen_help.c:193 msgid "Add a keydef" msgstr "" #: src/screen_help.c:194 msgid "Go up a level" msgstr "" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "" #: src/screen_help.c:241 #: src/title_bar.c:74 msgid "Help" msgstr "" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 #: src/screen_lyrics.c:336 #: src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "" #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 #: src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "" #: src/screen_outputs.c:161 #: src/title_bar.c:88 msgid "Outputs" msgstr "" #: src/screen_song.c:49 msgid "Length" msgstr "" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "" #: src/screen_song.c:52 msgid "Name" msgstr "" #: src/screen_song.c:53 msgid "Disc" msgstr "" #: src/screen_song.c:54 msgid "Track" msgstr "" #: src/screen_song.c:55 msgid "Date" msgstr "" #: src/screen_song.c:56 msgid "Genre" msgstr "" #: src/screen_song.c:57 msgid "Comment" msgstr "" #: src/screen_song.c:58 msgid "Path" msgstr "" #: src/screen_song.c:59 msgid "Bitrate" msgstr "" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "" #: src/screen_song.c:77 msgid "Number of albums" msgstr "" #: src/screen_song.c:78 msgid "Number of songs" msgstr "" #: src/screen_song.c:79 msgid "Uptime" msgstr "" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "" #: src/screen_song.c:81 msgid "Playtime" msgstr "" #: src/screen_song.c:82 msgid "DB playtime" msgstr "" #: src/screen_song.c:171 msgid "Song viewer" msgstr "" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "" #: src/screen_song.c:410 msgid "Selected song" msgstr "" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "" #: src/status_bar.c:121 msgid "Playing:" msgstr "" #: src/status_bar.c:124 msgid "[Paused]" msgstr "" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "" #: src/command.c:63 msgid "Key configuration screen" msgstr "" #: src/command.c:66 msgid "Quit" msgstr "" #: src/command.c:70 msgid "Move cursor up" msgstr "" #: src/command.c:72 msgid "Move cursor down" msgstr "" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "" #: src/command.c:84 msgid "Page up" msgstr "" #: src/command.c:86 msgid "Page down" msgstr "" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "" #: src/command.c:112 msgid "Play/Enter directory" msgstr "" #: src/command.c:114 msgid "Pause" msgstr "" #: src/command.c:116 msgid "Stop" msgstr "" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "" #: src/command.c:122 msgid "Previous track" msgstr "" #: src/command.c:124 msgid "Seek forward" msgstr "" #: src/command.c:126 msgid "Seek backward" msgstr "" #: src/command.c:128 msgid "Increase volume" msgstr "" #: src/command.c:130 msgid "Decrease volume" msgstr "" #: src/command.c:132 msgid "Select/deselect song in queue" msgstr "" #: src/command.c:134 msgid "Select all listed items" msgstr "" #: src/command.c:136 msgid "Delete song from queue" msgstr "" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "" #: src/command.c:144 msgid "Toggle random mode" msgstr "" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "" #: src/command.c:152 msgid "Start a music database update" msgstr "" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 msgid "Add url/file to queue" msgstr "" #: src/command.c:159 msgid "Go to root directory" msgstr "" #: src/command.c:161 msgid "Go to parent directory" msgstr "" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "" #: src/command.c:170 msgid "Move item down" msgstr "" #: src/command.c:172 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "" #: src/command.c:188 msgid "Next screen" msgstr "" #: src/command.c:190 msgid "Previous screen" msgstr "" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "" #: src/command.c:199 msgid "Forward find next" msgstr "" #: src/command.c:201 msgid "Backward find" msgstr "" #: src/command.c:203 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "" #: src/command.c:214 msgid "Artist screen" msgstr "" #: src/command.c:220 msgid "Change search mode" msgstr "" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "" #: src/command.c:234 msgid "Update Lyrics" msgstr "" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "" #: src/command.c:292 msgid "Space" msgstr "" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "" #: src/command.c:302 msgid "Down" msgstr "" #: src/command.c:304 msgid "Left" msgstr "" #: src/command.c:306 msgid "Right" msgstr "" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "" #: src/colors.c:156 msgid "Unknown color" msgstr "" #: src/colors.c:196 msgid "Unknown color field" msgstr "" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "" #: src/conf.c:253 msgid "Bad color name" msgstr "" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "" #: src/conf.c:269 msgid "Invalid number" msgstr "" #: src/conf.c:277 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" ncmpc-0.27/po/cs.po0000644000076400001440000006461213064033557011065 00000000000000# Czech translation for ncmpc # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-03-02 13:59+0000\n" "Last-Translator: Zbyněk Schwarz \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "a" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Připojuji se k %s... [Pro přerušení stiskněte %s]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Chyba: MPD verze %d.%d.%d je příliš stará (potřebuji %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "stiskněte %s pro otevření správce klávesových zkratek" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Opakování je zapnuto" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Opakování je vypnuto" #: src/screen.c:163 msgid "Random mode is on" msgstr "Náhodné přehrávání je zapnuto" #: src/screen.c:164 msgid "Random mode is off" msgstr "Náhodné přehrávání je vypnuto" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Jednoduchý mód je zapnutý" #: src/screen.c:174 msgid "Single mode is off" msgstr "Jednoduchý mód je vypnutý" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Režim konzumace zapnut" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Režim konzumace vypnut" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Přerušení %d sekund" #: src/screen.c:198 msgid "Database updated" msgstr "Databáze aktualizována" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Režim vyhledávání: Zabalený" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Režim vyhledávání: Normální" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Automatické centrování zapnuto" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Automatické centrování vypnuto" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Všechny skladby" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Všichni interpreti" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Alba interpreta: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Všechny skladby interpreta: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Písničky bez alba zpěváka: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Přidávám album %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Přidávám %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Načítám seznam skladeb: %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Přidávám '%s' do seznamu skladeb" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Probíhá aktualizace databáze" #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Aktualizace databáze %s zahájena" #: src/screen_client.c:52 msgid "Database update started" msgstr "Aktualizace databáze zahájena" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Najít" #: src/screen_find.c:30 msgid "Find backward" msgstr "Hledat rekurzivně" #: src/screen_find.c:31 msgid "Jump" msgstr "Přeskočit" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Nemohu najít '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Nahradit %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Heslo" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Nahradit %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Přerušeno" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Uloženo %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Přidat" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Smazání této položky není možné" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Smazat seznam skladeb" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Seznam skladeb smazán" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Procházet" #: src/screen_search.c:46 msgid "artist" msgstr "interpret" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titulek" #: src/screen_search.c:49 msgid "track" msgstr "stopa" #: src/screen_search.c:50 msgid "name" msgstr "název" #: src/screen_search.c:51 msgid "genre" msgstr "žánr" #: src/screen_search.c:52 msgid "date" msgstr "datum" #: src/screen_search.c:53 msgid "composer" msgstr "skladatel" #: src/screen_search.c:54 msgid "performer" msgstr "umělec" #: src/screen_search.c:55 msgid "comment" msgstr "poznámka" #: src/screen_search.c:62 msgid "file" msgstr "soubor" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Název" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Interpret" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Název souboru" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Interpret + Název" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Chybný tag vyhledávání %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Žádný argument vyhledávání %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Vyhledávání" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Pro nové hledání stiskněte %s" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Hledání: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Hledání: Výsledky pro %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Hledání: Stiskněte %s pro nové hledání [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Režim vyhledávání: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Nové klávesové zkratky" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Klávesové zkratky nezměněny" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Chyba: Nemohu vytvořit adresář ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Chyba: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Zapsat %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Odstraněno" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Vložte novou klávesu pro %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Chyba: klávesa %s je již použita pro %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s přiřazeno k %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Použít klávesové zkratky " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Použít & Uložit klávesové zkratky " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Přidat novou klávesovou zkratku" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Poznámka: Zapomněl jste 'Uplatnit' změny?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Upravit klávesové zkratky" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Upravit klávesové zkratky pro %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Pohyb" #: src/screen_help.c:84 msgid "Global" msgstr "Globální" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Obrazovka keydef" #: src/screen_help.c:121 msgid "Play" msgstr "Přehrát" #: src/screen_help.c:124 msgid "Move song up" msgstr "Posunout skladbu nahoru" #: src/screen_help.c:125 msgid "Move song down" msgstr "Posunout skladbu dolů" #: src/screen_help.c:128 msgid "Center" msgstr "Střed" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Obrazovka prohlížení" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Vytoupit do adresáře/Vybrat a přehrát skladbu" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Přidat skladbu do seznamu skladeb" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Smazat seznam skladeb" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Obrazovka vyhledávání" #: src/screen_help.c:151 msgid "Select and play" msgstr "Vybrat a přehrát" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Obrazovka textu písně" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Zobrazit text písně" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "Znovu načíst text písně" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Přerušit načítání" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Stáhnout text pro aktuálně přehrávanou skladbu" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Žádný uložený text písně" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Uložit text písně" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Smazat uložený text písně" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Obrazovka výstupů" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Povolit/zakázat výstup" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Další obrazovka" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Obrazovka keydef" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Upravit keydefs pro vybraný příkaz" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Odstranit vybraný keydef" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Přidat novou klávesovou zkratku" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Jít o úroveň výš" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Aplikovat a uložit změny" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Nápověda" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Žádný text písně" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Text písně" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "načítám..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Text písně uložen" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Text písně smazán" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Žádný uložený text písně" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Výstup '%s' povolen" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Výstup '%s' zakázán" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Výstupy" #: src/screen_song.c:49 msgid "Length" msgstr "Délka" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Skladatel" #: src/screen_song.c:52 msgid "Name" msgstr "Název" #: src/screen_song.c:53 msgid "Disc" msgstr "Disk" #: src/screen_song.c:54 msgid "Track" msgstr "Skladba" #: src/screen_song.c:55 msgid "Date" msgstr "Datum" #: src/screen_song.c:56 msgid "Genre" msgstr "Žánr" #: src/screen_song.c:57 msgid "Comment" msgstr "Poznámka" #: src/screen_song.c:58 msgid "Path" msgstr "Cesta" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitrate" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Počet interpretů" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Počet alb" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Počet skladeb" #: src/screen_song.c:79 msgid "Uptime" msgstr "Doba běhu" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Poslední aktualizace db" #: src/screen_song.c:81 msgid "Playtime" msgstr "Čas přehrávání" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Čas hraní DB" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Prohlížeč skladeb" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD statistiky" #: src/screen_song.c:410 msgid "Selected song" msgstr "Vybraná skladba" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Právě přehrávaná skladba" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Přehrávání:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pozastaveno]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Hlasitost n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Hlasitost %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Obrazovka klávesových zkratek" #: src/command.c:66 msgid "Quit" msgstr "Ukončit" #: src/command.c:70 msgid "Move cursor up" msgstr "Posunout kurzor nahoru" #: src/command.c:72 msgid "Move cursor down" msgstr "Posunout kurzoru dolů" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Přesunout kurzor na horní okraj obrazovky" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Přesunout kurzor doprostřed obrazovky" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Přesunout kurzor na dolní okraj obrazovky" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Přesunout kurzor na vrchol seznamu" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Přesunout kurzor na dno seznamu" #: src/command.c:84 msgid "Page up" msgstr "Page up" #: src/command.c:86 msgid "Page down" msgstr "Page down" #: src/command.c:88 msgid "Range selection" msgstr "Výběr rozsahu" #: src/command.c:90 msgid "Scroll down one line" msgstr "Posunout o jeden řádek dolů" #: src/command.c:92 msgid "Scroll up one line" msgstr "Posunout o jeden řádek nahoru" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Posunout o půlku obrazovky nahoru" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Posunout o půlku obrazovky dolů" #: src/command.c:98 msgid "Select currently playing song" msgstr "Zvolit právě hrající skladbu" #: src/command.c:103 msgid "Help screen" msgstr "Obrazovka nápovědy" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Přehrát/Vstoupit do adresáře" #: src/command.c:114 msgid "Pause" msgstr "Pozastavit" #: src/command.c:116 msgid "Stop" msgstr "Stop" #: src/command.c:118 msgid "Crop" msgstr "Oříznout" #: src/command.c:120 msgid "Next track" msgstr "Následující stopa" #: src/command.c:122 msgid "Previous track" msgstr "Předchozí stopa" #: src/command.c:124 msgid "Seek forward" msgstr "Přetočit vpřed" #: src/command.c:126 msgid "Seek backward" msgstr "Přetočit zpět" #: src/command.c:128 msgid "Increase volume" msgstr "Zvýšit hlasitost" #: src/command.c:130 msgid "Decrease volume" msgstr "Snížit hlasitost" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Vybrat/Zrušit výběr skladby v seznamu skladeb" #: src/command.c:134 msgid "Select all listed items" msgstr "Vybrat všechny vypsané položky" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Smazat skladbu ze seznamu skladeb" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Přepnout režim opakování" #: src/command.c:144 msgid "Toggle random mode" msgstr "Přepnout náhodný režim" #: src/command.c:146 msgid "Toggle single mode" msgstr "Přepnout jednoduchý mód" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Přepnout režim konzumace" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Zapnout režim přerušení" #: src/command.c:152 msgid "Start a music database update" msgstr "Spustit aktualizaci databáze skladeb" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Přidat url/soubor do seznamu skladeb" #: src/command.c:159 msgid "Go to root directory" msgstr "Přejít do kořenového adresáře" #: src/command.c:161 msgid "Go to parent directory" msgstr "Přejít do nadřazeného adresáře" #: src/command.c:164 msgid "Locate song in browser" msgstr "Najít skladbu v prohlížeči" #: src/command.c:168 msgid "Move item up" msgstr "Přesunout položku výše" #: src/command.c:170 msgid "Move item down" msgstr "Přesunout položku níže" #: src/command.c:172 msgid "Refresh screen" msgstr "Aktualizovat obrazovku" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Přepnout na režim vyhledávání" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Zapnout režim automatické centrování" #: src/command.c:188 msgid "Next screen" msgstr "Další obrazovka" #: src/command.c:190 msgid "Previous screen" msgstr "Předchozí obrazovka" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Přepnout na nedávnou obrazovku" #: src/command.c:197 msgid "Forward find" msgstr "Najít vpřed" #: src/command.c:199 msgid "Forward find next" msgstr "Najít další vpřed" #: src/command.c:201 msgid "Backward find" msgstr "Najít zpět" #: src/command.c:203 msgid "Backward find previous" msgstr "Najít předchozí" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Skočit na" #: src/command.c:214 msgid "Artist screen" msgstr "Obrazovka interpretů" #: src/command.c:220 msgid "Change search mode" msgstr "Změnit režim hledání" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Zobrazit vybranou a v současnosti přehrávanou píseň" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Přerušit akci" #: src/command.c:234 msgid "Update Lyrics" msgstr "Aktualizovat text písně" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Nedefinováno" #: src/command.c:292 msgid "Space" msgstr "Mezera" #: src/command.c:294 msgid "Enter" msgstr "Vstup" #: src/command.c:296 msgid "Backspace" msgstr "Zpět" #: src/command.c:298 msgid "Delete" msgstr "Odstranit" #: src/command.c:300 msgid "Up" msgstr "Nahoru" #: src/command.c:302 msgid "Down" msgstr "Dolů" #: src/command.c:304 msgid "Left" msgstr "Doleva" #: src/command.c:306 msgid "Right" msgstr "Doprava" #: src/command.c:308 msgid "Home" msgstr "Domů" #: src/command.c:310 msgid "End" msgstr "Konec" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Klávesa %s je přiřazena k %s a %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Neznámý příkaz" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Varování: Neznámé barevné pole - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminál postrádá podporu změny barev" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminál postrádá podporu barev" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Chyba" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Neplatná definice klávesové zkratky" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Neznámý příkaz" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Neúplné nastavení klávesových zkratek" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Chybný typ zobrazení času" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Chybí '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Chybné jméno barvy" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Neúplná definice barvy" #: src/conf.c:269 msgid "Invalid number" msgstr "Neplatné číslo" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Neplatná definice barvy" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Neznámé jméno obrazovky" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Chybný vyhledávací mód" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Neznámý vyhledávací mód" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Neznámý parametr nastavení" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Konki https://launchpad.net/~pavel-konkol\n" " Vojtěch Trefný https://launchpad.net/~vojtech.trefny\n" " Zbyněk Schwarz https://launchpad.net/~tsbook" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Výběr rozsahu vypnut" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Výběr rozsahu zapnut" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Smazat seznam skladeb %s[%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Chyba: Příliš malá obrazovka" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varování: Neznámá barva - %s\n" #~ msgid "Connected to %s" #~ msgstr "Připojeno k %s" #~ msgid "Shuffled playlist" #~ msgstr "Seznam skladeb zamíchán" #~ msgid "Cleared playlist" #~ msgstr "Seznam skladeb smazán" #~ msgid "Save playlist as" #~ msgstr "Uložit seznam skladeb jako" #~ msgid "Playlist" #~ msgstr "Seznam skladeb" #~ msgid "Playlist on %s" #~ msgstr "Seznam skladeb %s" #~ msgid "Playlist screen" #~ msgstr "Obrazovka seznamu skladeb" #~ msgid "Shuffle playlist" #~ msgstr "Zamíchat seznam skladeb" #~ msgid "Clear playlist" #~ msgstr "Vyčistit seznam skladeb" #~ msgid "Save playlist" #~ msgstr "Uložit seznam skladeb" #~ msgid "Volume n/a " #~ msgstr "Hlasitost n/a " #~ msgid " Volume %d%%" #~ msgstr " Hlasitost %d%%" #~ msgid "Explicitly download lyrics" #~ msgstr "Výslověn stažený text psíně" ncmpc-0.27/po/da.po0000644000076400001440000006362613064033560011042 00000000000000# Danish (Dansk) # Copyright (C) 2006 Mikkel Kirkgaard Nielsen # This file is distributed under the same license as the ncmpc package. # Mikkel Kirkgaard Nielsen , 2006 # msgid "" msgstr "" "Project-Id-Version: ncmpc 0.11.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2009-09-24 10:26+0200\n" "Last-Translator: Niels Anker \n" "Language-Team: da \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-09-24 08:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Forbinder til %s... [Tryk %s for at afbryde]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Fejl: MPD version %d.%d.%d er for gammel (mindst %s er nødvendig)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "tryk på %s for at redigere" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Gentagelse er slået til" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Gentagelse er slået fra" #: src/screen.c:163 msgid "Random mode is on" msgstr "Tilfældig orden slået til" #: src/screen.c:164 msgid "Random mode is off" msgstr "Tilfældig orden slået fra" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Single afspilning slået til" #: src/screen.c:174 msgid "Single mode is off" msgstr "Single afspilning slået fra" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "\"Consume mode\" er slået til" #: src/screen.c:183 msgid "Consume mode is off" msgstr "\"Consume mode\" er slået fra" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Crossfade %d sekunder" #: src/screen.c:198 msgid "Database updated" msgstr "Databasen er opdateret" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Søg (begynd forfra)" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Søg normalt (start/slut)" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Automatisk centrering er aktiv" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Automatisk centrering er inaktiv" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Alle spor" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Alle kunstnere" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Album fra kunstneren: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Alle spor fra kunstneren: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "Album fra kunstneren: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "Henter %s..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "Tilføjer mappen %s...\n" #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Henter %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Tilføjer '%s' til listen" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Databasen opdateres..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Database opdatering af %s startet" #: src/screen_client.c:52 msgid "Database update started" msgstr "Database opdatering startet" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Søg" #: src/screen_find.c:30 msgid "Find backward" msgstr "Søg (baglæns)" #: src/screen_find.c:31 msgid "Jump" msgstr "Spring" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Kan ikke finde '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Erstat '%s' [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Adgangskode" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Erstat '%s' [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Afbrudt" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Gemt %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Tilføj" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Sletning af dette emne ikke muligt" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Slet afspilningsliste" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Afspilningslisten slettet" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Gennemse" #: src/screen_search.c:46 msgid "artist" msgstr "kunstner" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titel" #: src/screen_search.c:49 msgid "track" msgstr "spor" #: src/screen_search.c:50 msgid "name" msgstr "navn" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "dato" #: src/screen_search.c:53 msgid "composer" msgstr "komponist" #: src/screen_search.c:54 msgid "performer" msgstr "udførende" #: src/screen_search.c:55 msgid "comment" msgstr "kommentar" #: src/screen_search.c:62 msgid "file" msgstr "fil" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titel" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Kunstner" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Filnavn" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Kunstner + Titel" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Ugyldigt søge tag %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Inter argument for søge tag %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Søg" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Tryk på %s for en ny søgning" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Søg: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Søg: Resultater for %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Tryk på %s for en ny søgning [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Søg efter: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Taste bindinger opdaterede" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Taste bindinger uændrede!" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Fejl: Kunne ikke oprette mappe ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Fejl: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Skrev %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Slettet" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Ny tast for %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Tasten %s anvendes allerede til %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Tildelt %s til %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "==> Anvend taste bindinger " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "==> Anvend og gem taste bindinger " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Definér ny tast" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "OBS! Du glemte vel ikke at 'anvende' dine ændringer?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Modificer taste bindinger" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Modificer tast for '%s'" #: src/screen_help.c:39 msgid "Movement" msgstr "Navigation" #: src/screen_help.c:84 msgid "Global" msgstr "Globale" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Tastdefinitions skærm" #: src/screen_help.c:121 msgid "Play" msgstr "Afspil" #: src/screen_help.c:124 msgid "Move song up" msgstr "Flyt markøren op i afspilningslisten" #: src/screen_help.c:125 msgid "Move song down" msgstr "Flyt markøren ned i afspilningslisten" #: src/screen_help.c:128 msgid "Center" msgstr "Centrer" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Gennemse" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Skift til bibliotek/Tilføj til afspilningslisten og afspil" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Tilføj spor til afspilningsliste" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Slet afspilningsliste" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Database søgning" #: src/screen_help.c:151 msgid "Select and play" msgstr "Vælg og afspil" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Sangtekst skærm" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Gennemse sangtekster" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Gen)indlæs santekster" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Abryd hentning" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Download tekst for det nummer der afspilles" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Gem sagtekster" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Gem sagtekster" #: src/screen_help.c:170 #, fuzzy msgid "Delete saved lyrics" msgstr "Gem sagtekster" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Output skærm" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Slå output til/fra" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Næste skærm" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Tastdefinitions skærm" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Redigér tastdefinitioner for udvalgte kommandoer" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Fjern valgte tastdefinitioner" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Definér ny tast" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Gå et niveau op" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Anvend og gem ændringer" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Hjælp" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Ingen sangtekster" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Sangtekster" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "indlæser..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Sangtekster gemt" #: src/screen_lyrics.c:443 #, fuzzy msgid "Lyrics deleted" msgstr "Afspilningslisten slettet" #: src/screen_lyrics.c:446 #, fuzzy msgid "No saved lyrics" msgstr "Gem sagtekster" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Output '%s' slået til" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Output '%s' slået fra" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Output" #: src/screen_song.c:49 msgid "Length" msgstr "Længde" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Komponist" #: src/screen_song.c:52 msgid "Name" msgstr "Navn" #: src/screen_song.c:53 msgid "Disc" msgstr "Disk" #: src/screen_song.c:54 msgid "Track" msgstr "Spor" #: src/screen_song.c:55 msgid "Date" msgstr "Dato" #: src/screen_song.c:56 msgid "Genre" msgstr "Genre" #: src/screen_song.c:57 msgid "Comment" msgstr "Kommentar" #: src/screen_song.c:58 msgid "Path" msgstr "Sti" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bithastighed" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Antal kunstnere" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Antal albums" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Antal sange" #: src/screen_song.c:79 msgid "Uptime" msgstr "Oppetid" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Seneste db opdatering" #: src/screen_song.c:81 msgid "Playtime" msgstr "Spilletid" #: src/screen_song.c:82 msgid "DB playtime" msgstr "DB spilletid" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Sang viser" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD statistik" #: src/screen_song.c:410 msgid "Selected song" msgstr "Valgt nummer" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Nummer der afspilles" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kb/sek" #: src/status_bar.c:121 msgid "Playing:" msgstr "Afspiller:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pause]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volumen: n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volumen: %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Taste konfigurations skærm" #: src/command.c:66 msgid "Quit" msgstr "Afslut" #: src/command.c:70 msgid "Move cursor up" msgstr "Flyt markør op" #: src/command.c:72 msgid "Move cursor down" msgstr "Flyt markør ned" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Flyt cursor til toppen af skærmen" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Flyt cursor til midten af skærmen" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Flyt cursor til bunden af skærmen" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Flyt cursor til toppen af listen" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Flyt cursor til bunden af listen" #: src/command.c:84 msgid "Page up" msgstr "Side op" #: src/command.c:86 msgid "Page down" msgstr "Side ned" #: src/command.c:88 msgid "Range selection" msgstr "Valg af interval" #: src/command.c:90 msgid "Scroll down one line" msgstr "Scroll en linie ned" #: src/command.c:92 msgid "Scroll up one line" msgstr "Scroll en linie op" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Scroll en halv skærm op" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Scroll en halv skærm ned" #: src/command.c:98 msgid "Select currently playing song" msgstr "Vælg den sang der spilles nu" #: src/command.c:103 msgid "Help screen" msgstr "Hjælp" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Afspil/Gå til mappe" #: src/command.c:114 msgid "Pause" msgstr "Pause" #: src/command.c:116 msgid "Stop" msgstr "Stop" #: src/command.c:118 msgid "Crop" msgstr "Beskær" #: src/command.c:120 msgid "Next track" msgstr "Næste" #: src/command.c:122 msgid "Previous track" msgstr "Forrige" #: src/command.c:124 msgid "Seek forward" msgstr "Søg fremad" #: src/command.c:126 msgid "Seek backward" msgstr "Søg tilbage" #: src/command.c:128 msgid "Increase volume" msgstr "Hæv volumen" #: src/command.c:130 msgid "Decrease volume" msgstr "Sænk volumen" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Marker/afmarker sang i afspilningsliste" #: src/command.c:134 msgid "Select all listed items" msgstr "Vælg alle emner på listen" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Slet sang fra afspilningsliste" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Aktiver/deaktiver gentag" #: src/command.c:144 msgid "Toggle random mode" msgstr "Aktiver/deaktiver tilfældigt valg" #: src/command.c:146 msgid "Toggle single mode" msgstr "Aktiver/deaktiver enkelt valg" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Aktiver/deaktiver consume valg" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Aktiver/deaktiver crossfade mellem sange" #: src/command.c:152 msgid "Start a music database update" msgstr "Opdater databasen" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Tilføj URL eller fil til afspilningslisten" #: src/command.c:159 msgid "Go to root directory" msgstr "Gå til rod mappen" #: src/command.c:161 msgid "Go to parent directory" msgstr "Gå til forældre mappe" #: src/command.c:164 msgid "Locate song in browser" msgstr "Lokaliser sang i browseren" #: src/command.c:168 msgid "Move item up" msgstr "Flyt op" #: src/command.c:170 msgid "Move item down" msgstr "Flyt ned" #: src/command.c:172 msgid "Refresh screen" msgstr "Genopfrisk skærm" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Ændre søge tilstand" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Aktiver/deaktiver automatisk centrering" #: src/command.c:188 msgid "Next screen" msgstr "Næste skærm" #: src/command.c:190 msgid "Previous screen" msgstr "Forrige skærm" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Skift til seneste skærm" #: src/command.c:197 msgid "Forward find" msgstr "Søg" #: src/command.c:199 msgid "Forward find next" msgstr "Gentag søg" #: src/command.c:201 msgid "Backward find" msgstr "Søg baglæns" #: src/command.c:203 msgid "Backward find previous" msgstr "Gentag søg baglæns" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Spring til" #: src/command.c:214 msgid "Artist screen" msgstr "Kunstner skærm" #: src/command.c:220 msgid "Change search mode" msgstr "Ændre søge tilstand" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Vis valgte numre og det der afspilles" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Afbryd action" #: src/command.c:234 msgid "Update Lyrics" msgstr "Opdater sangtekster" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Udefineret" #: src/command.c:292 msgid "Space" msgstr "Mellemrum" #: src/command.c:294 msgid "Enter" msgstr "Retur" #: src/command.c:296 msgid "Backspace" msgstr "Tilbagetast" #: src/command.c:298 msgid "Delete" msgstr "Slet" #: src/command.c:300 msgid "Up" msgstr "Op" #: src/command.c:302 msgid "Down" msgstr "Ned" #: src/command.c:304 msgid "Left" msgstr "Venstre" #: src/command.c:306 msgid "Right" msgstr "Højre" #: src/command.c:308 msgid "Home" msgstr "Hjem" #: src/command.c:310 msgid "End" msgstr "Slut" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Skift+Tabulator" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Indsæt" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Tast %s tildelt %s og %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Ukendt kommando" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Advarsel: Ukendt farve felt - %s.\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminalen understøtter ikke at ændre farver" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminalen understøtter ikke farver" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Fejl" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Forkert hotkey definition" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Ukendt kommando" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Ufuldstændig hotkey konfiguration" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Ringe tidsvisningstype" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Mangler '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Dårligt farvenavn" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Ufuldstændig farve definition" #: src/conf.c:269 msgid "Invalid number" msgstr "Ugyldigt tal." #: src/conf.c:277 msgid "Malformed color definition" msgstr "Forkert farve definition" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Ukendt skærm navn" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Ugyldig søgetilstand" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Ukendt søgetilstand" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Ukendt konfigurations parameter" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc\n" " Niels Anker https://launchpad.net/~nanker" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Valg af interval slået fra" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Valg af interval slået til" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Slet '%s' [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Fejl: Skærm for lille" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advarsel: Ukendt farve - %s\n" #~ msgid "Connected to %s" #~ msgstr "Forbundet til %s" #~ msgid "Shuffled playlist" #~ msgstr "Afspilninsglisten blandet" #~ msgid "Cleared playlist" #~ msgstr "Sletter afspilningslisten" #~ msgid "Save playlist as" #~ msgstr "Gem afspilningslisten som" #~ msgid "Playlist" #~ msgstr "Afspilningsliste" #~ msgid "Playlist on %s" #~ msgstr "Afspilningsliste på %s" #~ msgid "Playlist screen" #~ msgstr "Afspilningsliste" #~ msgid "Shuffle playlist" #~ msgstr "Bland rækkefølgen i afspilningslisten" #~ msgid "Clear playlist" #~ msgstr "Slet afspilningslisten" #~ msgid "Save playlist" #~ msgstr "Gem afspilningslisten" #~ msgid "Search: " #~ msgstr "Søg: " #~ msgid "Explicitly download lyrics" #~ msgstr "Hent kun sangtekster" #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "Tast %s bundet til kommando %s og %s (tryk på %s for at redigere)" #~ msgid "Clock" #~ msgstr "Ur" #~ msgid "Clock screen" #~ msgstr "Ur" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Fejl: Kan ikke konvertere karakter til %s" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Fejl: Kan ikke konvertere karakter til UTF-8" ncmpc-0.27/po/de.po0000644000076400001440000006655713064033560011054 00000000000000# German # Copyright (C) 2004 Kalle Wallin # This file is distributed under the same license as the ncmpc package. # Ingmar Gebert, 2004 # # msgid "" msgstr "" "Project-Id-Version: ncmpc 0.12\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-06-21 08:19+0000\n" "Last-Translator: Christoph Mende \n" "Language-Team: de \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Verbinde mit %s… [%s drücken, um abzubrechen]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Fehler: MPD-Version %d.%d.%d ist zu alt (%s wird benötigt)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "drücken Sie %s für den Tasteneditor" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Wiederhol-Modus ist aktiviert" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Wiederhol-Modus ist deaktiviert" #: src/screen.c:163 msgid "Random mode is on" msgstr "Zufalls-Modus ist aktiviert" #: src/screen.c:164 msgid "Random mode is off" msgstr "Zufalls-Modus ist deaktiviert" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Einzelabspiel-Modus ist aktiviert" #: src/screen.c:174 msgid "Single mode is off" msgstr "Einzelabspiel-Modus ist deaktiviert" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Verbrauchs-Modus Aktiviert" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Verbrauchs-Modus Deaktiviert" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "%d Sekunden Crossfade" #: src/screen.c:198 msgid "Database updated" msgstr "Datenbank aktualisiert" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Suchmodus: Wrapped" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Suchmodus: Normal" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Autozentriermodus: an" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Autozentriermodus: aus" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Alle Stücke" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Alle Künstler" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Alben des Künstlers: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Alle Lieder des Künstlers: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Titel von keinem Album des Künstlers: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Füge Album %s... hinzu" #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Hinzufügen %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Lade Playlist %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Füge '%s' der Playlist hinzu" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Datenbankaktualisierung läuft..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Datenbankaktualisierung von %s gestartet" #: src/screen_client.c:52 msgid "Database update started" msgstr "Datenbankaktualisierung gestartet" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Suche" #: src/screen_find.c:30 msgid "Find backward" msgstr "Suche rückwärts" #: src/screen_find.c:31 msgid "Jump" msgstr "Springe zu" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Kann '%s' nicht finden" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Ersetze %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Passwort" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Ersetze %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Abbruch" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s gespeichert" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Hinzufügen" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Dieses Objekt kann nicht gelöscht werden" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Lösche Playlist" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Playlist gelöscht" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Stöbern" #: src/screen_search.c:46 msgid "artist" msgstr "Künstler" #: src/screen_search.c:47 msgid "album" msgstr "Album" #: src/screen_search.c:48 msgid "title" msgstr "Titel" #: src/screen_search.c:49 msgid "track" msgstr "Stück" #: src/screen_search.c:50 msgid "name" msgstr "Name" #: src/screen_search.c:51 msgid "genre" msgstr "Genre" #: src/screen_search.c:52 msgid "date" msgstr "Datum" #: src/screen_search.c:53 msgid "composer" msgstr "Komponist" #: src/screen_search.c:54 msgid "performer" msgstr "Aufführung" #: src/screen_search.c:55 msgid "comment" msgstr "Anmerkung" #: src/screen_search.c:62 msgid "file" msgstr "Datei" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titel" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Künstler" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Dateiname" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Künstler + Titel" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Tag nicht erkannt: %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Kein Argument für Tag %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Suche" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Drücke %s für eine neue Suche" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Suche: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Suche: Ergebnisse für %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Suche: Drücke %s für eine neue Suche [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Suchmodus: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Du hast eine neue Tastenbelegung" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Tastenbelegung unverändert." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Fehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellen" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Fehler: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s geschrieben" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Gelöscht" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Gib neue Taste für %s ein: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Fehler: Taste %s wird bereits benutzt für %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s wurde %s zugeordnet" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Tastenbelegung anwenden " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Tastenbelegung speichern und anwenden " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Füge neue Taste hinzu" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Tipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Editiere Tastenbelegungen" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Editiere Tasten für %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Bewegung" #: src/screen_help.c:84 msgid "Global" msgstr "Global" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Tastenbelegungsanzeige" #: src/screen_help.c:121 msgid "Play" msgstr "Abspielen" #: src/screen_help.c:124 msgid "Move song up" msgstr "Stück nach oben bewegen" #: src/screen_help.c:125 msgid "Move song down" msgstr "Stück nach unten bewegen" #: src/screen_help.c:128 msgid "Center" msgstr "Zentrieren" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Anzeige durchstöbern" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Verzeichnis öffnen/Stück auswählen und abspielen" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Song zur Playlist hinzufügen" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Lösche Playlist" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Suchanzeige" #: src/screen_help.c:151 msgid "Select and play" msgstr "Auswählen und abspielen" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Liedtextanzeige" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Liedtext lesen" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "Text (neu) laden" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Laden unterbrechen" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Liedtexte für aktuell laufendes Stück herunterladen" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Keine gespeicherten Texte" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Liedtext speichern" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Lösche gespeicherte Texte" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Anzeige der Ausgabegeräte" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Ausgabegerät aktivieren/deaktivieren" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Nächste Anzeige" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Tastenbelegungsanzeige" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Tastenbelegung für ausgewählten Befehl bearbeiten" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Ausgewählte Tastenbelegung entfernen" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Füge neue Taste hinzu" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Eine Ebene nach oben" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Änderungen bestätigen und speichern" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Hilfe" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Kein Liedtext verfügbar" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Liedtexte" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "lade..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Liedtext gespeichert" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Texte gelöscht" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Keine gespeicherten Texte" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Ausgabegerät '%s' aktiviert" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Ausgabegerät '%s' deaktiviert" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Ausgabegeräte" #: src/screen_song.c:49 msgid "Length" msgstr "Länge" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Komponist" #: src/screen_song.c:52 msgid "Name" msgstr "Name" #: src/screen_song.c:53 msgid "Disc" msgstr "CD" #: src/screen_song.c:54 msgid "Track" msgstr "Stück" #: src/screen_song.c:55 msgid "Date" msgstr "Datum" #: src/screen_song.c:56 msgid "Genre" msgstr "Genre" #: src/screen_song.c:57 msgid "Comment" msgstr "Anmerkung" #: src/screen_song.c:58 msgid "Path" msgstr "Pfad" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitrate" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Anzahl der Künstler" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Anzahl der Alben" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Anzahl der Lieder" #: src/screen_song.c:79 msgid "Uptime" msgstr "Laufzeit" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Letzte db-Aktualisierung" #: src/screen_song.c:81 msgid "Playtime" msgstr "Spielzeit" #: src/screen_song.c:82 msgid "DB playtime" msgstr "DB Spielzeit" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Liedbetrachter" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD Statistik" #: src/screen_song.c:410 msgid "Selected song" msgstr "Lied anzeigen" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Gerade laufendes Lied" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Spiele:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pause]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Lautstärke n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Lautstärke %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Tastenkonfigurationsanzeige" #: src/command.c:66 msgid "Quit" msgstr "Beenden" #: src/command.c:70 msgid "Move cursor up" msgstr "Cursor nach oben bewegen" #: src/command.c:72 msgid "Move cursor down" msgstr "Cursor nach unten bewegen" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Markierung an den Anfang der Anzeige setzen" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Markierung in die Mitte der Anzeige setzen" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Markierung ans Ende der Anzeige setzen" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Markierung an den Anfang der Liste setzen" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Markierung ans Ende der Liste setzen" #: src/command.c:84 msgid "Page up" msgstr "Bild auf" #: src/command.c:86 msgid "Page down" msgstr "Bild ab" #: src/command.c:88 msgid "Range selection" msgstr "Mehrfachauswahl" #: src/command.c:90 msgid "Scroll down one line" msgstr "Eine Zeile nach unten scrollen" #: src/command.c:92 msgid "Scroll up one line" msgstr "Eine Zeile nach oben scrollen" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Die halbe Anzeige nach oben scrollen" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Die halbe Anzeige nach unten scrollen" #: src/command.c:98 msgid "Select currently playing song" msgstr "Derzeit spielenden Song auswählen" #: src/command.c:103 msgid "Help screen" msgstr "Hilfeanzeige" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Abspielen/Verzeichnis öffnen" #: src/command.c:114 msgid "Pause" msgstr "Pause" #: src/command.c:116 msgid "Stop" msgstr "Stop" #: src/command.c:118 msgid "Crop" msgstr "Playlist auf das markierte Lied reduzieren" #: src/command.c:120 msgid "Next track" msgstr "Nächstes Stück" #: src/command.c:122 msgid "Previous track" msgstr "Vorheriges Stück" #: src/command.c:124 msgid "Seek forward" msgstr "Vorspulen" #: src/command.c:126 msgid "Seek backward" msgstr "Zurückspulen" #: src/command.c:128 msgid "Increase volume" msgstr "Lautstärke erhöhen" #: src/command.c:130 msgid "Decrease volume" msgstr "Lautstärke verringern" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Wähle Stück in der Playlist an/ab" #: src/command.c:134 msgid "Select all listed items" msgstr "Alle angezeigten Lieder zur Playlist hinzufügen" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Lösche Song aus der Playlist" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Schalte Wiederholungswiedergabe ein/aus" #: src/command.c:144 msgid "Toggle random mode" msgstr "Schalte Zufallswiedergabe ein/aus" #: src/command.c:146 msgid "Toggle single mode" msgstr "Einzelabspiel-Modus umschalten" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Verbrauchs-Modus Umschalten" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Schalte Crossfade-Wiedergabe ein/aus" #: src/command.c:152 msgid "Start a music database update" msgstr "Starte eine Aktualisierung der Musikdatenbank" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Füge eine URL/Datei der Playlist hinzu" #: src/command.c:159 msgid "Go to root directory" msgstr "Basis-Verzeichnis öffnen" #: src/command.c:161 msgid "Go to parent directory" msgstr "Übergeordnetes Verzeichnis öffnen" #: src/command.c:164 msgid "Locate song in browser" msgstr "Lied in Datenbank orten" #: src/command.c:168 msgid "Move item up" msgstr "Bewege es nach oben" #: src/command.c:170 msgid "Move item down" msgstr "Bewege es nach unten" #: src/command.c:172 msgid "Refresh screen" msgstr "Aktualisiere Anzeige" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Wechsle den Suchmodus" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Schalte den Autozentrier-Modus ein/aus" #: src/command.c:188 msgid "Next screen" msgstr "Nächste Anzeige" #: src/command.c:190 msgid "Previous screen" msgstr "Vorherige Anzeige" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Wechsle zur zuletzt benutzten Anzeige" #: src/command.c:197 msgid "Forward find" msgstr "Vorwärtssuche" #: src/command.c:199 msgid "Forward find next" msgstr "Vorwärtssuche fortsetzen" #: src/command.c:201 msgid "Backward find" msgstr "Rückwärtssuche" #: src/command.c:203 msgid "Backward find previous" msgstr "Rückwärtssuche fortsetzen" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Springe zu" #: src/command.c:214 msgid "Artist screen" msgstr "Künstlerdatenbank" #: src/command.c:220 msgid "Change search mode" msgstr "Suchmodus wechseln" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Zeige das ausgewählte und das gerade laufende Lied an" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Kommando Unterbrechen" #: src/command.c:234 msgid "Update Lyrics" msgstr "Liedtext aktualisieren" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Undefiniert" #: src/command.c:292 msgid "Space" msgstr "Leertaste" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Entf" #: src/command.c:300 msgid "Up" msgstr "Oben" #: src/command.c:302 msgid "Down" msgstr "Unten" #: src/command.c:304 msgid "Left" msgstr "Links" #: src/command.c:306 msgid "Right" msgstr "Rechts" #: src/command.c:308 msgid "Home" msgstr "Pos1" #: src/command.c:310 msgid "End" msgstr "Ende" #: src/command.c:312 msgid "PageDown" msgstr "Bild ab" #: src/command.c:314 msgid "PageUp" msgstr "Bild auf" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Einfg" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Taste %s ist %s und %s zugeordnet" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Unbekannter Befehl" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Warnung: Unbekanntes Farbfeld - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Das Terminal unterstützt keine Farbwechsel" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Das Terminal unterstützt keine Farben" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Fehler" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Fehlerhafte Definition der Tastenbelegung" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Unbekannter Befehl" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Unvollständige Konfiguration für Tastenbelegung" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Ungültige Anzeigeart" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Es fehlt ein '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Ungültiger Farbname" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Unvollständige Farbkonfiguration" #: src/conf.c:269 msgid "Invalid number" msgstr "Ungültige Zahl" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Fehlerhafte Farbdefinition" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Unbekannter Anzeigenname" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Ungültiger Suchmodus" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Unbekannter Suchmodus" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Unbekannter Konfigurationsparameter" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Übersetzer\n" "\n" "Launchpad Contributions:\n" " BBO https://launchpad.net/~bbo\n" " Christoph Mende https://launchpad.net/~cmende\n" " Max Kellermann https://launchpad.net/~max-duempel\n" " Monika Brinkert https://launchpad.net/~moni-sunpig\n" " Samuel Creshal https://launchpad.net/~samuel-creshal\n" " cmdrhenner https://launchpad.net/~cmdrhenner" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Mehrfachauswahl deaktiviert" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Mehrfachauswahl aktiviert" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Lösche Playlist %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Fehler: Anzeige zu klein" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Warnung: Unbekannte Farbe - %s\n" #~ msgid "Connected to %s" #~ msgstr "Verbunden mit %s" #~ msgid "Shuffled playlist" #~ msgstr "Playlist gemischt" #~ msgid "Cleared playlist" #~ msgstr "Playlist gelöscht" #~ msgid "Save playlist as" #~ msgstr "Speichere Playlist als" #~ msgid "Playlist" #~ msgstr "Playlist" #~ msgid "Playlist on %s" #~ msgstr "Playlist auf %s" #~ msgid "Playlist screen" #~ msgstr "Playlistenanzeige" #~ msgid "Shuffle playlist" #~ msgstr "Mische Playlist" #~ msgid "Clear playlist" #~ msgstr "Lösche Playlist" #~ msgid "Save playlist" #~ msgstr "Speichere Playlist" #~ msgid "Volume n/a " #~ msgstr "Lautstärke n/a " #~ msgid " Volume %d%%" #~ msgstr " Lautstärke %d%%" #~ msgid "Adding directory %s...\n" #~ msgstr "Füge Verzeichnis %s hinzu...\n" #~ msgid "You can only delete playlists" #~ msgstr "Du kannst nur Playlisten löschen" #~ msgid "Browse: %s" #~ msgstr "Stöbern: %s" #~ msgid "Search: " #~ msgstr "Suche: " #~ msgid "Explicitly download lyrics" #~ msgstr "Texte explizit herunterladen" #~ msgid "Home " #~ msgstr "Anfang " #~ msgid "End " #~ msgstr "Ende " #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "Taste %s ist %s und %s zugeordnet (drücke %s für den Tasteneditor)" #~ msgid "Clock" #~ msgstr "Uhr" #~ msgid "Lyrics [No connection]" #~ msgstr "Liedtext [keine Verbindung]" #~ msgid "Lyrics [Not found]" #~ msgstr "Liedtext [Text nicht gefunden]" #~ msgid "Lyrics [retrieving]" #~ msgstr "Liedtexte [Lade...]" #~ msgid "Clock screen" #~ msgstr "Uhr-Anzeige" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Fehler: kann Zeichen nicht nach %s konvertieren" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Fehler: kann Zeichen nicht nach UTF-8 konvertieren" #~ msgid "DB last updated" #~ msgstr "DB zuletzt aktualisiert" ncmpc-0.27/po/eo.po0000644000076400001440000005054313064033560011053 00000000000000# Esperanto translation for ncmpc # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-05-16 15:13+0000\n" "Last-Translator: Aleksej \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Konektiĝado al %s... [Premu %s por ĉesigi]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Problemo: la versio %d.%d.%d de MPD estas tro malnova (necesas %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "" #: src/screen.c:163 msgid "Random mode is on" msgstr "" #: src/screen.c:164 msgid "Random mode is off" msgstr "" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "" #: src/screen.c:174 msgid "Single mode is off" msgstr "" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "" #: src/screen.c:183 msgid "Consume mode is off" msgstr "" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "" #: src/screen.c:198 msgid "Database updated" msgstr "Ĝisdatigis datumbazon" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "" #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "" #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "" #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Aldonas \"%s\" al la ludlisto" #: src/screen_client.c:41 msgid "Database update running..." msgstr "" #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "" #: src/screen_client.c:52 msgid "Database update started" msgstr "" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "" #: src/screen_find.c:30 msgid "Find backward" msgstr "" #: src/screen_find.c:31 msgid "Jump" msgstr "" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Ne troviĝis \"%s\"" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, c-format msgid "%s [%s/%s] " msgstr "" #: src/screen_utils.c:121 msgid "Password" msgstr "" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, c-format msgid "Replace %s?" msgstr "" #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Aldoni" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "" #: src/screen_file.c:213 #, c-format msgid "Delete playlist %s?" msgstr "" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "" #: src/screen_search.c:46 msgid "artist" msgstr "" #: src/screen_search.c:47 msgid "album" msgstr "" #: src/screen_search.c:48 msgid "title" msgstr "" #: src/screen_search.c:49 msgid "track" msgstr "" #: src/screen_search.c:50 msgid "name" msgstr "" #: src/screen_search.c:51 msgid "genre" msgstr "" #: src/screen_search.c:52 msgid "date" msgstr "dato" #: src/screen_search.c:53 msgid "composer" msgstr "" #: src/screen_search.c:54 msgid "performer" msgstr "" #: src/screen_search.c:55 msgid "comment" msgstr "" #: src/screen_search.c:62 msgid "file" msgstr "dosiero" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titolo" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "" #: src/screen_search.c:83 msgid "Filename" msgstr "Dosiernomo" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "" #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "" #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "" #: src/screen_keydef.c:347 msgid "Add new key" msgstr "" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "" #: src/screen_help.c:39 msgid "Movement" msgstr "" #: src/screen_help.c:84 msgid "Global" msgstr "" #: src/screen_help.c:119 src/command.c:105 msgid "Queue screen" msgstr "" #: src/screen_help.c:121 msgid "Play" msgstr "" #: src/screen_help.c:124 msgid "Move song up" msgstr "" #: src/screen_help.c:125 msgid "Move song down" msgstr "" #: src/screen_help.c:128 msgid "Center" msgstr "" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "" #: src/screen_help.c:138 src/screen_help.c:153 msgid "Append song to queue" msgstr "" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "" #: src/screen_help.c:151 msgid "Select and play" msgstr "" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "" #: src/screen_help.c:182 src/command.c:248 msgid "Chat screen" msgstr "" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "" #: src/screen_help.c:193 msgid "Add a keydef" msgstr "" #: src/screen_help.c:194 msgid "Go up a level" msgstr "" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Helpo" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "" #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "" #: src/screen_song.c:49 msgid "Length" msgstr "" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "" #: src/screen_song.c:52 msgid "Name" msgstr "" #: src/screen_song.c:53 msgid "Disc" msgstr "" #: src/screen_song.c:54 msgid "Track" msgstr "" #: src/screen_song.c:55 msgid "Date" msgstr "" #: src/screen_song.c:56 msgid "Genre" msgstr "" #: src/screen_song.c:57 msgid "Comment" msgstr "" #: src/screen_song.c:58 msgid "Path" msgstr "" #: src/screen_song.c:59 msgid "Bitrate" msgstr "" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "" #: src/screen_song.c:77 msgid "Number of albums" msgstr "" #: src/screen_song.c:78 msgid "Number of songs" msgstr "" #: src/screen_song.c:79 msgid "Uptime" msgstr "" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "" #: src/screen_song.c:81 msgid "Playtime" msgstr "" #: src/screen_song.c:82 msgid "DB playtime" msgstr "" #: src/screen_song.c:171 msgid "Song viewer" msgstr "" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "" #: src/screen_song.c:410 msgid "Selected song" msgstr "" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "" #: src/status_bar.c:121 msgid "Playing:" msgstr "" #: src/status_bar.c:124 msgid "[Paused]" msgstr "" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "" #: src/command.c:63 msgid "Key configuration screen" msgstr "" #: src/command.c:66 msgid "Quit" msgstr "" #: src/command.c:70 msgid "Move cursor up" msgstr "" #: src/command.c:72 msgid "Move cursor down" msgstr "" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "" #: src/command.c:84 msgid "Page up" msgstr "" #: src/command.c:86 msgid "Page down" msgstr "" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "" #: src/command.c:112 msgid "Play/Enter directory" msgstr "" #: src/command.c:114 msgid "Pause" msgstr "" #: src/command.c:116 msgid "Stop" msgstr "" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "" #: src/command.c:122 msgid "Previous track" msgstr "" #: src/command.c:124 msgid "Seek forward" msgstr "" #: src/command.c:126 msgid "Seek backward" msgstr "" #: src/command.c:128 msgid "Increase volume" msgstr "" #: src/command.c:130 msgid "Decrease volume" msgstr "" #: src/command.c:132 msgid "Select/deselect song in queue" msgstr "" #: src/command.c:134 msgid "Select all listed items" msgstr "" #: src/command.c:136 msgid "Delete song from queue" msgstr "" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "" #: src/command.c:144 msgid "Toggle random mode" msgstr "" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "" #: src/command.c:152 msgid "Start a music database update" msgstr "" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 msgid "Add url/file to queue" msgstr "" #: src/command.c:159 msgid "Go to root directory" msgstr "" #: src/command.c:161 msgid "Go to parent directory" msgstr "" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "" #: src/command.c:170 msgid "Move item down" msgstr "" #: src/command.c:172 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "" #: src/command.c:188 msgid "Next screen" msgstr "" #: src/command.c:190 msgid "Previous screen" msgstr "" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "" #: src/command.c:199 msgid "Forward find next" msgstr "" #: src/command.c:201 msgid "Backward find" msgstr "" #: src/command.c:203 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "" #: src/command.c:214 msgid "Artist screen" msgstr "" #: src/command.c:220 msgid "Change search mode" msgstr "" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "" #: src/command.c:234 msgid "Update Lyrics" msgstr "" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "" #: src/command.c:292 msgid "Space" msgstr "" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "" #: src/command.c:302 msgid "Down" msgstr "" #: src/command.c:304 msgid "Left" msgstr "" #: src/command.c:306 msgid "Right" msgstr "" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "" #: src/colors.c:156 msgid "Unknown color" msgstr "" #: src/colors.c:196 msgid "Unknown color field" msgstr "" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "" #: src/conf.c:253 msgid "Bad color name" msgstr "" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "" #: src/conf.c:269 msgid "Invalid number" msgstr "" #: src/conf.c:277 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Aleksej https://launchpad.net/~aleksejrs\n" " Kristjan SCHMIDT https://launchpad.net/~kristjan-eo\n" " Max Kellermann https://launchpad.net/~max-duempel" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Connected to %s" #~ msgstr "Konektite al %s" ncmpc-0.27/po/es.po0000644000076400001440000006765213064033560011070 00000000000000# Spanish translation # Copyright (C) 2004 Kalle Wallin # # This file is distributed under the same license as the ncmpc package. # Ingmar Gebert, 2004 # Johám-Luís Miguéns Vila, 2006-2009 # Si tienes alguna sugerencia, encuentras algún error en la traducción o quieres colaborar con la misma, # puedes contactar conmigo a través del correo electrónico indicado más abajo. # # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2012-01-30 07:08+0000\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: es\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-04-11 07:56+0000\n" "X-Generator: Launchpad (build 16550)\n" #: src/i18n.h:42 msgid "y" msgstr "s" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Conectándose a %s... [Presiona %s para interrumpir la ejecución]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" "Error: La versión %d.%d.%d del MPD es demasiado antigua (se necesita al " "menos la %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "pressiona %s para accer al editor de teclas" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Modo repetición activado" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Modo repetición desactivado" #: src/screen.c:163 msgid "Random mode is on" msgstr "Modo aleatorio activado" #: src/screen.c:164 msgid "Random mode is off" msgstr "Modo aleatorio desactivado" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Modo compacto activado" #: src/screen.c:174 msgid "Single mode is off" msgstr "Modo compacto desactivado" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Modo completo activado" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Modo compacto desactivado" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Desvanecimiento de %d segundos" #: src/screen.c:198 msgid "Database updated" msgstr "Base de datos actualizada" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Tipo de búsqueda: simple" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Tipo de búsqueda: Normal" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Modo autocentrado activado" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Modo autocentrado desactivado" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Todas las pistas" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Todos los artistas" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Álbumes del artista: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Todas las pistas del artista: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Álbum: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Pistas del no álbum de artista: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Agregando álbum %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Agregando %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Cargando la lista %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Añadiendo '%s' a la lista de canciones" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Actualizando la base de datos..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Ha comenzado la actualización de la base de datos %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "Ha comenzado la actualización de la base de datos" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Buscar" #: src/screen_find.c:30 msgid "Find backward" msgstr "Buscar hacia atrás" #: src/screen_find.c:31 msgid "Jump" msgstr "Saltar" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "No se pudo encontrar %s" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Sustituir %s [%s%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Contraseña" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Sustituir %s [%s%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Ejecución interrumpida" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s Guardada" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Añadir" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "No se puede borrar el elemento" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Borrar la lista de canciones" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Lista de reproducción borrada" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Navegar" #: src/screen_search.c:46 msgid "artist" msgstr "artista" #: src/screen_search.c:47 msgid "album" msgstr "álbum" #: src/screen_search.c:48 msgid "title" msgstr "título" #: src/screen_search.c:49 msgid "track" msgstr "canción" #: src/screen_search.c:50 msgid "name" msgstr "nombre" #: src/screen_search.c:51 msgid "genre" msgstr "estilo" #: src/screen_search.c:52 msgid "date" msgstr "fecha" #: src/screen_search.c:53 msgid "composer" msgstr "compositor" #: src/screen_search.c:54 msgid "performer" msgstr "intérprete" #: src/screen_search.c:55 msgid "comment" msgstr "comentario" #: src/screen_search.c:62 msgid "file" msgstr "fichero" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Título" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artista" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Álbum" #: src/screen_search.c:83 msgid "Filename" msgstr "Nombre de archivo" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artista + Título" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Etiqueta de búsqueda inválida: %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Sin argumentos para la etiqueta de búsqueda %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Búsqueda" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Pulsa %s para una nueva búsqueda" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Buscar: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Búsqueda: Resultados para %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Búsqueda: Pulsar %s para una nueva búsqueda [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Modo de búsqueda: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Has definido nuevas teclas de acceso rápido" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Las teclas de acceso rápido no han sido modificadas." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Error: No se ha podido crear el directorio ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Error: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s creado" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Borrado" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Introduce tecla de acceso rápido para %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Error: la tecla %s ya está asignada a %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s asignada a %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Aplicar las teclas de acceso rápido " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Aplicar y guardar las teclas de acceso rápido " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Introduce una nueva tecla" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Nota: Has olvidado 'Aplicar' tus cambios?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Cambia las teclas de acceso rápido" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Cambia las teclas para %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Navegar" #: src/screen_help.c:84 msgid "Global" msgstr "Global" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Pantalla de teclas de acceso" #: src/screen_help.c:121 msgid "Play" msgstr "Reproducir" #: src/screen_help.c:124 msgid "Move song up" msgstr "Mover la canción arriba" #: src/screen_help.c:125 msgid "Move song down" msgstr "Mover la canción abajo" #: src/screen_help.c:128 msgid "Center" msgstr "Centro" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Navegador" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Acceder al directorio/Seleccionar y reproducir canción" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Añadir la canción de la lista" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Borrar la lista de canciones" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Búsqueda" #: src/screen_help.c:151 msgid "Select and play" msgstr "Seleccionar y reproducir" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Letras" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Ver letras" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Re)cargar letras" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Interrumpir la descarga" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Obtener las letras de la canción reproducida" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "No hay letras guardadas" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Guardar las letras" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Borrar letras guardadas" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Pantalla de salidas" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Activar/desactivar la salida" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Pantalla siguiente" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Pantalla de teclas de acceso" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Cambia las teclas de acceso rápido para el comando seleccionado" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "ELiminar la tecla de acceso rápido seleccionada" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Introduce una nueva tecla" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Subir un nivel" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Aplicar y guardar los cambios" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Ayuda" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "No hay letras disponibles" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Letras" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "cargando…" #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Letras guardadas" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Letras borradas" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "No hay letras guardadas" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Se activó la salida '%s'" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Se desactivó la salida '%s'" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Salidas" #: src/screen_song.c:49 msgid "Length" msgstr "Duración" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Compositor" #: src/screen_song.c:52 msgid "Name" msgstr "Nombre" #: src/screen_song.c:53 msgid "Disc" msgstr "Disco" #: src/screen_song.c:54 msgid "Track" msgstr "Pista" #: src/screen_song.c:55 msgid "Date" msgstr "Fecha" #: src/screen_song.c:56 msgid "Genre" msgstr "Estilo" #: src/screen_song.c:57 msgid "Comment" msgstr "Comentario" #: src/screen_song.c:58 msgid "Path" msgstr "Ruta" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitrate" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Número de artistas" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Número de álbumes" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Número de canciones" #: src/screen_song.c:79 msgid "Uptime" msgstr "Tiempo de ejecución" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Actualización más reciente de la BD" #: src/screen_song.c:81 msgid "Playtime" msgstr "Tiempo de reproducción" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Duración de la BD" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Visor de la canción" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Estadísticas del MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Canción seleccionada" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Canción reproducida" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Escuchando:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Parado]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volumen n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volumen %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Configuración de teclas" #: src/command.c:66 msgid "Quit" msgstr "Salir" #: src/command.c:70 msgid "Move cursor up" msgstr "Mover el cursor hacia arriba" #: src/command.c:72 msgid "Move cursor down" msgstr "Mover el cursor hacia abajo" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Mover el cursor hasta el principio de la pantalla" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Mover el cursor hasta la mitad de la pantalla" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Mover el cursor hasta el final de la pantalla" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Mover el cursor hasta el principio de la lista" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Mover el cursor hasta el final de la lista" #: src/command.c:84 msgid "Page up" msgstr "Página arriba" #: src/command.c:86 msgid "Page down" msgstr "Página abajo" #: src/command.c:88 msgid "Range selection" msgstr "Selección del rango" #: src/command.c:90 msgid "Scroll down one line" msgstr "Bajar una linea" #: src/command.c:92 msgid "Scroll up one line" msgstr "Subir una linea" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Subir media pantalla" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Bajar media pantalla" #: src/command.c:98 msgid "Select currently playing song" msgstr "Seleccionar la actual canción en reproducción" #: src/command.c:103 msgid "Help screen" msgstr "Ayuda" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Reproducir/Entrar en el directorio" #: src/command.c:114 msgid "Pause" msgstr "Pausa" #: src/command.c:116 msgid "Stop" msgstr "Parar" #: src/command.c:118 msgid "Crop" msgstr "Reducir lista de canciónes a canción marcado" #: src/command.c:120 msgid "Next track" msgstr "Siguiente" #: src/command.c:122 msgid "Previous track" msgstr "Anterior" #: src/command.c:124 msgid "Seek forward" msgstr "Avanzar" #: src/command.c:126 msgid "Seek backward" msgstr "Retroceder" #: src/command.c:128 msgid "Increase volume" msgstr "Subir el volumen" #: src/command.c:130 msgid "Decrease volume" msgstr "Bajar el volumen" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Seleccionar/Deseleccionar la canción en la lista" #: src/command.c:134 msgid "Select all listed items" msgstr "Seleccionar todos" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Borrar la canción de la lista" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Alternar modo repetición" #: src/command.c:144 msgid "Toggle random mode" msgstr "Alternar modo aleatorio" #: src/command.c:146 msgid "Toggle single mode" msgstr "Alternar modo compacto" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Alternar modo completo" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Alternar modo crossfade" #: src/command.c:152 msgid "Start a music database update" msgstr "Iniciar la actualización de la BD musical" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Añadir una URL o fichero a la lista" #: src/command.c:159 msgid "Go to root directory" msgstr "Entrar al directorio fundamental" #: src/command.c:161 msgid "Go to parent directory" msgstr "Entrar al directorio superior" #: src/command.c:164 msgid "Locate song in browser" msgstr "Encontrar la canción en el navegador" #: src/command.c:168 msgid "Move item up" msgstr "Moverlo arriba" #: src/command.c:170 msgid "Move item down" msgstr "Moverlo abajo" #: src/command.c:172 msgid "Refresh screen" msgstr "Actualizar la ventana" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Alternar modo de búsqueda" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Alternar centrado automático de la ventana" #: src/command.c:188 msgid "Next screen" msgstr "Pantalla siguiente" #: src/command.c:190 msgid "Previous screen" msgstr "Pantalla anterior" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Volver a la anterior pantalla" #: src/command.c:197 msgid "Forward find" msgstr "Buscar hacia adelante" #: src/command.c:199 msgid "Forward find next" msgstr "Buscar siguiente" #: src/command.c:201 msgid "Backward find" msgstr "Buscar hacia atrás" #: src/command.c:203 msgid "Backward find previous" msgstr "Buscar anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Saltar a" #: src/command.c:214 msgid "Artist screen" msgstr "Artistas" #: src/command.c:220 msgid "Change search mode" msgstr "Cambiar el modo de búsqueda" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Ver la canción seleccionada y reproducida" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Interrumpir la acción" #: src/command.c:234 msgid "Update Lyrics" msgstr "Actualizar las letras" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Indefinido" #: src/command.c:292 msgid "Space" msgstr "Espacio" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Borrar" #: src/command.c:300 msgid "Up" msgstr "Arriba" #: src/command.c:302 msgid "Down" msgstr "Abajo" #: src/command.c:304 msgid "Left" msgstr "Izquierda" #: src/command.c:306 msgid "Right" msgstr "Derecha" #: src/command.c:308 msgid "Home" msgstr "Inicio" #: src/command.c:310 msgid "End" msgstr "Fin" #: src/command.c:312 msgid "PageDown" msgstr "Pagina siguiente" #: src/command.c:314 msgid "PageUp" msgstr "Pagina anterior" #: src/command.c:316 msgid "Tab" msgstr "Tabulador" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tabulador" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insertar" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Tecla %s asignada a %s y %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Comando desconocido" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Advertencia: Propiedad del color - %s no reconocida\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "La terminal no soporta el cambio de colores" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "La terminal no tiene la opcion de diferentes colores" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Error" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Definición incorrecta de la tecla de acceso" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Comando desconocido" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Configuración incompleta de la tecla de acceso" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Configuración incorrecta del tipo de duración mostrada" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Falta un '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Nombre de color incorrecto" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Definición de color incompleta" #: src/conf.c:269 msgid "Invalid number" msgstr "Número inválido" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Definición de color erronea" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Nombre de pantalla desconocido" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Modo de búsqueda inválido" #: src/conf.c:362 msgid "Unknown search mode" msgstr "No se reconoce el modo de búsqueda" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Parámetro de configuración desconocido" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n" " Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount\n" " Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet\n" " Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" " Luis Miguel D.P. https://launchpad.net/~lmdp\n" " Max Kellermann https://launchpad.net/~max-duempel\n" " Monkey https://launchpad.net/~monkey-libre\n" " Paco Molinero https://launchpad.net/~franciscomol" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Selección de rango desactivada" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Selección de rango activada" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Borrar la lista de reproducción %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Error: La ventana/pantalla es muy pequeña" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advertencia: Color %s - no reconocido\n" #~ msgid "Connected to %s" #~ msgstr "Conectado a %s" #~ msgid "Shuffled playlist" #~ msgstr "Lista de canciones barajada" #~ msgid "Cleared playlist" #~ msgstr "Vaciada la lista de canciones" #~ msgid "Save playlist as" #~ msgstr "Guardar la lista como" #~ msgid "Playlist" #~ msgstr "Lista de canciones" #~ msgid "Playlist on %s" #~ msgstr "Lista de reproducción en %s" #~ msgid "Playlist screen" #~ msgstr "Lista de canciones" #~ msgid "Shuffle playlist" #~ msgstr "Aleatorizar lista de canciones" #~ msgid "Clear playlist" #~ msgstr "Borrar la lista de canciones" #~ msgid "Save playlist" #~ msgstr "Guardar la lista de canciones" #~ msgid "Volume n/a " #~ msgstr "Volumen n/a " #~ msgid " Volume %d%%" #~ msgstr " Volumen %d%%" #~ msgid "Explicitly download lyrics" #~ msgstr "Forzar la descarga de las letras" #~ msgid "Adding directory %s...\n" #~ msgstr "Añadiendo directorio %s...\n" #~ msgid "Search: " #~ msgstr "Buscar: " #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "" #~ "Tecla %s asignada a %s y %s (pressiona %s para accer al editor de teclas)" #~ msgid "Clock" #~ msgstr "Reloj" #~ msgid "Lyrics [No connection]" #~ msgstr "Letras [Sin conexión]" #~ msgid "Lyrics [Not found]" #~ msgstr "Letras [No se han encontrado]" #~ msgid "Lyrics [retrieving]" #~ msgstr "Letras [descargando]" #~ msgid "Clock screen" #~ msgstr "Reloj" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Error: No se han podido convertir los caracteres a %s" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Error: No se han podido convertir los caracteres a UTF-8" ncmpc-0.27/po/fi.po0000644000076400001440000005575713064033560011062 00000000000000# Finnish translation for ncmpc # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-03-06 16:02+0000\n" "Last-Translator: Sami Sankala \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "k" #: src/i18n.h:43 msgid "n" msgstr "e" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Yhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Virhe: MPD versio %d.%d.%d on liian vanha (tarvitaan %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "Painalla %s pääset näppäineditoriin" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Jatkuva toisto on päällä" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Jatkuva toisto on poissa päältä" #: src/screen.c:163 msgid "Random mode is on" msgstr "Satunnaistoisto on päällä" #: src/screen.c:164 msgid "Random mode is off" msgstr "Satunnaistoisto poissa päältä" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Kertatoisto on päällä" #: src/screen.c:174 msgid "Single mode is off" msgstr "Kertatoisto on poissa päältä" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Kertakäyttökuuntelu päällä" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Kertakäyttökuuntelu poissa päältä" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Ristiinhäivytys %d sekuntia" #: src/screen.c:198 msgid "Database updated" msgstr "Tietokanta päivitetty" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Hakutyyli: 'Wrapped'" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Hakutyyli: Normaali" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Kaikki kappaleet" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Kaikki esittäjät" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Kaikki albumit esittäjältä: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Kaikki kappaleet esittäjältä: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Levy: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Kappaleet tuntemattomista albumeista esittäjältä: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Lisätään albumia %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Lisätään %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Ladataan soittolistaa %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Soittolistaan lisätään '%s'" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Tietokannan päivitys käynnissä..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Tietokannan %s päivitys käynnistyi" #: src/screen_client.c:52 msgid "Database update started" msgstr "Tietokannan päivitys käynnistyi" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Etsi" #: src/screen_find.c:30 msgid "Find backward" msgstr "Etsi alustapäin" #: src/screen_find.c:31 msgid "Jump" msgstr "Siirry" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Haku '%s' ei tuottanut tuloksia" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Korvaa %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Salasana" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Korvaa %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Keskeytetty" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Tallennettu %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Lisää" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Tämän kohteen poistaminen ei ole mahdollista" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Poista soittolista" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Soittolista poistettu" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Selaa" #: src/screen_search.c:46 msgid "artist" msgstr "esittäjä" #: src/screen_search.c:47 msgid "album" msgstr "levy" #: src/screen_search.c:48 msgid "title" msgstr "nimi" #: src/screen_search.c:49 msgid "track" msgstr "kappale" #: src/screen_search.c:50 msgid "name" msgstr "nimi" #: src/screen_search.c:51 msgid "genre" msgstr "tyylilaji" #: src/screen_search.c:52 msgid "date" msgstr "päiväys:" #: src/screen_search.c:53 msgid "composer" msgstr "säveltäjä" #: src/screen_search.c:54 msgid "performer" msgstr "esittäjä" #: src/screen_search.c:55 msgid "comment" msgstr "kommentti" #: src/screen_search.c:62 msgid "file" msgstr "tiedosto" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Kappale" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Esittäjä" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Albumi" #: src/screen_search.c:83 msgid "Filename" msgstr "Tiedostonimi" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Esittäjä + Kappale" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Haku" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Paina %s uuteen hakuun" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Haku: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Haku: Tulokset hauelle %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Haku: Paina %s hakeaksesi uudelleen [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Hakutyyli: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Uusia näppäinmäärittelyjä" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Näppäinmäärittelyjä ei muutettu" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Virhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaan" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Virhe: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Kirjoitettiin %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Poistettu" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "" #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Virhe: näppäin %s on jo %s käytössä" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Asetettu %s %s:ksi" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "" #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "" #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Lisää uusi näppäin" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Huomio: Unohditko 'Toteuttaa' muutokset?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Muuta näppäinasetteluja" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Muokkaa %s näppäimiä" #: src/screen_help.c:39 msgid "Movement" msgstr "" #: src/screen_help.c:84 msgid "Global" msgstr "" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Näppäinmäärittely ruutu" #: src/screen_help.c:121 msgid "Play" msgstr "Toista" #: src/screen_help.c:124 msgid "Move song up" msgstr "Siirrä kappaletta ylemmäksi" #: src/screen_help.c:125 msgid "Move song down" msgstr "Siirrä kappaletta alemmaksi" #: src/screen_help.c:128 msgid "Center" msgstr "" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Selailunäkymä" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Lisää kappale soittolistaan" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Poista soittolista" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Hakunäkymä" #: src/screen_help.c:151 msgid "Select and play" msgstr "Valitse ja toista" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Sanoitusnäkymä" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Näytä sanoitukset" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "Lataa sanoitukset" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Keskeytä sanoitusten noutaminen" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Lataa sanoitukset toistettavaan kappaleeseen" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Ei talletettuja sanoituksia" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Tallenna sanoitukset" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Poista tallennettut sanoitukset" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Ulostulo päälle/poissa" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Soittolista näyttö" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Näppäinmäärittely ruutu" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Muokkaa näppäinmäärittelyjä halutulle komennolle" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Poista valittu näppäinmäärittely" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Lisää uusi näppäin" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Siirry taso ylöspäin" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Toteuta ja tallenna muutokset" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Ohje" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Sanoituksia ei löytynyt" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Sanoitukset" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "latautuu..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Sanoitukset talletettu" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Sanoitukset poistettu" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Ei talletettuja sanoituksia" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Ulostulo '%s' päällä" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Ulostulo '%s' poissa päältä" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Ulostulot" #: src/screen_song.c:49 msgid "Length" msgstr "Kesto" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Säveltäjä" #: src/screen_song.c:52 msgid "Name" msgstr "Nimi" #: src/screen_song.c:53 msgid "Disc" msgstr "Levy" #: src/screen_song.c:54 msgid "Track" msgstr "Kappale" #: src/screen_song.c:55 msgid "Date" msgstr "" #: src/screen_song.c:56 msgid "Genre" msgstr "" #: src/screen_song.c:57 msgid "Comment" msgstr "" #: src/screen_song.c:58 msgid "Path" msgstr "" #: src/screen_song.c:59 msgid "Bitrate" msgstr "" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "" #: src/screen_song.c:77 msgid "Number of albums" msgstr "" #: src/screen_song.c:78 msgid "Number of songs" msgstr "" #: src/screen_song.c:79 msgid "Uptime" msgstr "" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "" #: src/screen_song.c:81 msgid "Playtime" msgstr "" #: src/screen_song.c:82 msgid "DB playtime" msgstr "" #: src/screen_song.c:171 msgid "Song viewer" msgstr "" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "" #: src/screen_song.c:410 msgid "Selected song" msgstr "" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "" #: src/status_bar.c:121 msgid "Playing:" msgstr "" #: src/status_bar.c:124 msgid "[Paused]" msgstr "" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "" #: src/command.c:63 msgid "Key configuration screen" msgstr "" #: src/command.c:66 msgid "Quit" msgstr "" #: src/command.c:70 msgid "Move cursor up" msgstr "" #: src/command.c:72 msgid "Move cursor down" msgstr "" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "" #: src/command.c:84 msgid "Page up" msgstr "" #: src/command.c:86 msgid "Page down" msgstr "" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "" #: src/command.c:112 msgid "Play/Enter directory" msgstr "" #: src/command.c:114 msgid "Pause" msgstr "" #: src/command.c:116 msgid "Stop" msgstr "" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "" #: src/command.c:122 msgid "Previous track" msgstr "" #: src/command.c:124 msgid "Seek forward" msgstr "" #: src/command.c:126 msgid "Seek backward" msgstr "" #: src/command.c:128 msgid "Increase volume" msgstr "" #: src/command.c:130 msgid "Decrease volume" msgstr "" #: src/command.c:132 msgid "Select/deselect song in queue" msgstr "" #: src/command.c:134 msgid "Select all listed items" msgstr "" #: src/command.c:136 msgid "Delete song from queue" msgstr "" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "" #: src/command.c:144 msgid "Toggle random mode" msgstr "" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "" #: src/command.c:152 msgid "Start a music database update" msgstr "" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 msgid "Add url/file to queue" msgstr "" #: src/command.c:159 msgid "Go to root directory" msgstr "" #: src/command.c:161 msgid "Go to parent directory" msgstr "" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "" #: src/command.c:170 msgid "Move item down" msgstr "" #: src/command.c:172 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "" #: src/command.c:188 msgid "Next screen" msgstr "" #: src/command.c:190 msgid "Previous screen" msgstr "" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "" #: src/command.c:199 msgid "Forward find next" msgstr "" #: src/command.c:201 msgid "Backward find" msgstr "" #: src/command.c:203 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "" #: src/command.c:214 msgid "Artist screen" msgstr "" #: src/command.c:220 msgid "Change search mode" msgstr "" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "" #: src/command.c:234 msgid "Update Lyrics" msgstr "" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "" #: src/command.c:292 msgid "Space" msgstr "" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "" #: src/command.c:302 msgid "Down" msgstr "" #: src/command.c:304 msgid "Left" msgstr "" #: src/command.c:306 msgid "Right" msgstr "" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "" #: src/colors.c:156 msgid "Unknown color" msgstr "" #: src/colors.c:196 msgid "Unknown color field" msgstr "" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "" #: src/conf.c:253 msgid "Bad color name" msgstr "" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "" #: src/conf.c:269 msgid "Invalid number" msgstr "" #: src/conf.c:277 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Katja Viljakainen https://launchpad.net/~katja-viljakainen\n" " Sami Sankala https://launchpad.net/~valijumi" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Error: Screen too small" #~ msgstr "Virhe: Ruutu on liian pieni" #~ msgid "Connected to %s" #~ msgstr "Yhdistetty kohteeseen %s" #~ msgid "Shuffled playlist" #~ msgstr "Sekoitettu soittolista" #~ msgid "Cleared playlist" #~ msgstr "Tyhjennetty soittolista" #~ msgid "Save playlist as" #~ msgstr "Tallenna soittolista nimellä" #~ msgid "Playlist" #~ msgstr "Soittolista" #~ msgid "Playlist screen" #~ msgstr "Soittolista näyttö" ncmpc-0.27/po/fr.po0000644000076400001440000006607713064033560011070 00000000000000# translation of fr.po to # Français (French) # Copyright (C) 2005 Yann Cézard # This file is distributed under the same license as the PACKAGE package. # # Yann Cézard , 2005-2008. # Romain Bignon , 2009. msgid "" msgstr "" "Project-Id-Version: ncmpc 0.14.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-09-23 11:15+0000\n" "Last-Translator: Thibault Févry \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n" "X-Generator: Launchpad (build 12138)\n" #: src/i18n.h:42 msgid "y" msgstr "o" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Connexion à %s... [Appuyez sur %s pour annuler]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Erreur: la version %d.%d.%d de MPD est trop ancienne (%s requise)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "appuyez sur %s pour l'éditeur de touches" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Répétition activé" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Répétition désactivé" #: src/screen.c:163 msgid "Random mode is on" msgstr "Mode Aléatoire activé" #: src/screen.c:164 msgid "Random mode is off" msgstr "Mode Aléatoire désactivé" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Mode seul activé" #: src/screen.c:174 msgid "Single mode is off" msgstr "Mode seul désactivé" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Mode consommateur activé" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Mode consommateur activé" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Fondu sur %d seconde(s)" #: src/screen.c:198 msgid "Database updated" msgstr "Base de données mise à jour" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Mode de recherche: Enveloppe" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Mode de recherche: Normal" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Mode d'auto-centrage: Actif" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Mode d'auto-centrage: Inactif" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Toutes les pistes" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Tous les artistes" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Albums de l'artiste : %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Toutes les pistes de l'artiste : %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Piste sans album de l'artiste : %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Ajout de l'album %s en cours..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Ajout de %s en cours..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Chargement de la liste de lecture %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Ajout de '%s' à la liste de lecture" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Mise à jour de la base de données en cours..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Mise à jour de la base de données de %s commençée" #: src/screen_client.c:52 msgid "Database update started" msgstr "Début de la mise à jour de la base de données" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Trouver" #: src/screen_find.c:30 msgid "Find backward" msgstr "Trouver avant" #: src/screen_find.c:31 msgid "Jump" msgstr "Sauter" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Impossible de trouver '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Remplacer %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Mot de passe" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Remplacer %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Annulé" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s enregistré" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Ajouter" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Impossible d'effacer ce type d'objet" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Effacer la liste de lecture" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Liste de lecture effacée" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Parcourir" #: src/screen_search.c:46 msgid "artist" msgstr "artiste" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titre" #: src/screen_search.c:49 msgid "track" msgstr "piste" #: src/screen_search.c:50 msgid "name" msgstr "nom" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "date" #: src/screen_search.c:53 msgid "composer" msgstr "compositeur" #: src/screen_search.c:54 msgid "performer" msgstr "interprète" #: src/screen_search.c:55 msgid "comment" msgstr "commentaire" #: src/screen_search.c:62 msgid "file" msgstr "fichier" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titre" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artiste" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Nom de fichier" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artiste + Titre" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Mauvais champ recherché %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Pas d'argument pour le champ recherché %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Rechercher" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Appuyez sur %s pour une nouvelle recherche" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Rechercher: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Rechercher: Résultats pour %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Rechercher: Appuyez sur %s pour une nouvelle recherche [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Mode de recherche : %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Vous avez une nouvelle correspondance de touches" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "La correspondance des touches n'a pas été changée." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Erreur : Impossible de créer le répertoire ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Erreur: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s écrit" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Effacé" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Entrez la nouvelle touche pour %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erreur: la touche %s est déja attribuée à %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s assignée à %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Appliquer la correspondance des touches " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Appliquer et Enregistrer la correspondance des touches " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Ajouter une nouvelle touche" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Note: Auriez-vous oublié d''Appliquer' vos changements?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Editer les correspondances de touches" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Editer les touches pour %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Déplacements" #: src/screen_help.c:84 msgid "Global" msgstr "Globales" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Écran du paramétrage des raccourcis" #: src/screen_help.c:121 msgid "Play" msgstr "Lire" #: src/screen_help.c:124 msgid "Move song up" msgstr "Déplacer la chanson vers le haut" #: src/screen_help.c:125 msgid "Move song down" msgstr "Déplacer la chanson vers le bas" #: src/screen_help.c:128 msgid "Center" msgstr "Centrer" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Ecran de Navigation" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Entrer dans le répertoire/Sélectionner et lire la chanson" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Ajouter la chanson à la liste de lecture" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Effacer la liste de lecture" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Ecran de recherche" #: src/screen_help.c:151 msgid "Select and play" msgstr "Sélectionner et Lire" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Ecran des paroles" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Voir les Paroles" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Re)charger les paroles" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Récupération interrompue" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Télécharger les paroles de la chanson en lecture" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Aucune parole sauvée" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Enregistrer les paroles" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Supprimer les paroles sauvées" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Ecran des sorties" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Activer/désactiver une sortie" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Ecran suivant" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Écran du paramétrage des raccourcis" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Éditer les raccourcis pour la commande sélectionnée" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Supprimer le raccourci sélectionné" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Ajouter une nouvelle touche" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Aller au dossier parent" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Appliquer et sauvegarder les changements" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Aide" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Pas de paroles" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Paroles" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "Chargement..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Paroles enregistrées" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Paroles supprimées" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Aucune parole sauvée" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Sortie %s activée" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Sortie %s désactivée" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Sorties" #: src/screen_song.c:49 msgid "Length" msgstr "Durée" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Compositeur" #: src/screen_song.c:52 msgid "Name" msgstr "Nom" #: src/screen_song.c:53 msgid "Disc" msgstr "Disque" #: src/screen_song.c:54 msgid "Track" msgstr "Piste" #: src/screen_song.c:55 msgid "Date" msgstr "Date" #: src/screen_song.c:56 msgid "Genre" msgstr "Style" #: src/screen_song.c:57 msgid "Comment" msgstr "Commentaire" #: src/screen_song.c:58 msgid "Path" msgstr "Chemin" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Débit" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Nombre d'artistes" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Nombre d'albums" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Nombre de chansons" #: src/screen_song.c:79 msgid "Uptime" msgstr "Temps de service" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Mise à jour de la BD la plus récente" #: src/screen_song.c:81 msgid "Playtime" msgstr "Temps de lecture" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Temps de lecture de la BD" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Visualiseur de chanson" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Statistiques MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Chanson sélectionnée" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Chanson actuellement jouée" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "En Lecture:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[En Pause]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volume n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Ecran de configuration des touches" #: src/command.c:66 msgid "Quit" msgstr "Quitter" #: src/command.c:70 msgid "Move cursor up" msgstr "Déplacer le curseur vers le haut" #: src/command.c:72 msgid "Move cursor down" msgstr "Déplacer le curseur vers le bas" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Déplacer le curseur vers le haut de l'écran" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Déplacer le curseur vers le milieu de l'écran" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Déplacer le curseur vers le bas de l'écran" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Déplacer le curseur vers le haut de la liste" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Déplacer le curseur vers le bas de la liste" #: src/command.c:84 msgid "Page up" msgstr "Monter d'une page" #: src/command.c:86 msgid "Page down" msgstr "Descendre d'une page" #: src/command.c:88 msgid "Range selection" msgstr "Sélection multi-ligne" #: src/command.c:90 msgid "Scroll down one line" msgstr "Défiler d'une ligne vers le bas" #: src/command.c:92 msgid "Scroll up one line" msgstr "Défiler d'une ligne vers le haut" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Défiler d'une moitié d'écran vers le haut" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Défiler d'une moitié d'écran vers le bas" #: src/command.c:98 msgid "Select currently playing song" msgstr "Sélectionner la chanson actuellement jouée" #: src/command.c:103 msgid "Help screen" msgstr "Ecran d'aide" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Jouer/Entrer dans le répertoire" #: src/command.c:114 msgid "Pause" msgstr "Pause" #: src/command.c:116 msgid "Stop" msgstr "Stop" #: src/command.c:118 msgid "Crop" msgstr "Couper" #: src/command.c:120 msgid "Next track" msgstr "Piste suivante" #: src/command.c:122 msgid "Previous track" msgstr "Piste précédente" #: src/command.c:124 msgid "Seek forward" msgstr "Avancer" #: src/command.c:126 msgid "Seek backward" msgstr "Reculer" #: src/command.c:128 msgid "Increase volume" msgstr "Augmenter le volume" #: src/command.c:130 msgid "Decrease volume" msgstr "Diminuer le volume" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Sélectionner/Désélectionner la chanson dans la liste de lecture" #: src/command.c:134 msgid "Select all listed items" msgstr "Selectionner tous les éléments listés" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Enlever la chanson de la liste de lecture" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Activer/désactiver le mode répétition" #: src/command.c:144 msgid "Toggle random mode" msgstr "Activer/désactiver le mode aléatoire" #: src/command.c:146 msgid "Toggle single mode" msgstr "Basculer le mode seul" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Basculer le mode consommation" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Activer/désactiver le mode de fondu" #: src/command.c:152 msgid "Start a music database update" msgstr "Mettre à jour la base de données musicale" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Ajouter une url/un fichier à la liste de lecture" #: src/command.c:159 msgid "Go to root directory" msgstr "Aller au répertoire racine" #: src/command.c:161 msgid "Go to parent directory" msgstr "Aller au répertoire supérieur" #: src/command.c:164 msgid "Locate song in browser" msgstr "Localiser la chanson dans le navigateur" #: src/command.c:168 msgid "Move item up" msgstr "Déplacer l'élément vers le haut" #: src/command.c:170 msgid "Move item down" msgstr "Déplacer l'élément vers le bas" #: src/command.c:172 msgid "Refresh screen" msgstr "Rafraîchir l'écran" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Activer le mode de recherche" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Activer le mode d'auto-centrage" #: src/command.c:188 msgid "Next screen" msgstr "Ecran suivant" #: src/command.c:190 msgid "Previous screen" msgstr "Ecran précédent" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Passer à l'écran le plus récent" #: src/command.c:197 msgid "Forward find" msgstr "Chercher après" #: src/command.c:199 msgid "Forward find next" msgstr "Chercher après/suivant" #: src/command.c:201 msgid "Backward find" msgstr "Chercher avant" #: src/command.c:203 msgid "Backward find previous" msgstr "Chercher avant/précédent" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Aller à" #: src/command.c:214 msgid "Artist screen" msgstr "Ecran sur l'Artiste" #: src/command.c:220 msgid "Change search mode" msgstr "Changer le mode de recherche" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Voir la chanson sélectionnée et actuellement jouée" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Interrompre l'action" #: src/command.c:234 msgid "Update Lyrics" msgstr "Mettre à jour les paroles" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Indéfini" #: src/command.c:292 msgid "Space" msgstr "Espace" #: src/command.c:294 msgid "Enter" msgstr "Entrée" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Suppr" #: src/command.c:300 msgid "Up" msgstr "Haut" #: src/command.c:302 msgid "Down" msgstr "Bas" #: src/command.c:304 msgid "Left" msgstr "Gauche" #: src/command.c:306 msgid "Right" msgstr "Droite" #: src/command.c:308 msgid "Home" msgstr "Début" #: src/command.c:310 msgid "End" msgstr "Fin" #: src/command.c:312 msgid "PageDown" msgstr "PageBas" #: src/command.c:314 msgid "PageUp" msgstr "PageHaut" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Echap" #: src/command.c:322 msgid "Insert" msgstr "Inser" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "La touche %s est assignée à %s et à %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Commande inconnue" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Attention: Champ de couleur inconnu - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Le terminal ne supporte pas le changement de couleurs" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Le terminal ne dispose pas de la gestion des couleurs" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Erreur" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Définition de raccourci malformée" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Commande inconnue" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Configuration de raccourci incomplète" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Mauvais type d'affichage du temps" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Manque '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Mauvais nom de couleur" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Définition de couleur incomplète" #: src/conf.c:269 msgid "Invalid number" msgstr "Nombre invalide" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Définition de couleur malformée" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Nom d'écran inconnu" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Mode de recherche invalide" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Mode de recherche inconnu" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Paramètre de configuration inconnu" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Traduction française : Yann Cézard \n" "\n" "Launchpad Contributions:\n" " Bastien Leblanc https://launchpad.net/~bass000\n" " François Blondel https://launchpad.net/~francoisblondel\n" " Max Kellermann https://launchpad.net/~max-duempel\n" " Romain Bignon https://launchpad.net/~romain-peerfuse\n" " Thibault Févry https://launchpad.net/~thibaultfevry\n" " Yann Cézard https://launchpad.net/~eesprit" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Sélection multi-ligne désactivée" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Sélection multi-ligne activée" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Effacer la liste de lecture %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Erreur: Ecran trop petit" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Attention: Couleur inconnue - %s\n" #~ msgid "Connected to %s" #~ msgstr "Connecté à %s" #~ msgid "Shuffled playlist" #~ msgstr "Liste de lecture aléatoire" #~ msgid "Cleared playlist" #~ msgstr "Liste de lecture vidée" #~ msgid "Save playlist as" #~ msgstr "Enregistrer la liste de lecture sous" #~ msgid "Playlist" #~ msgstr "Liste de lecture" #~ msgid "Playlist on %s" #~ msgstr "Liste de lecture sur %s" #~ msgid "Playlist screen" #~ msgstr "Ecran de Liste de lecture" #~ msgid "Shuffle playlist" #~ msgstr "Liste de lecture aléatoire" #~ msgid "Clear playlist" #~ msgstr "Vider la liste de lecture" #~ msgid "Save playlist" #~ msgstr "Enregistrer la liste de lecture" #~ msgid "Volume n/a " #~ msgstr "Volume n/a " #~ msgid " Volume %d%%" #~ msgstr " Volume %d%%" ncmpc-0.27/po/gl.po0000644000076400001440000006703113064033560011052 00000000000000# GALICIAN (AGAL) TRANSLATION OF NCMPC. # Copyright (C) 2006-2009 # This file is distributed under the same license as the ncmpc package. # Johám-Luís Miguéns Vila , 2006-2009 # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-03-25 19:34+0000\n" "Last-Translator: Miguel Anxo Bouzada \n" "Language-Team: galician\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "s" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Conectandose con %s... [Prema %s para interromper]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Erro: a versión %d.%d.%d do MPD é moi antiga (precisase a %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "prema %s para ir ao editor de atallos" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Activado o modo de repetición" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Modo repetición desactivado" #: src/screen.c:163 msgid "Random mode is on" msgstr "Modo aleatório activado" #: src/screen.c:164 msgid "Random mode is off" msgstr "Modo aleatório desactivado" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Modo compacto activado" #: src/screen.c:174 msgid "Single mode is off" msgstr "Modo compacto desactivado" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Modo completo activado" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Modo completo desactivado" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Esvaecemento cruzado %d segundos" #: src/screen.c:198 msgid "Database updated" msgstr "Base de dados actualizada" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Modo de busca: Limitada" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Modo de busca: Normal" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Modo de autocentrado: activado" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Modo de autocentrado: desactivado" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Todas as pistas" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Todos os artistas" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Álbumes do artista: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Todas as pistas do artista: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Álbum: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Pistas de ningún álbum do artista: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Engadindo álbum %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Engadindo %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Cargando a lista de reprodución %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Engadindo «%s» á lista de reprodución" #: src/screen_client.c:41 msgid "Database update running..." msgstr "A base de datos estase actualizando..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Comezou a actualización da base de datos de %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "Comezou a actualización da base de datos" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Buscar" #: src/screen_find.c:30 msgid "Find backward" msgstr "Buscar cara atrás" #: src/screen_find.c:31 msgid "Jump" msgstr "Ir a" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Non se puido atopar «%s»" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Substituir %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Contrasinal" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Substituir %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Interrompido" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Gardouse %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Engadir" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Non é possíbel borrar este elemento" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Borrar a lista de reprodución" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Lista de reprodución borrada" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Explorar" #: src/screen_search.c:46 msgid "artist" msgstr "artista" #: src/screen_search.c:47 msgid "album" msgstr "álbum" #: src/screen_search.c:48 msgid "title" msgstr "título" #: src/screen_search.c:49 msgid "track" msgstr "pista" #: src/screen_search.c:50 msgid "name" msgstr "nome" #: src/screen_search.c:51 msgid "genre" msgstr "xénero" #: src/screen_search.c:52 msgid "date" msgstr "data" #: src/screen_search.c:53 msgid "composer" msgstr "compositor" #: src/screen_search.c:54 msgid "performer" msgstr "interprete" #: src/screen_search.c:55 msgid "comment" msgstr "comentário" #: src/screen_search.c:62 msgid "file" msgstr "ficheiro" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Título" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artista" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Álbum" #: src/screen_search.c:83 msgid "Filename" msgstr "Nome do ficheiro" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artista + Título" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Etiqueta de busca errónea %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Sen argumento para a busca da etiqueta %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Buscar" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Prema %s para unha nova busca" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Buscar: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Buscar: Resultados para %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Buscar: Prema %s para unha nova busca [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Modo da busca: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Ten novos atallos de teclado" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Non se cambiaron os atallos de teclado" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Erro: Non se puido crear o cartafol ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Erro: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Escribiuse %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Borrada" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Introduza un novo atallo para %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erro: a tecla %s xá está sendo utilizada por %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Asignouse %s a %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Aplicar os atallos de teclado " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Aplicar e guardar os atallos de teclado " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Engadir un novo atallo" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Nota: Esquecuse de «Aplicar» os cambios?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Editar os atallos de teclado" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Editar atallos para %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Movemento" #: src/screen_help.c:84 msgid "Global" msgstr "Global" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Pantalla de atallos" #: src/screen_help.c:121 msgid "Play" msgstr "Reproducir" #: src/screen_help.c:124 msgid "Move song up" msgstr "Mover a canción cara enrriba" #: src/screen_help.c:125 msgid "Move song down" msgstr "Mover a canción cara embaixo" #: src/screen_help.c:128 msgid "Center" msgstr "Centrar" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Pantalla do explorador" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Entre no cartafol/Seleccione e reproduza a canción" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Engadir a canción á lista de reprodución" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Borrar a lista de reprodución" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Pantalla de busca" #: src/screen_help.c:151 msgid "Select and play" msgstr "Seleccionar e reproducir" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Pantalla das letras de cancións" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Ver as letras de cancións" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Re)cargar as letras de cancións" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Interromper a descarga" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Obter as letras da canción reproducida" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Letras de cancións sen gardar" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Guardar as letras de cancións" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Eliminar as letras de cancións gardadas" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Pantalla de saída" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Activar/Desactivar a saída" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Seguinte pantalla" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Pantalla de atallos" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Editar atallos para a orde seleccionada" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Eliminar o atallo seleccionado" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Engadir un novo atallo" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Subir un nivel" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Aplicar e gardar os cambios" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Axuda" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Sen letras de cancións" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Letras de cancións" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "cargando..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Letras de cancións gardadas" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Letras de cancións eliminadas" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Letras de cancións sen gardar" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Activouse a saída «%s»" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Desactivouse a saída «%s»" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Saídas" #: src/screen_song.c:49 msgid "Length" msgstr "Duración" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Compositor" #: src/screen_song.c:52 msgid "Name" msgstr "Nome" #: src/screen_song.c:53 msgid "Disc" msgstr "Disco" #: src/screen_song.c:54 msgid "Track" msgstr "Pista" #: src/screen_song.c:55 msgid "Date" msgstr "Data" #: src/screen_song.c:56 msgid "Genre" msgstr "Xénero" #: src/screen_song.c:57 msgid "Comment" msgstr "Comentario" #: src/screen_song.c:58 msgid "Path" msgstr "Ruta" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Taxa de bits" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Número de artistas" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Número de álbumes" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Número de cancións" #: src/screen_song.c:79 msgid "Uptime" msgstr "Tempo de execución" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Actualización máis recente da BD" #: src/screen_song.c:81 msgid "Playtime" msgstr "Tempo de reprodución" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Duraciónacumulada da BD" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Visor da canción" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Estatísticas do MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Canción seleccionada" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Canción que se está reproducindo" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Reproducindo:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[En Pausa]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volume n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Pantalla de configuración dos atallos" #: src/command.c:66 msgid "Quit" msgstr "Saír" #: src/command.c:70 msgid "Move cursor up" msgstr "Mover o cursor cara enriba" #: src/command.c:72 msgid "Move cursor down" msgstr "Mover o cursor cara embaixo" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Mover o cursor até ao comezo da pantalla" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Mover o cursor até á metade da pantalla" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Mover o cursor até ao pe da pantalla" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Mover o cursor até ao comezo da lista" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Mover o cursor até ao pe da lista" #: src/command.c:84 msgid "Page up" msgstr "Páxina enriba" #: src/command.c:86 msgid "Page down" msgstr "Páxina embaixo" #: src/command.c:88 msgid "Range selection" msgstr "Selección do rango" #: src/command.c:90 msgid "Scroll down one line" msgstr "Baixar unha liña" #: src/command.c:92 msgid "Scroll up one line" msgstr "Subir unha liña" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Subir media pantalla" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Baixar media pantalla" #: src/command.c:98 msgid "Select currently playing song" msgstr "Seleccionar a cannción actual canción en reprodución" #: src/command.c:103 msgid "Help screen" msgstr "Pantalla de axuda" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Reproducir/Entrar nun cartafol" #: src/command.c:114 msgid "Pause" msgstr "Pausa" #: src/command.c:116 msgid "Stop" msgstr "Deter" #: src/command.c:118 msgid "Crop" msgstr "Cortar" #: src/command.c:120 msgid "Next track" msgstr "Seguinte pista" #: src/command.c:122 msgid "Previous track" msgstr "Pista anterior" #: src/command.c:124 msgid "Seek forward" msgstr "Avanzar" #: src/command.c:126 msgid "Seek backward" msgstr "Retroceder" #: src/command.c:128 msgid "Increase volume" msgstr "Aumentar volume" #: src/command.c:130 msgid "Decrease volume" msgstr "Diminuir volume" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Seleccionar/deseleccionar a canción na lista de reprodución" #: src/command.c:134 msgid "Select all listed items" msgstr "Seleccionar todos os elementos da lista" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Borrar a canción da lista de reproducción" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Activar/desactivar o modo repetición" #: src/command.c:144 msgid "Toggle random mode" msgstr "Activar/desactivar o modo aleatorio" #: src/command.c:146 msgid "Toggle single mode" msgstr "Alternar o modo compacto" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Alternar o modo completo" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Activar/desactivar o modo de esvaecimento cruzado" #: src/command.c:152 msgid "Start a music database update" msgstr "Comezar unha actualización da BD" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Engadir url/ficheiro á lista de reprodución" #: src/command.c:159 msgid "Go to root directory" msgstr "Ir ao cartafol raíz" #: src/command.c:161 msgid "Go to parent directory" msgstr "Ir ao cartafol pai" #: src/command.c:164 msgid "Locate song in browser" msgstr "Atopar a canción no explorador" #: src/command.c:168 msgid "Move item up" msgstr "Movera o elemento cara arriba." #: src/command.c:170 msgid "Move item down" msgstr "Mover o elemento cara abaixo" #: src/command.c:172 msgid "Refresh screen" msgstr "Actualizar a pantalla" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Alternar o modo de busca" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Alternar o modo de autocentrado" #: src/command.c:188 msgid "Next screen" msgstr "Seguinte pantalla" #: src/command.c:190 msgid "Previous screen" msgstr "Pantalla anterior" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Volvar á pantalla anterior" #: src/command.c:197 msgid "Forward find" msgstr "Buscar cara adiante" #: src/command.c:199 msgid "Forward find next" msgstr "Buscar cara adiante, seguinte" #: src/command.c:201 msgid "Backward find" msgstr "Buscar cara atrás" #: src/command.c:203 msgid "Backward find previous" msgstr "Buscar cara atrás, anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Ir a" #: src/command.c:214 msgid "Artist screen" msgstr "Pantalla de Artistas" #: src/command.c:220 msgid "Change search mode" msgstr "Cambiar o modo de buscas" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Ver a canción seleccionada e a que se está a reproducir" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Interromper a acción" #: src/command.c:234 msgid "Update Lyrics" msgstr "Actualizar as letras de cancións" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Sen definir" #: src/command.c:292 msgid "Space" msgstr "Espazo" #: src/command.c:294 msgid "Enter" msgstr "Entrar" #: src/command.c:296 msgid "Backspace" msgstr "Retroceso" #: src/command.c:298 msgid "Delete" msgstr "Borrar" #: src/command.c:300 msgid "Up" msgstr "Arriba" #: src/command.c:302 msgid "Down" msgstr "Abaixo" #: src/command.c:304 msgid "Left" msgstr "Esquerda" #: src/command.c:306 msgid "Right" msgstr "Direita" #: src/command.c:308 msgid "Home" msgstr "Inicio" #: src/command.c:310 msgid "End" msgstr "Fin" #: src/command.c:312 msgid "PageDown" msgstr "PáxEmbaixo" #: src/command.c:314 msgid "PageUp" msgstr "PáxEnriba" #: src/command.c:316 msgid "Tab" msgstr "Tabulador" #: src/command.c:318 msgid "Shift+Tab" msgstr "Maiús + Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Inserir" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "A tecla %s asignouse a %s e a %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Orde descoñecida" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Aviso: Campo de cor descoñecido - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "A terminal non admite o cambio das cores" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "A terminal non ten funcionalidades de cor" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Erro" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Definición incorrecta da tecla de acceso rápido." #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Orde descoñecida" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Configuraión incompleta da tecla de acceso rápido" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Configuración incorrecta da duración mostrada" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Falta o signo «=»" #: src/conf.c:253 msgid "Bad color name" msgstr "Nome de cor incorrecto" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Definición incompleta da cor" #: src/conf.c:269 msgid "Invalid number" msgstr "Número incorrecto" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Definición incorrecta da cor" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Nome de pantalla descoñecido" #: src/conf.c:339 msgid "Invalid search mode" msgstr "O modo de busca é incorrecto" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Modo de busca descoñecido" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Parámetro de configuración descoñecido" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "ashtophet\n" "\n" "Launchpad Contributions:\n" " Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive\n" " Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" " Miguel Anxo Bouzada https://launchpad.net/~mbouzada" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "A selección de rango está desactivada" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "A selección de rango está sactivada" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Borrar a lista de reprodución %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Erro: A pantalla é moi pequena" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Aviso: Cor descoñecida - %s\n" #~ msgid "Connected to %s" #~ msgstr "Conectado a %s" #~ msgid "Shuffled playlist" #~ msgstr "Lista de reprodución aleatoria" #~ msgid "Cleared playlist" #~ msgstr "Lista limpada" #~ msgid "Save playlist as" #~ msgstr "Gardar a lista de reprodución como" #~ msgid "Playlist" #~ msgstr "Lista de reprodución" #~ msgid "Playlist on %s" #~ msgstr "Lista de reprodución en %s" #~ msgid "Playlist screen" #~ msgstr "Pantalla da lista de reprodución" #~ msgid "Shuffle playlist" #~ msgstr "Lista de reproducción aleatoria" #~ msgid "Clear playlist" #~ msgstr "Limpar a lista" #~ msgid "Save playlist" #~ msgstr "Gardar a lista de reprodución" #~ msgid "Volume n/a " #~ msgstr "Volume n/a " #~ msgid " Volume %d%%" #~ msgstr " Volume %d%%" #~ msgid "Explicitly download lyrics" #~ msgstr "Forçar a descarga das letras" #~ msgid "Search: " #~ msgstr "Procurar: " #~ msgid "Adding directory %s...\n" #~ msgstr "Engadindo o cartafol %s...\n" #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "" #~ "A tecla %s assignou-se a %s e a %s (preme %s para ir ao editor de atalhos)" #~ msgid "Clock" #~ msgstr "Relógio" #~ msgid "Lyrics [No connection]" #~ msgstr "Letras [Sem conexom]" #~ msgid "Lyrics [Not found]" #~ msgstr "Letras [Nom atopadas]" #~ msgid "Lyrics [retrieving]" #~ msgstr "Letras [a procurar]" #~ msgid "Clock screen" #~ msgstr "Écrã do relógio" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Erro: Impossível converter os caracteres a %s" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Erro: Impossível converter os caracteres a UTF-8" ncmpc-0.27/po/he.po0000644000076400001440000006462513064033560011052 00000000000000msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-09-07 20:35+0200\n" "Last-Translator: zeltak \n" "Language-Team: he \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "כן" #: src/i18n.h:43 msgid "n" msgstr "לא" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "מתחבר ל %s [לחץ על %s לביטול]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "שגיאה: גרסת התוכנה %d.%d.%d ישנה מדי (צריך %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "%s לעורך המקשים לחץ" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "מצב חזרה מופעל" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "מצב חזרה מופסק" #: src/screen.c:163 msgid "Random mode is on" msgstr "מצב רנדומלי מופעל" #: src/screen.c:164 msgid "Random mode is off" msgstr "מצב רנדומלי מופסק" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "מצב יחיד מופעל" #: src/screen.c:174 msgid "Single mode is off" msgstr "מצב יחיד מופסק" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "מצב מתכלה מופעל" #: src/screen.c:183 msgid "Consume mode is off" msgstr "מצב יחיד מופסק" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "קרוספייד שניות %d" #: src/screen.c:198 msgid "Database updated" msgstr "בסיס הנתונים עודכן" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "מצב סופי: כרוך" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "מצב סופי: נורמלי" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "מצב מרכז אוטומטי: מופעל" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "מצב מרכז אוטומטי: מופסק" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "כל השירים" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "כל האמנים" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "אלבום של אומן %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "כל השירים של אומן: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "אלבום:%s-%s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "אלבום של אומן %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "טוען רשימת שירים %s...." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "טוען...." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "טוען רשימת שירים %s...." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "מוסיף %s לרשימת השירים" #: src/screen_client.c:41 msgid "Database update running..." msgstr "עדכון בסיס הנתנונים פועל...." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "עדכון בסיס הנתנונים החל %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "עדכון בסיס הנתנונים החל" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "חיפוש" #: src/screen_find.c:30 msgid "Find backward" msgstr "חיפוש לאחור" #: src/screen_find.c:31 msgid "Jump" msgstr "קפיצה" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "לא ניתן למצוא את '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "החלף %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "סיסמה" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "החלף %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "בוטל" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "שמירת %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "הוסף" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "מחיקת פריט זה בלתי אפשרית" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "מחק רשימת שירים" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "רשימת שירים נמחקה" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "דפדף" #: src/screen_search.c:46 msgid "artist" msgstr "אומן" #: src/screen_search.c:47 msgid "album" msgstr "אלבום" #: src/screen_search.c:48 msgid "title" msgstr "שם" #: src/screen_search.c:49 msgid "track" msgstr "רצועה" #: src/screen_search.c:50 msgid "name" msgstr "שם" #: src/screen_search.c:51 msgid "genre" msgstr "ג'אנר" #: src/screen_search.c:52 msgid "date" msgstr "תאריך" #: src/screen_search.c:53 msgid "composer" msgstr "מלחין" #: src/screen_search.c:54 msgid "performer" msgstr "מבצע" #: src/screen_search.c:55 msgid "comment" msgstr "הערות" #: src/screen_search.c:62 msgid "file" msgstr "קובץ" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "שם" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "אומן" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "אלבום" #: src/screen_search.c:83 msgid "Filename" msgstr "שם קובץ" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "אומן+שם" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "חיפוש לא תקין של תגית %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "אין טעון לחיפוש תגית %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "חיפוש" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "לחץ %s לביצוע חיפוש חדש" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "חיפוש: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "חיפוש: תוצאוצ חיפוש ל %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "חיפוש: לחץ %s לחיפוש חדש [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "צורת חיפוש: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "יש תצורת מקשים חדשה" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "תצורת מקשים לא שונתה." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "שגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "שגיאה: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "נכתב %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "נמחק" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "הכנס מקש חדש ל %s " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "שגיאה: המקש %s כבר קיים ל %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "הוקצה %s ל %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "=====> ישם תצורת מקשים " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "=====> ישם ושמור תצורת מקשים " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "הוסף מקש חדש" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "הזהרה: האם שכחת 'לישם' את השינוים" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "ערוך את תצורת המקשים" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "ערוך את המקש ל %s" #: src/screen_help.c:39 msgid "Movement" msgstr "תנועה" #: src/screen_help.c:84 msgid "Global" msgstr "גלובלי" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "מסך שוני מקשים" #: src/screen_help.c:121 msgid "Play" msgstr "נגן" #: src/screen_help.c:124 msgid "Move song up" msgstr "הזז שיר למעלה" #: src/screen_help.c:125 msgid "Move song down" msgstr "הזז שיר למטה" #: src/screen_help.c:128 msgid "Center" msgstr "מרכז" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "דפדף במסך" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "הכנס תיקיה/בחר ונגן שיר" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "הוסף שיר לרשימת שירים" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "מחק רשימת שירים" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "חפש במסך" #: src/screen_help.c:151 msgid "Select and play" msgstr "בחר ונגן" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "מסך מילות השיר" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "הצג מילים לשיר" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "הטען מחדש מילים לשיר" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "שליפת המידע הופסקה" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "הורד מילים לשיר המנגן כרגע" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "שמור מילים לשיר" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "מסך הפלט" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "אשר/אסור על פלט" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "מסך הבא" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "מסך שוני מקשים" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "ערוך שוני מקשים לפקודות שונות" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "הסר שוני מקשים" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "הוסף מקש חדש" #: src/screen_help.c:194 msgid "Go up a level" msgstr "עלה רמה אחת" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "ישם ושמור שינויים" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "עזרה" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "אין מילים לשיר" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "מילים" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "טוען...." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "מילים לשיר נשמרו" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "פלט '%s' אפשרי" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "פלט '%s' אינו אפשרי" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "פלטים" #: src/screen_song.c:49 msgid "Length" msgstr "" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "מלחון" #: src/screen_song.c:52 msgid "Name" msgstr "שם" #: src/screen_song.c:53 msgid "Disc" msgstr "דיסק" #: src/screen_song.c:54 msgid "Track" msgstr "רצועה" #: src/screen_song.c:55 msgid "Date" msgstr "תאריך" #: src/screen_song.c:56 msgid "Genre" msgstr "ג'אנר" #: src/screen_song.c:57 msgid "Comment" msgstr "הערה" #: src/screen_song.c:58 msgid "Path" msgstr "נתיב" #: src/screen_song.c:59 msgid "Bitrate" msgstr "ביטרייט" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "מספר אומנים" #: src/screen_song.c:77 msgid "Number of albums" msgstr "מספר אלבומים" #: src/screen_song.c:78 msgid "Number of songs" msgstr "מספר שירים" #: src/screen_song.c:79 msgid "Uptime" msgstr "זמן פעילות" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "עדכון עדכני אחרון של בסיב נתונים" #: src/screen_song.c:81 msgid "Playtime" msgstr "זמן נגינה" #: src/screen_song.c:82 msgid "DB playtime" msgstr "זמן נגינה בסיס נתונים" #: src/screen_song.c:171 msgid "Song viewer" msgstr "הצגת השיר" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "סטטיסטיקה MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "בחר שיר" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "שיר עכשווי" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "מנגן:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[הפסקה]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "ב n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "ווליום %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "מסך קינפוג מקשים" #: src/command.c:66 msgid "Quit" msgstr "צא מהתוכנה" #: src/command.c:70 msgid "Move cursor up" msgstr "הזז סמן למעלה" #: src/command.c:72 msgid "Move cursor down" msgstr "הזז סמן למטה" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "הזז סמן לקצה העליון של המסך" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "הזז סמן לאמצע של המסך" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "הזז סמן לקצה התחתון של המסך" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "הזז סמן לקצה העליון של הרשימה" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "הזז סמן לקצה התחתון של הרשימה" #: src/command.c:84 msgid "Page up" msgstr "דף למעלה" #: src/command.c:86 msgid "Page down" msgstr "דף למטה" #: src/command.c:88 msgid "Range selection" msgstr "בחירת טווח" #: src/command.c:90 msgid "Scroll down one line" msgstr "גלול שורה אחת" #: src/command.c:92 msgid "Scroll up one line" msgstr "גלול שורה אחת למעלה" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "גלול חצי מסך למעלה" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "גלול חצי מסך למטה" #: src/command.c:98 msgid "Select currently playing song" msgstr "בחר בשיר שכרגע מנגן" #: src/command.c:103 msgid "Help screen" msgstr "מסך עזרה" #: src/command.c:112 msgid "Play/Enter directory" msgstr "נגן/הכנס תיקיה" #: src/command.c:114 msgid "Pause" msgstr "הפסק" #: src/command.c:116 msgid "Stop" msgstr "עצור" #: src/command.c:118 msgid "Crop" msgstr "חתוך" #: src/command.c:120 msgid "Next track" msgstr "רצועה הבאה" #: src/command.c:122 msgid "Previous track" msgstr "רצועה קודמת" #: src/command.c:124 msgid "Seek forward" msgstr "דלג קדימה" #: src/command.c:126 msgid "Seek backward" msgstr "דלג אחורה" #: src/command.c:128 msgid "Increase volume" msgstr "הגבר" #: src/command.c:130 msgid "Decrease volume" msgstr "הנמך" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "בחר/הסר שיר ברשימת שירים" #: src/command.c:134 msgid "Select all listed items" msgstr "בחר את הכל" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "מחק שיר מרשימת השירים" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "הפעל מצב חזרה" #: src/command.c:144 msgid "Toggle random mode" msgstr "הפעל מצב רנדומלי" #: src/command.c:146 msgid "Toggle single mode" msgstr "הפעל מצב יחיד" #: src/command.c:148 msgid "Toggle consume mode" msgstr "הפעל מצב מתכלה" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "הפעל קרוספייד" #: src/command.c:152 msgid "Start a music database update" msgstr "התחל עדכון בסיס הנתונים המוזיקלי" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "הוסף לינק/קובץ לרשימת שירים" #: src/command.c:159 msgid "Go to root directory" msgstr "לך לתיקיה שורש" #: src/command.c:161 msgid "Go to parent directory" msgstr "לך לתיקיה עליונה" #: src/command.c:164 msgid "Locate song in browser" msgstr "מצא שיר בדפדפן" #: src/command.c:168 msgid "Move item up" msgstr "הזז למעלה" #: src/command.c:170 msgid "Move item down" msgstr "הזז למטה" #: src/command.c:172 msgid "Refresh screen" msgstr "רענן מסך" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "הפעל מצב חיפוש" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "הפעל מירכוז אוטומטי" #: src/command.c:188 msgid "Next screen" msgstr "מסך הבא" #: src/command.c:190 msgid "Previous screen" msgstr "מסך קודם" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "החלף למסך אחרון" #: src/command.c:197 msgid "Forward find" msgstr "מצא קדימה" #: src/command.c:199 msgid "Forward find next" msgstr "מצא קדימה הבא" #: src/command.c:201 msgid "Backward find" msgstr "מצא אחורה" #: src/command.c:203 msgid "Backward find previous" msgstr "מצא אחורה הבא" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "קפוץ ל" #: src/command.c:214 msgid "Artist screen" msgstr "מסך אומן" #: src/command.c:220 msgid "Change search mode" msgstr "שנה תצורת מסך" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "הראה את השיר הנבחר והמנגן" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "הפסק פעולה" #: src/command.c:234 msgid "Update Lyrics" msgstr "רענן מילים לשיר" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "לא מוגדר" #: src/command.c:292 msgid "Space" msgstr "רווח" #: src/command.c:294 msgid "Enter" msgstr "הכנס" #: src/command.c:296 msgid "Backspace" msgstr "אחורה" #: src/command.c:298 msgid "Delete" msgstr "מחק" #: src/command.c:300 msgid "Up" msgstr "למעלה" #: src/command.c:302 msgid "Down" msgstr "למטה" #: src/command.c:304 msgid "Left" msgstr "שמאלה" #: src/command.c:306 msgid "Right" msgstr "חמינה" #: src/command.c:308 msgid "Home" msgstr "בית" #: src/command.c:310 msgid "End" msgstr "סוף" #: src/command.c:312 msgid "PageDown" msgstr "דף למטה" #: src/command.c:314 msgid "PageUp" msgstr "דף למעלה" #: src/command.c:316 msgid "Tab" msgstr "טאב" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "מקש %s מוקצה ל %s ו %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "פקודה לא ידועה" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "אזהרה: צבע לא מוכ בתחום - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "המסוף ללא תמיכה בצבעים" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "המסוף ללא יכולת תמיכה בצבעים" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "שגיאה" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "הגדרת המקשים החמים שגויה" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "פקודה לא ידועה" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "הגדרת המקשים החמים חסרה" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "תצוגת זמן שגויה" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "חסר '='" #: src/conf.c:253 msgid "Bad color name" msgstr "צבע שגוי" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "הגדרת צבעים חסרה" #: src/conf.c:269 msgid "Invalid number" msgstr "מספר לא תקין" #: src/conf.c:277 msgid "Malformed color definition" msgstr "הגדרת צבעים שגויה" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "שם מסך לא ידוע" #: src/conf.c:339 msgid "Invalid search mode" msgstr "חיפוש לא תקין" #: src/conf.c:362 msgid "Unknown search mode" msgstr "מצב חיפוש לא ידוע" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "פרמטר קונפיג לא ידוע" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " zeltak https://launchpad.net/~zeltak" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "טווח בחירה מאושר" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "טווח בחירה מבוטל" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "%s [%s/%s] ? מחיקת רשימת שירים " #~ msgid "Error: Screen too small" #~ msgstr "שגיאה: המסך קטן מידי" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "אזהרה: צבע לא מוכר - %s\n" #~ msgid "Connected to %s" #~ msgstr "מתחבר ל %s" #~ msgid "Shuffled playlist" #~ msgstr "רשימת שירים מעורבבת" #~ msgid "Cleared playlist" #~ msgstr "רשימת שירים מנוקה" #~ msgid "Save playlist as" #~ msgstr "שמירת רשימת שירים כ" #~ msgid "Playlist" #~ msgstr "רשימת שירים" #~ msgid "Playlist on %s" #~ msgstr "רשימת שירים ב %s" #~ msgid "Playlist screen" #~ msgstr "מסך רשימת שירים" #~ msgid "Shuffle playlist" #~ msgstr "ערבב את רשימת שירים" #~ msgid "Clear playlist" #~ msgstr "מחק את רשימת שירים" #~ msgid "Save playlist" #~ msgstr "שמור רשימת שירים" ncmpc-0.27/po/hu.po0000644000076400001440000006534613064033560011073 00000000000000# Hungarian translation for ncmpc # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2009-09-24 21:45+0000\n" "Last-Translator: Kiszel Kristóf \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "i" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Kapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Hiba: a(z) %d.%d.%d MPD verzió túl régi (%s kell)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "nyomj %s-t a szerkesztéshez" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Ismétlő mód be" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Ismétlő mód ki" #: src/screen.c:163 msgid "Random mode is on" msgstr "Véletlen mód be" #: src/screen.c:164 msgid "Random mode is off" msgstr "Véletlen mód ki" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Egyszeri lejátszás mód be" #: src/screen.c:174 msgid "Single mode is off" msgstr "Egyszeri lejátszás mód ki" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Fogyasztó mód be" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Fogyasztó mód ki" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Egymásba mosás %d másodperc" #: src/screen.c:198 msgid "Database updated" msgstr "Adatbázis frissítve" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Keresési mód: újrakezdő" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Keresési mód: normál" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Középre igazítás bekapcsolva" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Középre igazítás kikapcsolva" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Minden szám" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Minden előadó" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "%s előadó albumai" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "%s előadó minden száma" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "%s előadó albumai" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "%s lejátszólista betöltése..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "%s könyvtár hozzáadása...\n" #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "%s lejátszólista betöltése..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "'%s' hozzáadása a lejátszólistához" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Adatbázis frissítés folyamatban..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "%s adatbázis frissítése elkezdődött" #: src/screen_client.c:52 msgid "Database update started" msgstr "Adatbázis frissítés elindult" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Keresés" #: src/screen_find.c:30 msgid "Find backward" msgstr "Keresés visszafelé" #: src/screen_find.c:31 msgid "Jump" msgstr "Ugrás" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "'%s' nem található" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Cserélni a következőt: %s [%s/%s]? " #: src/screen_utils.c:121 msgid "Password" msgstr "Jelszó" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Cserélni a következőt: %s [%s/%s]? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Megszakítva" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s elmentve" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Hozzáadás" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Ez az elem nem törölhető" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Lejátszólista törlése" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Lejátszólista törölve" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Tallózás" #: src/screen_search.c:46 msgid "artist" msgstr "előadó" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "cím" #: src/screen_search.c:49 msgid "track" msgstr "szám" #: src/screen_search.c:50 msgid "name" msgstr "név" #: src/screen_search.c:51 msgid "genre" msgstr "műfaj" #: src/screen_search.c:52 msgid "date" msgstr "dátum" #: src/screen_search.c:53 msgid "composer" msgstr "zeneszerző" #: src/screen_search.c:54 msgid "performer" msgstr "előadó" #: src/screen_search.c:55 msgid "comment" msgstr "megjegyzés" #: src/screen_search.c:62 msgid "file" msgstr "fájl" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Cím" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Előadó" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Fájlnév" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Előadó és Cím" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Hibás keresési elem %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Nincs argumentuma a(z) %s keresési elemnek" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Keresés" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Új kereséshez nyomj %s gombot" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Keresés: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Keresés: találatok a következőhöz %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Keresés: új kereséshez nyomj %s gombot [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Keresési mód: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Új billentyű beállításaid vannak" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "A billentyű beállítások változatlanok." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Hiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Hiba: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s elmentve" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Törölve" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Nyomd meg az új gombot a következőhöz: %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Hiba: %s gombot már a következő funkció használja: %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s hozzárendelve a következőhöz: %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Billentyű beállítások használata " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Alkalmaz és Menti a billentyű beállításokat " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Új gomb hozzáadása" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Észrevétel: nem felejtetted el érvényesíteni a változtatásaidat?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Billentyűk változtatása" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Gombok módosítása a következőhöz: %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Mozgás" #: src/screen_help.c:84 msgid "Global" msgstr "Általános" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Billentyű beállító képernyő" #: src/screen_help.c:121 msgid "Play" msgstr "Lejátszás" #: src/screen_help.c:124 msgid "Move song up" msgstr "Szám mozgatása felfelé" #: src/screen_help.c:125 msgid "Move song down" msgstr "Szám mozgatása lefelé" #: src/screen_help.c:128 msgid "Center" msgstr "Közép" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Tallózás" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Könyvtár megadása/szám kiválasztása és lejátszása" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Szám hozzáadása a lejátszólistához" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Lejátszólista törlése" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Kereső képernyő" #: src/screen_help.c:151 msgid "Select and play" msgstr "Kiválasztás és lejátszás" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Dalszöveg képernyő" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Dalszövegek megtekintése" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "Dalszövegek (újra)töltése" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Újrapróbálkozás megszakítása" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Dalszöveg letöltése a jelenlegi zenéhez" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Dalszövegek mentése" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Kimenetek" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Kimenet engedélyezése/tiltása" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Kövezkező képernyő" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Billentyű beállító képernyő" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Billentyű szerkesztése a kiválasztott parancshoz" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Billentyű hozzárendelés megszűntetése" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Új gomb hozzáadása" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Egy szinttel feljebb" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Alkalmaz és menti a változásokat" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Súgó" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Nincs dalszöveg" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Dalszövegek" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "betöltés..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Dalszövegek elmentve" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Kimenet engedélyezve: %s" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Kimenet tiltva: %s" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Kimenetek" #: src/screen_song.c:49 msgid "Length" msgstr "Hossz" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Zeneszerző" #: src/screen_song.c:52 msgid "Name" msgstr "Név" #: src/screen_song.c:53 msgid "Disc" msgstr "Lemez" #: src/screen_song.c:54 msgid "Track" msgstr "Szám" #: src/screen_song.c:55 msgid "Date" msgstr "Dátum" #: src/screen_song.c:56 msgid "Genre" msgstr "Műfaj" #: src/screen_song.c:57 msgid "Comment" msgstr "Megjegyzés" #: src/screen_song.c:58 msgid "Path" msgstr "Elérési út" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitráta" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Előadók száma" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Albumok száma" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Zenék száma" #: src/screen_song.c:79 msgid "Uptime" msgstr "Üzemidő" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Legutóbbi adatbázis frissítés" #: src/screen_song.c:81 msgid "Playtime" msgstr "Lejátszási idő" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Teljes adatbázis lejátszási ideje" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Szám néző" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD statisztika" #: src/screen_song.c:410 msgid "Selected song" msgstr "Kiválasztott zene" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Jelenlegi zene" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Ami szól:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Szüneteltetve]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Hangerő ismeretlen" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Hangerő %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Billentyű beállító képernyő" #: src/command.c:66 msgid "Quit" msgstr "Kilép" #: src/command.c:70 msgid "Move cursor up" msgstr "Kurzormozgatás felfelé" #: src/command.c:72 msgid "Move cursor down" msgstr "Kurzormozgatás lefelé" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Kurzor mozgatása a képernyő tetejére" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Kurzor mozgatása a képernyő közepére" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Kurzor mozgatása a képernyő aljára" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Kurzor mozgatása a lista tetejére" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Kurzor mozgatása a lista aljára" #: src/command.c:84 msgid "Page up" msgstr "Egy oldalt fel" #: src/command.c:86 msgid "Page down" msgstr "Egy oldalt le" #: src/command.c:88 msgid "Range selection" msgstr "Tartomány kiválasztása" #: src/command.c:90 msgid "Scroll down one line" msgstr "Görgetés egy sorral le" #: src/command.c:92 msgid "Scroll up one line" msgstr "Görgetés egy sorral fel" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Görgetés fél képernyőnyivel fel" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Görgetés fél képernyőnyivel le" #: src/command.c:98 msgid "Select currently playing song" msgstr "Most lejátszott szám kiválasztása" #: src/command.c:103 msgid "Help screen" msgstr "Segítség" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Lejátszás/Belépés könyvtárba" #: src/command.c:114 msgid "Pause" msgstr "Szüneteltetés" #: src/command.c:116 msgid "Stop" msgstr "Leállítás" #: src/command.c:118 msgid "Crop" msgstr "Vágás" #: src/command.c:120 msgid "Next track" msgstr "Következő szám" #: src/command.c:122 msgid "Previous track" msgstr "Előző szám" #: src/command.c:124 msgid "Seek forward" msgstr "Tekerés előre" #: src/command.c:126 msgid "Seek backward" msgstr "Tekerés hátra" #: src/command.c:128 msgid "Increase volume" msgstr "Hangerő növelése" #: src/command.c:130 msgid "Decrease volume" msgstr "Hangerő csökkentése" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Szám kiválasztása a lejátszólistában" #: src/command.c:134 msgid "Select all listed items" msgstr "Minden listázott elem kiválasztása" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Szám törlése a lejátszólistából" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Ismétlő mód ki- és bekapcsolása" #: src/command.c:144 msgid "Toggle random mode" msgstr "Véletlenszerű lejátszás ki- és bekapcsolása" #: src/command.c:146 msgid "Toggle single mode" msgstr "Egyszeri mód átkapcsolása" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Fogyasztó mód átkapcsolása" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Egymásba mosás ki- és bekapcsolása" #: src/command.c:152 msgid "Start a music database update" msgstr "A zenei adatbázis frissítésének indítása" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "URL vagy fájl hozzáadása a lejátszólistához" #: src/command.c:159 msgid "Go to root directory" msgstr "Mozgás a gyökér könyvtárba" #: src/command.c:161 msgid "Go to parent directory" msgstr "Mozgás a szülő könyvtárba" #: src/command.c:164 msgid "Locate song in browser" msgstr "Szám megtekintése a tallozóban" #: src/command.c:168 msgid "Move item up" msgstr "Elem mozgatása fel" #: src/command.c:170 msgid "Move item down" msgstr "Elem mozgatása le" #: src/command.c:172 msgid "Refresh screen" msgstr "Képernyő frissítése" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Kereső mód ki- és bekapcsolása" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Középre igazítás ki- és bekapcsolása" #: src/command.c:188 msgid "Next screen" msgstr "Kövezkező képernyő" #: src/command.c:190 msgid "Previous screen" msgstr "Előző képernyő" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Váltás a legutóbbi képernyőre" #: src/command.c:197 msgid "Forward find" msgstr "Keresés előre" #: src/command.c:199 msgid "Forward find next" msgstr "Következő keresése előre" #: src/command.c:201 msgid "Backward find" msgstr "Keresés hátra" #: src/command.c:203 msgid "Backward find previous" msgstr "Előző keresése hátra" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Ugrás oda" #: src/command.c:214 msgid "Artist screen" msgstr "Előadó képernyő" #: src/command.c:220 msgid "Change search mode" msgstr "Kereső mód váltása" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "A kiválasztott és épp lejátszott szám megtekintése" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "parancs megszakítása" #: src/command.c:234 msgid "Update Lyrics" msgstr "Dalszövegek frissítése" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Meghatározatlan" #: src/command.c:292 msgid "Space" msgstr "Szóköz" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Up" #: src/command.c:302 msgid "Down" msgstr "Down" #: src/command.c:304 msgid "Left" msgstr "Left" #: src/command.c:306 msgid "Right" msgstr "Right" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "A(z) %s gomb a követlezőkhoz van rendelve: %s és %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Ismeretlen parancs" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Figyelem: ismeretlen szín mező - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "A terminál nem támogatja a színek változtatását" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "A terminál nem támogatja a színeket" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Hiba" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Hibás gyorsbillentyű definíció" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Ismeretlen parancs" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Hiányos gyorsbillentyű definíció" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Hibás időkijelzési típus" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Hiányzó egyenlőség jel" #: src/conf.c:253 msgid "Bad color name" msgstr "Hibás szín megnevezés" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Hiányos szín megadás" #: src/conf.c:269 msgid "Invalid number" msgstr "Érvénytelen szám" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Hibás szín megadás" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Ismeretlen képernyő név" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Érvénytelen keresési mód" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Ismeretlen keresési mód" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Ismeretlen konfigurációs paraméter" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Kiszel Kristóf https://launchpad.net/~ulysses\n" " Laszlo Ashin https://launchpad.net/~kodest" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Tartomány kiválasztás letiltva" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Tartomány kiválasztás engedélyezve" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Törlöd a %s lejátszólistát [%s/%s]? " #~ msgid "Error: Screen too small" #~ msgstr "Hiba: a képernyő túl kicsi" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Figyelem: ismeretlen szín - %s\n" #~ msgid "Connected to %s" #~ msgstr "Csatlakoztatva ide: %s" #~ msgid "Shuffled playlist" #~ msgstr "Lejátszólista összekeverve" #~ msgid "Cleared playlist" #~ msgstr "Lejátszólista törölve" #~ msgid "Save playlist as" #~ msgstr "Lejátszólista mentése másként" #~ msgid "Playlist" #~ msgstr "Lejátszólista" #~ msgid "Playlist on %s" #~ msgstr "Lejátszólista itt: %s" #~ msgid "Playlist screen" #~ msgstr "Lejátszólista" #~ msgid "Shuffle playlist" #~ msgstr "Lejátszólista összekeverése" #~ msgid "Clear playlist" #~ msgstr "Lejátszólista törlése" #~ msgid "Save playlist" #~ msgstr "Lejátszólista mentése" #~ msgid "Search: " #~ msgstr "Keresés: " #~ msgid "Explicitly download lyrics" #~ msgstr "Dalszövegek kifejezett letöltése" #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "" #~ "%s gomb hozzárendelve a következőkhöz: %s és %s (nyomj %s-t a " #~ "szerkesztéshez)" ncmpc-0.27/po/it.po0000644000076400001440000005753013064033560011067 00000000000000# Italian translation for ncmpc # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-10-31 19:53+0000\n" "Last-Translator: simone.sandri \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n" "X-Generator: Launchpad (build 12138)\n" #: src/i18n.h:42 msgid "y" msgstr "e" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Collegandosi a %s... [Preme %s per annullare]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" "Errore: La versione di MPD %d.%d.%d è troppo vecchia (bisogna avere al meno " "la %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "preme %s per accedere al editore di tasti" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Modo ripetizione attivato" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Modo ripetizione disattivato" #: src/screen.c:163 msgid "Random mode is on" msgstr "Modo randomizzato attivo" #: src/screen.c:164 msgid "Random mode is off" msgstr "Modo randomizzato disattivato" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Modo singolo attivato" #: src/screen.c:174 msgid "Single mode is off" msgstr "Modo singolo disattivato" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Modo consumazione attivato" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Modo consumazione disattivato" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "" #: src/screen.c:198 msgid "Database updated" msgstr "Database aggiornato" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Modo di ricerca: semplice" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Modo di ricerca: Normale" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Modo di auto-centrato: attivato" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Modo di auto-centrato: disattivato" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Tutte le piste" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Tutti gli artisti" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Album del artista: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Tutte le piste del artista: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Aggiungendo album %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Aggiungendo %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Caricando la lista %s" #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Aggiungendo '%s' alla lista di canzoni" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Aggiornamento del database in corso..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Iniziato l'aggiornamento del database %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "Iniziato l'aggiornamento del database." #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Cerca" #: src/screen_find.c:30 msgid "Find backward" msgstr "" #: src/screen_find.c:31 msgid "Jump" msgstr "Salta" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Non si ha potuto trovare %s" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Sostituire %s [%s%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Password" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Sostituire %s [%s%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Annullato" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s salvato" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Aggiungi" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Non è possibile rimuovere questo elemento." #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Rimuove la playlist" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Playlist rimossa." #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Esplora" #: src/screen_search.c:46 msgid "artist" msgstr "artista" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titolo" #: src/screen_search.c:49 msgid "track" msgstr "track" #: src/screen_search.c:50 msgid "name" msgstr "nome" #: src/screen_search.c:51 msgid "genre" msgstr "genero" #: src/screen_search.c:52 msgid "date" msgstr "data" #: src/screen_search.c:53 msgid "composer" msgstr "compositore" #: src/screen_search.c:54 msgid "performer" msgstr "interprete" #: src/screen_search.c:55 msgid "comment" msgstr "commentare" #: src/screen_search.c:62 msgid "file" msgstr "file" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titolo" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artista" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Nome del file" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artista + Titolo" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Etichetta di ricerca invalida: %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Senza argomenti per la etichetta di ricerca %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Cerca" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Preme %s per una nuova ricerca" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Cerca: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Errore: Non si ha potuto creare la cartella ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Errore: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s creato" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Rimosso" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Introduce tasto di acceso veloce per %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Errore: il tasto %s già sta assegnato a %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s assegnato a %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "" #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "" #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Introduce un nuovo tasto" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Nota: Hai dimenticato 'Applicare' i tuoi cambiamenti?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Cambia i tasti di acceso veloce" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Cambia i tasti per %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Movimento" #: src/screen_help.c:84 msgid "Global" msgstr "Globale" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Schermo di tasti di acceso" #: src/screen_help.c:121 msgid "Play" msgstr "Play" #: src/screen_help.c:124 msgid "Move song up" msgstr "Sposta la canzone su" #: src/screen_help.c:125 msgid "Move song down" msgstr "Sposta la canzone giù" #: src/screen_help.c:128 msgid "Center" msgstr "Centrare" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Accedere alla cartella/Selezionare e riprodurre la canzone" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Aggiungere la canzone alla lista" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Rimuove la playlist" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Ricerca" #: src/screen_help.c:151 msgid "Select and play" msgstr "Seleziona e riprodurre" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Lettere" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Vedere le lettere" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Ri)caricare le lettere" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Annullare la scarica." #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Ottenere le lettere della canzone riprodotta" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Non ci sono testi salvati" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Salvare le lettere" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Rimuovere le lettere" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Schermo di uscite" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Attivare/disattivare le uscite" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Lista di canzoni" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Schermo di tasti di acceso" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Cambia i tasti di acceso veloce per il commando selezionato" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Rimuovere il tasto di acceso veloce selezionato" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Introduce un nuovo tasto" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Salire un livello" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Applicare e salvare i cambiamenti" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Aiuto" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Non ci sono testi disponibili" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Testi" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "caricamento in corso..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Testi salvati" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Testi rimossi" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Non ci sono testi salvati" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "La uscita '%s' è attivata" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "La uscita '%s' è disattivata" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Uscite" #: src/screen_song.c:49 msgid "Length" msgstr "Durata" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Compositore" #: src/screen_song.c:52 msgid "Name" msgstr "Nome" #: src/screen_song.c:53 msgid "Disc" msgstr "Disco" #: src/screen_song.c:54 msgid "Track" msgstr "Brano" #: src/screen_song.c:55 msgid "Date" msgstr "Data" #: src/screen_song.c:56 msgid "Genre" msgstr "Genero" #: src/screen_song.c:57 msgid "Comment" msgstr "Commento" #: src/screen_song.c:58 msgid "Path" msgstr "Path" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitrate" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Numero di artisti" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Numero di albums" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Numero di brani" #: src/screen_song.c:79 msgid "Uptime" msgstr "Tempo in attività" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Aggiornamento più recente del database" #: src/screen_song.c:81 msgid "Playtime" msgstr "Tempo di riproduzione" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Durata del database" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Visore di canzoni" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Statistiche del MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Brano selezionato" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Brano riprodotto" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Riproducendo:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pausato]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volume n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "" #: src/command.c:66 msgid "Quit" msgstr "Esci" #: src/command.c:70 msgid "Move cursor up" msgstr "Muovi cursore in alto" #: src/command.c:72 msgid "Move cursor down" msgstr "Muovi cursore in basso" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Muovi cursore in cima allo schermo" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Muovi cursore in mezzo allo schermo" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Muovi cursore in fondo allo schermo" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Muovi cursore in cima alla lista" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Muovi cursore in fondo alla lista" #: src/command.c:84 msgid "Page up" msgstr "Pagina sopra" #: src/command.c:86 msgid "Page down" msgstr "Pagina sotto" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Esegui/Entra nella cartella" #: src/command.c:114 msgid "Pause" msgstr "Pausa" #: src/command.c:116 msgid "Stop" msgstr "Ferma" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "Prossima traccia" #: src/command.c:122 msgid "Previous track" msgstr "Traccia precedente" #: src/command.c:124 msgid "Seek forward" msgstr "" #: src/command.c:126 msgid "Seek backward" msgstr "" #: src/command.c:128 msgid "Increase volume" msgstr "Alza volume" #: src/command.c:130 msgid "Decrease volume" msgstr "Abbassa volume" #: src/command.c:132 msgid "Select/deselect song in queue" msgstr "" #: src/command.c:134 msgid "Select all listed items" msgstr "Seleziona tutti gli oggetti della lista" #: src/command.c:136 msgid "Delete song from queue" msgstr "" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "" #: src/command.c:144 msgid "Toggle random mode" msgstr "" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "" #: src/command.c:152 msgid "Start a music database update" msgstr "" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 msgid "Add url/file to queue" msgstr "" #: src/command.c:159 msgid "Go to root directory" msgstr "" #: src/command.c:161 msgid "Go to parent directory" msgstr "" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "" #: src/command.c:170 msgid "Move item down" msgstr "" #: src/command.c:172 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "" #: src/command.c:188 msgid "Next screen" msgstr "" #: src/command.c:190 msgid "Previous screen" msgstr "" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "" #: src/command.c:199 msgid "Forward find next" msgstr "" #: src/command.c:201 msgid "Backward find" msgstr "" #: src/command.c:203 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "" #: src/command.c:214 msgid "Artist screen" msgstr "" #: src/command.c:220 msgid "Change search mode" msgstr "" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "" #: src/command.c:234 msgid "Update Lyrics" msgstr "" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "" #: src/command.c:292 msgid "Space" msgstr "" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "" #: src/command.c:302 msgid "Down" msgstr "" #: src/command.c:304 msgid "Left" msgstr "" #: src/command.c:306 msgid "Right" msgstr "" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "" #: src/colors.c:156 msgid "Unknown color" msgstr "" #: src/colors.c:196 msgid "Unknown color field" msgstr "" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "" #: src/conf.c:253 msgid "Bad color name" msgstr "" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "" #: src/conf.c:269 msgid "Invalid number" msgstr "" #: src/conf.c:277 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Luis Miguel D.P. https://launchpad.net/~lmdp\n" " Max Kellermann https://launchpad.net/~max-duempel\n" " simone.sandri https://launchpad.net/~lexluxsox" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Rimuovere la playlist %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Errore: La finestra è tropo piccola" #~ msgid "Connected to %s" #~ msgstr "Connesso a %s" #~ msgid "Shuffled playlist" #~ msgstr "Lista di canzoni mescolata" #~ msgid "Cleared playlist" #~ msgstr "Lista di canzoni vuotata" #~ msgid "Save playlist as" #~ msgstr "Salvare la lista come" #~ msgid "Playlist" #~ msgstr "Playlist" #~ msgid "Playlist on %s" #~ msgstr "Lista di canzoni in %s" #~ msgid "Playlist screen" #~ msgstr "Lista di canzoni" #~ msgid "Save playlist" #~ msgstr "Salva playlist" ncmpc-0.27/po/ko.po0000644000076400001440000006517013064033560011063 00000000000000# Korean translation for ncmpc # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2009-10-16 17:35+0000\n" "Last-Translator: Jay Whang \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-10-19 13:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "y" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "MPD 버전 %d%d%d (은)는 너무 낮습니다. (필요한 버전 %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "키 편집기 사용을 위하여 %s(을)를 누르십시오." #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "반복 모드 켜짐" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "반복 모드 꺼짐" #: src/screen.c:163 msgid "Random mode is on" msgstr "무작위 모드 켜짐" #: src/screen.c:164 msgid "Random mode is off" msgstr "무작위 모드 꺼짐" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "싱글 모드 켜짐" #: src/screen.c:174 msgid "Single mode is off" msgstr "싱글 모드 꺼짐" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "소비 모드 켜짐" #: src/screen.c:183 msgid "Consume mode is off" msgstr "소비 모드 꺼짐" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "곡바뀜 %d 초" #: src/screen.c:198 msgid "Database updated" msgstr "데이터베이스를 업데이트 하였습니다." #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "찾기 방식: 줄 이어짐" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "찾기 방식: 보통" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "자동 가운데 방식: 켜짐" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "자동 가운데 방식: 꺼짐" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "모든 트랙" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "모든 아티스트" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "아티스트의 앨범: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "아티스트의 모든 트랙: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "앨범: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "아티스트의 앨범: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "연주목록 %s(을)를 올리는 중..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "올리는 중..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "연주목록 %s(을)를 올리는 중..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "'%s'(을)를 연주목록에 더하기" #: src/screen_client.c:41 msgid "Database update running..." msgstr "데이터베이스 업데이트를 실행 중..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "%s 데이터베이스 업데이트를 시작합니다." #: src/screen_client.c:52 msgid "Database update started" msgstr "데이터베이스 업데이트를 시작합니다." #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "찾기" #: src/screen_find.c:30 msgid "Find backward" msgstr "거꾸로 찾기" #: src/screen_find.c:31 msgid "Jump" msgstr "이동" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "'%s'(을)를 찾을 수 없습니다." #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "변경하기 %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "열쇠글" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "변경하기 %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "중단됨" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s(으)로 저장함" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "더하기" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "이 항목을 지우는 것은 가능하지 않습니다." #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "연주목록 지우기" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "연주목록을 삭제하였습니다." #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "열람" #: src/screen_search.c:46 msgid "artist" msgstr "아티스트" #: src/screen_search.c:47 msgid "album" msgstr "앨범" #: src/screen_search.c:48 msgid "title" msgstr "제목" #: src/screen_search.c:49 msgid "track" msgstr "트랙" #: src/screen_search.c:50 msgid "name" msgstr "이름" #: src/screen_search.c:51 msgid "genre" msgstr "장르" #: src/screen_search.c:52 msgid "date" msgstr "날짜" #: src/screen_search.c:53 msgid "composer" msgstr "작곡가" #: src/screen_search.c:54 msgid "performer" msgstr "연주가" #: src/screen_search.c:55 msgid "comment" msgstr "주석" #: src/screen_search.c:62 msgid "file" msgstr "파일" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "제목" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "아티스트" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "앨범" #: src/screen_search.c:83 msgid "Filename" msgstr "파일이름" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "아티스트 + 제목" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "잘못된 찾기 태그 %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "찾기 태그 %s위한 인자가 없습니다." #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "찾기" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "새로운 찾기를 위하여 %s(을)를 누르십시오." #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "찾기: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "찾기: %s 결과 [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "찾기: %s(을)를 눌러 새롭게 찾기 [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "찾기 방식: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "새로운 키 조합을 지정하였습니다." #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "키 조합을 바꾸지 않았습니다." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "오류: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "%s(을)를 썼습니다." #: src/screen_keydef.c:250 msgid "Deleted" msgstr "삭제됨" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "%s(을)를 위한 새 키를 입력하세요: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "오류: 키 %s(은)는 이미 %s(을)를 위하여 사용합니다." #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s(을)를 %s(으)로 지정하였습니다." #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> 키 조합을 적용 " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> 키 조합을 적용하고 저장 " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "새로운 키 더하기" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "주의: 변경사항 '적용하기'를 잊었나요?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "키 조합 편집하기" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "%s(을)를 위한 키 편집" #: src/screen_help.c:39 msgid "Movement" msgstr "이동" #: src/screen_help.c:84 msgid "Global" msgstr "전체" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "키설정 화면" #: src/screen_help.c:121 msgid "Play" msgstr "연주" #: src/screen_help.c:124 msgid "Move song up" msgstr "곡을 위로 올리기" #: src/screen_help.c:125 msgid "Move song down" msgstr "곡을 아래로 내리기" #: src/screen_help.c:128 msgid "Center" msgstr "가운데" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "열람하기 화면" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "디렉토리를 입력하고 곡을 선택하여 연주합니다." #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "연주목록에 곡을 더하기" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "연주목록 지우기" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "찾기 화면" #: src/screen_help.c:151 msgid "Select and play" msgstr "선택하고 연주" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "가사 화면" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "가사 보기" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "가사 (다시)올리기" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "가사 가져오기 중지" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "현재 연주중인 노래의 가사를 다운로드" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "가사 저장하기" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "가사 저장하기" #: src/screen_help.c:170 #, fuzzy msgid "Delete saved lyrics" msgstr "가사 저장하기" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "출력 화면" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "출력 사용하기/안하기" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "다음 화면" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "키설정 화면" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "선택한 명령을 위한 키설정 편집하기" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "선택한 키설정 삭제하기" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "새로운 키 더하기" #: src/screen_help.c:194 msgid "Go up a level" msgstr "한 단계 위로 가기" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "적용하고 변경사항을 저장하기" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "도움말" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "가사 없음" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "가사" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "올리는 중..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "가사를 저장하였습니다." #: src/screen_lyrics.c:443 #, fuzzy msgid "Lyrics deleted" msgstr "연주목록을 삭제하였습니다." #: src/screen_lyrics.c:446 #, fuzzy msgid "No saved lyrics" msgstr "가사 저장하기" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "출력 '%s'(을)를 사용합니다" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "출력 '%s'(을)를 사용 안합니다" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "출력" #: src/screen_song.c:49 msgid "Length" msgstr "길이" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "작곡가" #: src/screen_song.c:52 msgid "Name" msgstr "이름" #: src/screen_song.c:53 msgid "Disc" msgstr "디스크" #: src/screen_song.c:54 msgid "Track" msgstr "트랙" #: src/screen_song.c:55 msgid "Date" msgstr "날짜" #: src/screen_song.c:56 msgid "Genre" msgstr "장르" #: src/screen_song.c:57 msgid "Comment" msgstr "주석" #: src/screen_song.c:58 msgid "Path" msgstr "경로" #: src/screen_song.c:59 msgid "Bitrate" msgstr "비트 전송률" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "아티스트 수" #: src/screen_song.c:77 msgid "Number of albums" msgstr "앨범 수" #: src/screen_song.c:78 msgid "Number of songs" msgstr "곡 수" #: src/screen_song.c:79 msgid "Uptime" msgstr "업타임" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "가장 최근의 데이타베이스 업데이트" #: src/screen_song.c:81 msgid "Playtime" msgstr "연주시간" #: src/screen_song.c:82 msgid "DB playtime" msgstr "데이타베이스 연주시간" #: src/screen_song.c:171 msgid "Song viewer" msgstr "곡 보기" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD 통계" #: src/screen_song.c:410 msgid "Selected song" msgstr "선택한 곡" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "현재 연주중인 곡" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "연주중:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[멈춰짐]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "음량 없음" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "음량 %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "키 설정 화면" #: src/command.c:66 msgid "Quit" msgstr "끝내기" #: src/command.c:70 msgid "Move cursor up" msgstr "커서를 위로 올리기" #: src/command.c:72 msgid "Move cursor down" msgstr "커서를 아래로 내리기" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "커서를 화면 맨 위로 옮기기" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "커서를 화면 가운데로 옮기기" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "커서를 화면 맨 아래로 옮기기" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "커서를 리스트 맨 위로 옮기기" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "커서를 리스트 맨 아래로 옮기기" #: src/command.c:84 msgid "Page up" msgstr "위쪽 페이지" #: src/command.c:86 msgid "Page down" msgstr "아래쪽 페이지" #: src/command.c:88 msgid "Range selection" msgstr "범위 선택" #: src/command.c:90 msgid "Scroll down one line" msgstr "한 줄 아래로 내리기" #: src/command.c:92 msgid "Scroll up one line" msgstr "한 줄 위로 올리기" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "화면 반 위로 올리기" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "화면 반 아래로 내리기" #: src/command.c:98 msgid "Select currently playing song" msgstr "현재 재생중인 곡을 선택" #: src/command.c:103 msgid "Help screen" msgstr "도움말 화면" #: src/command.c:112 msgid "Play/Enter directory" msgstr "연주/디렉토리 입력" #: src/command.c:114 msgid "Pause" msgstr "일시정지" #: src/command.c:116 msgid "Stop" msgstr "멈춤" #: src/command.c:118 msgid "Crop" msgstr "연주중인 곡만 선택" #: src/command.c:120 msgid "Next track" msgstr "다음 트랙" #: src/command.c:122 msgid "Previous track" msgstr "이전 트랙" #: src/command.c:124 msgid "Seek forward" msgstr "앞으로 찾기" #: src/command.c:126 msgid "Seek backward" msgstr "뒤로 찾기" #: src/command.c:128 msgid "Increase volume" msgstr "음량 높이기" #: src/command.c:130 msgid "Decrease volume" msgstr "음량 낮추기" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "연주목록에서 곡 선택/해제" #: src/command.c:134 msgid "Select all listed items" msgstr "나열한 항목 모두 선택하기" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "연주목록에서 곡 삭제하기" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "반복연주 모드 토클" #: src/command.c:144 msgid "Toggle random mode" msgstr "무작위연주 모드 토클" #: src/command.c:146 msgid "Toggle single mode" msgstr "싱글 모드 토글" #: src/command.c:148 msgid "Toggle consume mode" msgstr "소비 모드 토글" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "곡바꿈 모드 토글" #: src/command.c:152 msgid "Start a music database update" msgstr "음악 데이타베이스 업데이트를 시작" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "연주목록에 url/파일 더하기" #: src/command.c:159 msgid "Go to root directory" msgstr "루트 디렉토리로 가기" #: src/command.c:161 msgid "Go to parent directory" msgstr "상위 디렉토리로 가기" #: src/command.c:164 msgid "Locate song in browser" msgstr "열람 화면에 곡을 위치하기" #: src/command.c:168 msgid "Move item up" msgstr "항목 위로 올리기" #: src/command.c:170 msgid "Move item down" msgstr "항목 아래로 내리기" #: src/command.c:172 msgid "Refresh screen" msgstr "화면 갱신하기" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "찾기 모드 토글" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "자동 가운데 모드 토글" #: src/command.c:188 msgid "Next screen" msgstr "다음 화면" #: src/command.c:190 msgid "Previous screen" msgstr "이전 화면" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "가장 최근 화면으로 교환" #: src/command.c:197 msgid "Forward find" msgstr "앞으로 찾기" #: src/command.c:199 msgid "Forward find next" msgstr "앞으로 다음 찾기" #: src/command.c:201 msgid "Backward find" msgstr "뒤로 찾기" #: src/command.c:203 msgid "Backward find previous" msgstr "뒤로 이전 찾기" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "직접 이동" #: src/command.c:214 msgid "Artist screen" msgstr "아티스트 화면" #: src/command.c:220 msgid "Change search mode" msgstr "찾기 모드 변경" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "선택하고 현재 연주중인 곡을 보기" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "백그라운드 실행을 중지" #: src/command.c:234 msgid "Update Lyrics" msgstr "가사 업데이트" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "정의되지 않음" #: src/command.c:292 msgid "Space" msgstr "Space" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "지우기" #: src/command.c:300 msgid "Up" msgstr "Up" #: src/command.c:302 msgid "Down" msgstr "Down" #: src/command.c:304 msgid "Left" msgstr "Left" #: src/command.c:306 msgid "Right" msgstr "Right" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다." #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "알 수 없는 명령" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "경고: 알 수 없는 색상 항목 - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "색상 변경 지원이 부족한 터미널입니다." #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "색상 기능이 없는 터미널입니다." #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "오류" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "잘못된 단축키 정의" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "알 수 없는 명령" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "단축키 설정이 불완전합니다." #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "잘못된 시간 표시 형식" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "'=' 기호가 없습니다." #: src/conf.c:253 msgid "Bad color name" msgstr "잘못된 색상 이름" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "불완전한 색상 지정" #: src/conf.c:269 msgid "Invalid number" msgstr "유효하지 않은 숫자" #: src/conf.c:277 msgid "Malformed color definition" msgstr "잘못된 색상 지정" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "알 수 없는 화면 이름" #: src/conf.c:339 msgid "Invalid search mode" msgstr "잘못된 검색 모드" #: src/conf.c:362 msgid "Unknown search mode" msgstr "알 수 없는 검색 모드" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "알 수 없는 설정 요소" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " atie https://launchpad.net/~atie-at-matrix\n" " bluejay https://launchpad.net/~jaypedia" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "범위 선택 기능을 사용하지 않습니다." #: src/list_window.c:580 msgid "Range selection enabled" msgstr "범위 선택 기능을 사용합니다." #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "연주목록 %s [%s/%s] 삭제하기 ? " #~ msgid "Error: Screen too small" #~ msgstr "오류: 화면이 너무 작습니다." #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "경고: 알 수 없는 색상 - %s\n" #~ msgid "Connected to %s" #~ msgstr "%s로 접속함" #~ msgid "Shuffled playlist" #~ msgstr "섞여진 연주목록" #~ msgid "Cleared playlist" #~ msgstr "지워진 연주목록" #~ msgid "Save playlist as" #~ msgstr "연주목록으로 저장" #~ msgid "Playlist" #~ msgstr "연주 목록" #~ msgid "Playlist on %s" #~ msgstr "%s 상의 연주목록" #~ msgid "Playlist screen" #~ msgstr "연주목록 화면" #~ msgid "Shuffle playlist" #~ msgstr "연주목록 섞기" #~ msgid "Clear playlist" #~ msgstr "연주목록 비우기" #~ msgid "Save playlist" #~ msgstr "연주목록 저장" #~ msgid "Search: " #~ msgstr "찾기: " #~ msgid "Explicitly download lyrics" #~ msgstr "가사를 명식적으로 다운로드" ncmpc-0.27/po/nb.po0000644000076400001440000006000013064033560011034 00000000000000# Norwegian # Copyright (C) 2004 Ole R. Thorsen # This file is distributed under the same license as the ncmpc package. # Ole R. Thorsen , 2005 # msgid "" msgstr "" "Project-Id-Version: ncmpc 0.11.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-07-03 16:34+0000\n" "Last-Translator: Mathias Bhn Grytemark \n" "Language-Team: no \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-07-21 05:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Kobler til %s... [Trykk %s for avslutte]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "MPD versjon %d.%d.%d er for gammel - oppgrader til versjon %s" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "trykk %s for rette" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Repeter er p" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Repeter er av" #: src/screen.c:163 msgid "Random mode is on" msgstr "" #: src/screen.c:164 msgid "Random mode is off" msgstr "" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "" #: src/screen.c:174 msgid "Single mode is off" msgstr "" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "" #: src/screen.c:183 msgid "Consume mode is off" msgstr "" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Crossfade %d sekunder" #: src/screen.c:198 msgid "Database updated" msgstr "Databasen er oppdatert" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Skt rundt (starter p ny)" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Sk normalt (til slutt/begynnelse)" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Automatisk sentrering er p" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Automatisk centrering er av" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Alle spor" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Alle artister" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Albumer fra artist: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Alle spor fra artist: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "Albumer fra artist: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "Henter spilleliste %s..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "laster..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Henter spilleliste %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Legger '%s' til spillelisten" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Databasen oppdateres..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "oppdaterer databasen ifra %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "Oppdaterer databasen" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Sk" #: src/screen_find.c:30 msgid "Find backward" msgstr "Sk (bakover)" #: src/screen_find.c:31 msgid "Jump" msgstr "Hopp" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Fant ikke '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Erstatt '%s' [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Passord" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Erstatt '%s' [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Avbrutt" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Lagret %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Legg til" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Kan ikke slette dette elementet" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Slett spilleliste" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Spillelisten slettet" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Filer" #: src/screen_search.c:46 msgid "artist" msgstr "artist" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "tittel" #: src/screen_search.c:49 msgid "track" msgstr "spor" #: src/screen_search.c:50 msgid "name" msgstr "navn" #: src/screen_search.c:51 msgid "genre" msgstr "sjanger" #: src/screen_search.c:52 msgid "date" msgstr "dato" #: src/screen_search.c:53 msgid "composer" msgstr "komponist" #: src/screen_search.c:54 msgid "performer" msgstr "utver" #: src/screen_search.c:55 msgid "comment" msgstr "kommentar" #: src/screen_search.c:62 msgid "file" msgstr "fil" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Tittel" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artist" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Filnavn" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artist + tittel" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Sk" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Trykk p %s for ett nytt sk" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Sk: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Sk: Resultater %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Trykk p %s for ett nytt sk [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Sk etter: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Du har nye tastatursnarveier" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Tastatursnarveier uforandret!" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Feil: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Skrev %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Slettet" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Ny tast for %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Tasten %s brukes allerede for %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Satte %s = %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "==> Bruk snarveier " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "==> Bruk og Lagre snarveier " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Legg til ny tast" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "OBS! Du glemte vel ikke legge til de nye endringene?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Endre tast" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Endre taster for '%s'" #: src/screen_help.c:39 msgid "Movement" msgstr "Navigasjon" #: src/screen_help.c:84 msgid "Global" msgstr "Global" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Hjelp" #: src/screen_help.c:121 msgid "Play" msgstr "Start/spill markert" #: src/screen_help.c:124 msgid "Move song up" msgstr "Flytt den markerte sangen opp i spillelisten" #: src/screen_help.c:125 msgid "Move song down" msgstr "Flytt den markerte sangen opp i spillelisten" #: src/screen_help.c:128 msgid "Center" msgstr "Sentrer" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Filer" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Velg bibliotek/Legg til spillisten og spill sang" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Legg sang til spillelisten" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Slett spilleliste" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Database sk" #: src/screen_help.c:151 msgid "Select and play" msgstr "Legg til spillelisten og spill" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Neste skjerm" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Legg til ny tast" #: src/screen_help.c:194 msgid "Go up a level" msgstr "" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Hjelp" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Ingen sangtekst" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Sangtekster" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "laster..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Sangteksten er lagret" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "" #: src/screen_song.c:49 msgid "Length" msgstr "Lengde" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Komponist" #: src/screen_song.c:52 msgid "Name" msgstr "Navn" #: src/screen_song.c:53 msgid "Disc" msgstr "Plate" #: src/screen_song.c:54 msgid "Track" msgstr "Spor" #: src/screen_song.c:55 msgid "Date" msgstr "Dato" #: src/screen_song.c:56 msgid "Genre" msgstr "Sjanger" #: src/screen_song.c:57 msgid "Comment" msgstr "Kommentar" #: src/screen_song.c:58 msgid "Path" msgstr "" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitrate" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Antall artister" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Antall albumer" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Antall sanger" #: src/screen_song.c:79 msgid "Uptime" msgstr "Oppetid" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Nyeste db oppdatering" #: src/screen_song.c:81 msgid "Playtime" msgstr "Spilletid" #: src/screen_song.c:82 msgid "DB playtime" msgstr "DB spilletid" #: src/screen_song.c:171 msgid "Song viewer" msgstr "" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD statestikk" #: src/screen_song.c:410 msgid "Selected song" msgstr "" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Spiller:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pause]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volum: n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volum: %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Tastaturkonfigurasjon" #: src/command.c:66 msgid "Quit" msgstr "Avslutt" #: src/command.c:70 msgid "Move cursor up" msgstr "Flytt markr opp" #: src/command.c:72 msgid "Move cursor down" msgstr "Flytt markr ned" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Flytt peker til toppen av skjermen" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "" #: src/command.c:84 msgid "Page up" msgstr "Markren en side opp" #: src/command.c:86 msgid "Page down" msgstr "Markren en side ned" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "Hjelp" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Spill/Velg mappe" #: src/command.c:114 msgid "Pause" msgstr "Pause" #: src/command.c:116 msgid "Stop" msgstr "Stopp" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "Neste" #: src/command.c:122 msgid "Previous track" msgstr "Forrige" #: src/command.c:124 msgid "Seek forward" msgstr "Spol/Sk framover" #: src/command.c:126 msgid "Seek backward" msgstr "Spol/Sk tilbake" #: src/command.c:128 msgid "Increase volume" msgstr "k volumet" #: src/command.c:130 msgid "Decrease volume" msgstr "Demp volumet" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Legg til/Fjern fra spillelisten" #: src/command.c:134 msgid "Select all listed items" msgstr "Velg alle i listen" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Ta bort/slett" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Repeat P/Av" #: src/command.c:144 msgid "Toggle random mode" msgstr "Random P/Av" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Crossfade P/Av" #: src/command.c:152 msgid "Start a music database update" msgstr "Oppdater databasen" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Legg til URL eller fil til spillelisten" #: src/command.c:159 msgid "Go to root directory" msgstr "G til rotmappe" #: src/command.c:161 msgid "Go to parent directory" msgstr "G ett niv opp" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "Flytt opp" #: src/command.c:170 msgid "Move item down" msgstr "Flytt ned" #: src/command.c:172 msgid "Refresh screen" msgstr "Oppdater skjermbilde" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Endre skeinnstillinger" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Automatisk sentrering p/av" #: src/command.c:188 msgid "Next screen" msgstr "Neste skjerm" #: src/command.c:190 msgid "Previous screen" msgstr "Forrige skjerm" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "Sk fremover" #: src/command.c:199 msgid "Forward find next" msgstr "Sk neste (fremover)" #: src/command.c:201 msgid "Backward find" msgstr "Sk bakover" #: src/command.c:203 msgid "Backward find previous" msgstr "Sk neste (bakover)" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "G til" #: src/command.c:214 msgid "Artist screen" msgstr "Artistskjerm" #: src/command.c:220 msgid "Change search mode" msgstr "Endre skemodus" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Avbryt handling" #: src/command.c:234 msgid "Update Lyrics" msgstr "Oppdater sangtekster" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Ikke definert" #: src/command.c:292 msgid "Space" msgstr "Mellomrom" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Tilbaketast" #: src/command.c:298 msgid "Delete" msgstr "Del" #: src/command.c:300 msgid "Up" msgstr "Opp" #: src/command.c:302 msgid "Down" msgstr "Ned" #: src/command.c:304 msgid "Left" msgstr "Venstrepil" #: src/command.c:306 msgid "Right" msgstr "Hyrepil" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Ins" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "%s-tasten satt til %s og %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Ukjent kommando" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Advarsel: %s er ikke definert.\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminalen mangler sttte for omdefinering av farger" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminalen mangler sttte for farger" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Feil" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Malformert hurtigtastdefinisjon" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Ukjent kommando" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Uferdig hurtigtastkonfigurasjon" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Ugyldig tidsvisningstype" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Mangler '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Ugyldig fargenavn" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Uferdig fargedefinisjon" #: src/conf.c:269 msgid "Invalid number" msgstr "Ugyldig tall" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Malformert fargedefinisjon" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Ukjent skjermnavn" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Ukjent konfiurasjonsparameter" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Espen Jones https://launchpad.net/~epqr\n" " Jon Bergli Heier https://launchpad.net/~snakebite-jvnv\n" " Mathias Bhn Grytemark https://launchpad.net/~mboehn\n" " Ole R. Thorsen https://launchpad.net/~ole-rth\n" " Niels Anker https://launchpad.net/~nanker" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Slette '%s' [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Feil: Skjermbildet er for lite" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advarsel: Kjenner ikke til fargen %s\n" #~ msgid "Connected to %s" #~ msgstr "Koblet til %s" #~ msgid "Shuffled playlist" #~ msgstr "Tilfeldigjort spillelisten" #~ msgid "Cleared playlist" #~ msgstr "Sletter spillelisten" #~ msgid "Save playlist as" #~ msgstr "Lagre spillelisten som" #~ msgid "Playlist" #~ msgstr "Spilleliste" #~ msgid "Playlist on %s" #~ msgstr "Spilleliste p %s" #~ msgid "Playlist screen" #~ msgstr "Spilleliste" #~ msgid "Shuffle playlist" #~ msgstr "Tilfeldiggjr spilleliste" #~ msgid "Clear playlist" #~ msgstr "Tm spillelisten" #~ msgid "Save playlist" #~ msgstr "Lagre spillelisten" ncmpc-0.27/po/nl.po0000644000076400001440000005246413064033560011065 00000000000000# Dutch translation for ncmpc # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-02-24 11:17+0000\n" "Last-Translator: Tom Postma \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-04-05 17:16+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Verbind met %s... [druk %s om af te breken]" #: src/main.c:214 #, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Herhaling modus aan" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Herhaling modus uit" #: src/screen.c:163 msgid "Random mode is on" msgstr "Willekeurige modus is aan" #: src/screen.c:164 msgid "Random mode is off" msgstr "Willekeurige modus is uit" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "" #: src/screen.c:174 msgid "Single mode is off" msgstr "" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "" #: src/screen.c:183 msgid "Consume mode is off" msgstr "" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "" #: src/screen.c:198 msgid "Database updated" msgstr "Database bijgewerkt" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Alle nummers" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Alle artiesten" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Albums van artiest: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Alle nummers van artiest: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "Albums van artiest: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "Laden afspeellijst %s..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "laden..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Laden afspeellijst %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Toevoegen '%s' aan afspeellijst" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Update database draait..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Database update van %s begonnen" #: src/screen_client.c:52 msgid "Database update started" msgstr "Database update begonnen" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Vind" #: src/screen_find.c:30 msgid "Find backward" msgstr "" #: src/screen_find.c:31 msgid "Jump" msgstr "Spring" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Niet mogelijk '%s' te vinden" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Vervang %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Wachtwoord" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Vervang %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Afgebroken" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Opgeslagen %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Voeg toe" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Afspeellijst verwijderen" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Blader" #: src/screen_search.c:46 msgid "artist" msgstr "artiest" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titel" #: src/screen_search.c:49 msgid "track" msgstr "nummer" #: src/screen_search.c:50 msgid "name" msgstr "naam" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "datum" #: src/screen_search.c:53 msgid "composer" msgstr "componist" #: src/screen_search.c:54 msgid "performer" msgstr "uitvoerder" #: src/screen_search.c:55 msgid "comment" msgstr "opmerking" #: src/screen_search.c:62 msgid "file" msgstr "bestand" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titel" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artiest" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Bestandsnaam" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artiest + Titel" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Zoeken" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Zoeken: Resultaten voor %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "" #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Fout: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Verwijderd" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "" #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "" #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "" #: src/screen_keydef.c:347 msgid "Add new key" msgstr "" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "" #: src/screen_help.c:39 msgid "Movement" msgstr "Beweging" #: src/screen_help.c:84 msgid "Global" msgstr "Algemeen" #: src/screen_help.c:119 src/command.c:105 msgid "Queue screen" msgstr "" #: src/screen_help.c:121 msgid "Play" msgstr "" #: src/screen_help.c:124 msgid "Move song up" msgstr "" #: src/screen_help.c:125 msgid "Move song down" msgstr "" #: src/screen_help.c:128 msgid "Center" msgstr "" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "" #: src/screen_help.c:138 src/screen_help.c:153 msgid "Append song to queue" msgstr "" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Afspeellijst verwijderen" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "" #: src/screen_help.c:151 msgid "Select and play" msgstr "" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "" #: src/screen_help.c:168 msgid "Add or edit lyrics" msgstr "" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "" #: src/screen_help.c:170 #, fuzzy msgid "Delete saved lyrics" msgstr "Afspeellijst verwijderen" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "" #: src/screen_help.c:182 src/command.c:248 msgid "Chat screen" msgstr "" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "" #: src/screen_help.c:193 msgid "Add a keydef" msgstr "" #: src/screen_help.c:194 msgid "Go up a level" msgstr "" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Documentatie" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Songteksten" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "laden..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "" #: src/screen_lyrics.c:443 #, fuzzy msgid "Lyrics deleted" msgstr "Songteksten" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Uitvoerapparaten" #: src/screen_song.c:49 msgid "Length" msgstr "" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Componist" #: src/screen_song.c:52 msgid "Name" msgstr "Naam" #: src/screen_song.c:53 msgid "Disc" msgstr "Schijf" #: src/screen_song.c:54 msgid "Track" msgstr "Nummer" #: src/screen_song.c:55 msgid "Date" msgstr "Datum" #: src/screen_song.c:56 msgid "Genre" msgstr "Genre" #: src/screen_song.c:57 msgid "Comment" msgstr "Opmerking" #: src/screen_song.c:58 msgid "Path" msgstr "Locatie" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitsnelheid" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Aantal artiesten" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Aantal albums" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Aantal nummers" #: src/screen_song.c:79 msgid "Uptime" msgstr "" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "" #: src/screen_song.c:81 msgid "Playtime" msgstr "" #: src/screen_song.c:82 msgid "DB playtime" msgstr "" #: src/screen_song.c:171 msgid "Song viewer" msgstr "" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "" #: src/screen_song.c:410 msgid "Selected song" msgstr "" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Speelt:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volume n/b" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "" #: src/command.c:66 msgid "Quit" msgstr "" #: src/command.c:70 msgid "Move cursor up" msgstr "" #: src/command.c:72 msgid "Move cursor down" msgstr "" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "" #: src/command.c:84 msgid "Page up" msgstr "" #: src/command.c:86 msgid "Page down" msgstr "" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "" #: src/command.c:92 msgid "Scroll up one line" msgstr "" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "" #: src/command.c:112 msgid "Play/Enter directory" msgstr "" #: src/command.c:114 msgid "Pause" msgstr "" #: src/command.c:116 msgid "Stop" msgstr "" #: src/command.c:118 msgid "Crop" msgstr "" #: src/command.c:120 msgid "Next track" msgstr "" #: src/command.c:122 msgid "Previous track" msgstr "" #: src/command.c:124 msgid "Seek forward" msgstr "" #: src/command.c:126 msgid "Seek backward" msgstr "" #: src/command.c:128 msgid "Increase volume" msgstr "" #: src/command.c:130 msgid "Decrease volume" msgstr "" #: src/command.c:132 msgid "Select/deselect song in queue" msgstr "" #: src/command.c:134 msgid "Select all listed items" msgstr "" #: src/command.c:136 msgid "Delete song from queue" msgstr "" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "" #: src/command.c:144 msgid "Toggle random mode" msgstr "" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "" #: src/command.c:152 msgid "Start a music database update" msgstr "" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 msgid "Add url/file to queue" msgstr "" #: src/command.c:159 msgid "Go to root directory" msgstr "" #: src/command.c:161 msgid "Go to parent directory" msgstr "" #: src/command.c:164 msgid "Locate song in browser" msgstr "" #: src/command.c:168 msgid "Move item up" msgstr "" #: src/command.c:170 msgid "Move item down" msgstr "" #: src/command.c:172 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "" #: src/command.c:188 msgid "Next screen" msgstr "" #: src/command.c:190 msgid "Previous screen" msgstr "" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "" #: src/command.c:199 msgid "Forward find next" msgstr "" #: src/command.c:201 msgid "Backward find" msgstr "" #: src/command.c:203 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "" #: src/command.c:214 msgid "Artist screen" msgstr "" #: src/command.c:220 msgid "Change search mode" msgstr "" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "" #: src/command.c:234 msgid "Update Lyrics" msgstr "" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "" #: src/command.c:292 msgid "Space" msgstr "" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "" #: src/command.c:302 msgid "Down" msgstr "" #: src/command.c:304 msgid "Left" msgstr "" #: src/command.c:306 msgid "Right" msgstr "" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "" #: src/colors.c:156 msgid "Unknown color" msgstr "" #: src/colors.c:196 msgid "Unknown color field" msgstr "" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "" #: src/conf.c:253 msgid "Bad color name" msgstr "" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "" #: src/conf.c:269 msgid "Invalid number" msgstr "" #: src/conf.c:277 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Hipska https://launchpad.net/~hipska\n" " Tom Postma https://launchpad.net/~bluegen89" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Error: Screen too small" #~ msgstr "Fout: Scherm te klein" #~ msgid "Connected to %s" #~ msgstr "Verbonden met %s" #~ msgid "Save playlist as" #~ msgstr "Afspeellijst opslaan als" #~ msgid "Playlist" #~ msgstr "Afspeellijst" ncmpc-0.27/po/ru.po0000644000076400001440000007556413064033560011110 00000000000000# Russian # Copyright (C) 2004 Kalle Wallin # This file is distributed under the same license as the ncmpc package. # Original translation by Nikolay Pavlov , 2004. # Currently maintained by Max Arnold , 2009. msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-01-05 21:31+0100\n" "Last-Translator: Max Arnold \n" "Language-Team: ru \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/i18n.h:42 msgid "y" msgstr "y" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Подключение к %s... [Нажмите %s для отмены]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Ошибка: MPD версии %d.%d.%d устарел (необходим %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "%s - редактор клавиш" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Повтор включен" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Повтор выключен" #: src/screen.c:163 msgid "Random mode is on" msgstr "Случайный режим включен" #: src/screen.c:164 msgid "Random mode is off" msgstr "Случайный режим выключен" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Одиночный режим включен" #: src/screen.c:174 msgid "Single mode is off" msgstr "Одиночный режим выключен" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Режим удаления после проигрывания включен" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Режим удаления после проигрывания выключен" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Плавный переход %d секунд" #: src/screen.c:198 msgid "Database updated" msgstr "База обновлена" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Режим поиска: циклический" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Режим поиска: нормальный" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Режим автоцентрирования: вкл." #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Режим автоцентрирования: выкл." #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Все композиции" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Все исполнители" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Альбомы исполнителя: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Все композиции исполнителя: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Альбом: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Композиции исполнителя: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Добавляется альбом %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Добавляется %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Загружается плейлист %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "В плейлист добавляется '%s'" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Идёт обновление базы..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Обновление базы %s запущено" #: src/screen_client.c:52 msgid "Database update started" msgstr "Начато обновление базы" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Поиск" #: src/screen_find.c:30 msgid "Find backward" msgstr "Поиск назад" #: src/screen_find.c:31 msgid "Jump" msgstr "Перейти" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Не удалось найти '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Заменить %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Пароль" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Заменить %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Прервано" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Сохранено в %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Добавить" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Удаление этого элемента невозможно" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Удалить плейлист" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Плейлист удалён" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Навигация" #: src/screen_search.c:46 msgid "artist" msgstr "artist" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "title" #: src/screen_search.c:49 msgid "track" msgstr "track" #: src/screen_search.c:50 msgid "name" msgstr "name" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "date" #: src/screen_search.c:53 msgid "composer" msgstr "composer" #: src/screen_search.c:54 msgid "performer" msgstr "performer" #: src/screen_search.c:55 msgid "comment" msgstr "comment" #: src/screen_search.c:62 msgid "file" msgstr "file" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Композиция" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Исполнитель" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Альбом" #: src/screen_search.c:83 msgid "Filename" msgstr "Имя файла" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Исполнитель + Композиция" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Неверный тег поиска %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Не задан критерий поиска по тегу %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Поиск" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Нажмите %s для нового поиска" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Поиск: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Поиск: результаты поиска '%s' в поле [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Поиск: нажмите %s для поиска по полю [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Поле для поиска: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Новые клавиатурные комбинации задействованы" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Клавиатурные комбинации не изменились." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Ошибка: не удалось создать директорию ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Ошибка: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Записано %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Удалено" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Нажмите новую клавишу для %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Ошибка: клавиша %s уже используется для %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Назначено %s для %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Применить клавиатурные комбинации " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Применить и сохранить клавиатурные комбинации " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Добавить новую клавишу" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Внимание: вы не забыли применить сделанные изменения?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Изменение клавиатурных комбинаций" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Изменение клавиатурных комбинаций для %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Перемещение" #: src/screen_help.c:84 msgid "Global" msgstr "Глобальные" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Экран клавиатурных комбинаций" #: src/screen_help.c:121 msgid "Play" msgstr "Воспроизведение" #: src/screen_help.c:124 msgid "Move song up" msgstr "Переместить композицию вверх" #: src/screen_help.c:125 msgid "Move song down" msgstr "Переместить композицию вниз" #: src/screen_help.c:128 msgid "Center" msgstr "Центрировать" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Экран навигации" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Перейти в директорию/Выбрать и проиграть композицию" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Добавить композицию в плейлист" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Удалить плейлист" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Экран поиска" #: src/screen_help.c:151 msgid "Select and play" msgstr "Выбрать и проиграть" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Экран текста песни" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Показать текст" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Пере)загрузить текст" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Прервать загрузку" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Загрузить текст проигрываемой композиции" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Сохранённый текст отсутствует" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Сохранить текст" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Удалить сохранённый текст" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Экран аудиовыходов" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Вкл/выкл аудиовыход" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Следующий экран" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Экран клавиатурных комбинаций" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Изменить комбинации для выбранной команды" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Удалить выбранную комбинацию" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Добавить новую клавишу" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Перейти на уровень выше" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Применить и сохранить изменения" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Помощь" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Текст отсутствует" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Текст" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "загружается..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Текст сохранён" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Текст удалён" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Сохранённый текст отсутствует" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Аудиовыход '%s' включен" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Аудиовыход '%s' выключен" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Аудиовыходы" #: src/screen_song.c:49 msgid "Length" msgstr "Длительность" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Композитор" #: src/screen_song.c:52 msgid "Name" msgstr "Название" #: src/screen_song.c:53 msgid "Disc" msgstr "Диск" #: src/screen_song.c:54 msgid "Track" msgstr "Дорожка" #: src/screen_song.c:55 msgid "Date" msgstr "Дата" #: src/screen_song.c:56 msgid "Genre" msgstr "Жанр" #: src/screen_song.c:57 msgid "Comment" msgstr "Комментарий" #: src/screen_song.c:58 msgid "Path" msgstr "Путь" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Битрейт" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Количество исполнителей" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Количество альбомов" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Количество композиций" #: src/screen_song.c:79 msgid "Uptime" msgstr "Время работы" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Последнее обновление базы" #: src/screen_song.c:81 msgid "Playtime" msgstr "Время воспроизведения" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Время воспроизведения базы" # Several translations for Song Viewer: #: src/screen_song.c:171 msgid "Song viewer" msgstr "Информация о композиции" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Статистика MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Выбранная композиция" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Проигрываемая композиция" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d кбит/с" #: src/status_bar.c:121 msgid "Playing:" msgstr "Проигрывается:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Пауза]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Громкость н/д" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Громкость %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Экран клавиатурных комбинаций" #: src/command.c:66 msgid "Quit" msgstr "Выход" #: src/command.c:70 msgid "Move cursor up" msgstr "Курсор вверх" #: src/command.c:72 msgid "Move cursor down" msgstr "Курсор вниз" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Переместить курсор в верх экрана" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Переместить курсор в середину экрана" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Переместить курсор в низ экрана" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Переместить курсор в начало списка" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Переместить курсор в конец списка" #: src/command.c:84 msgid "Page up" msgstr "На страницу вверх" #: src/command.c:86 msgid "Page down" msgstr "На страницу вниз" #: src/command.c:88 msgid "Range selection" msgstr "Выбор диапазона" #: src/command.c:90 msgid "Scroll down one line" msgstr "Прокрутка на одну строку вниз" #: src/command.c:92 msgid "Scroll up one line" msgstr "Прокрутка на одну строку вверх" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Прокрутка на половину экрана вверх" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Прокрутка на половину экрана вниз" #: src/command.c:98 msgid "Select currently playing song" msgstr "Выбрать текущую композицию" #: src/command.c:103 msgid "Help screen" msgstr "Экран помощи" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Воспроизвести/Перейти в директорию" #: src/command.c:114 msgid "Pause" msgstr "Пауза" #: src/command.c:116 msgid "Stop" msgstr "Останов" #: src/command.c:118 msgid "Crop" msgstr "Удалить из плейлиста все композиции кроме текущей" #: src/command.c:120 msgid "Next track" msgstr "Следующая композиция" #: src/command.c:122 msgid "Previous track" msgstr "Предыдущая композиция" #: src/command.c:124 msgid "Seek forward" msgstr "Перемотка вперёд" #: src/command.c:126 msgid "Seek backward" msgstr "Перемотка назад" #: src/command.c:128 msgid "Increase volume" msgstr "Увеличить громкость" #: src/command.c:130 msgid "Decrease volume" msgstr "Уменьшить громкость" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Добавить/убрать композицию из плейлиста" #: src/command.c:134 msgid "Select all listed items" msgstr "Добавить все композиции в плейлист" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Удалить композицию из плейлиста" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Вкл/выкл режим повтора" #: src/command.c:144 msgid "Toggle random mode" msgstr "Вкл/выкл случайный режим" #: src/command.c:146 msgid "Toggle single mode" msgstr "Вкл/выкл одиночный режим" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Вкл/выкл режим удаления после проигрывания" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Вкл/выкл режим плавного перехода" #: src/command.c:152 msgid "Start a music database update" msgstr "Обновить музыкальную базу" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Добавить url/файл в плейлист" #: src/command.c:159 msgid "Go to root directory" msgstr "Перейти к корневой директории" #: src/command.c:161 msgid "Go to parent directory" msgstr "Перейти к родительской директории" #: src/command.c:164 msgid "Locate song in browser" msgstr "Перейти к файлу композиции" #: src/command.c:168 msgid "Move item up" msgstr "Переместить вверх" #: src/command.c:170 msgid "Move item down" msgstr "Переместить вниз" #: src/command.c:172 msgid "Refresh screen" msgstr "Обновить экран" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Переключить режим поиска" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Вкл/выкл режим автоцентрирования" #: src/command.c:188 msgid "Next screen" msgstr "Следующий экран" #: src/command.c:190 msgid "Previous screen" msgstr "Предыдущий экран" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Последний посещённый экран" #: src/command.c:197 msgid "Forward find" msgstr "Поиск вперёд" #: src/command.c:199 msgid "Forward find next" msgstr "Продолжить поиск вперёд" #: src/command.c:201 msgid "Backward find" msgstr "Поиск назад" #: src/command.c:203 msgid "Backward find previous" msgstr "Продолжить поиск назад" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Перейти к" #: src/command.c:214 msgid "Artist screen" msgstr "Экран исполнителей" #: src/command.c:220 msgid "Change search mode" msgstr "Изменить поле для поиска" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Просмотр выбранной и проигрываемой композиций" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Прервать операцию" #: src/command.c:234 msgid "Update Lyrics" msgstr "Обновить текст" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Не задано" #: src/command.c:292 msgid "Space" msgstr "Пробел" #: src/command.c:294 msgid "Enter" msgstr "Ввод" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Вверх" #: src/command.c:302 msgid "Down" msgstr "Вниз" #: src/command.c:304 msgid "Left" msgstr "Влево" #: src/command.c:306 msgid "Right" msgstr "Вправо" #: src/command.c:308 msgid "Home" msgstr "В начало" #: src/command.c:310 msgid "End" msgstr "В конец" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Клавиша %s назначена для %s и %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Неизвестная команда" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Внимание: неизвестное цветовое поле - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Терминал не поддерживает смену цветов" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Терминал не поддерживает цвета" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Ошибка" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Неправильное значение клавиатурной комбинации" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Неизвестная команда" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Неопределённое значение клавиатурной комбинации" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Неверный тип отображения времени" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Пропущен символ '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Неверное название цвета" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Неопределённое значение цвета" #: src/conf.c:269 msgid "Invalid number" msgstr "Неверное число" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Неправильное значение цвета" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Неизвестное название экрана" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Неверный режим поиска" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Неизвестный режим поиска" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Неизвестный параметр конфигурации" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "Перевод: Max Arnold " #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Выбор диапазона выключен" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Выбор диапазона включен" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Удалить плейлист %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Ошибка: экран слишком мал" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Внимание: неизвестный цвет - %s\n" #~ msgid "Connected to %s" #~ msgstr "Подключено к %s" #~ msgid "Shuffled playlist" #~ msgstr "Плейлист перемешан" #~ msgid "Cleared playlist" #~ msgstr "Плейлист очищен" #~ msgid "Save playlist as" #~ msgstr "Сохранить плейлист как" #~ msgid "Playlist" #~ msgstr "Плейлист" #~ msgid "Playlist on %s" #~ msgstr "Плейлист на %s" #~ msgid "Playlist screen" #~ msgstr "Экран плейлиста" #~ msgid "Shuffle playlist" #~ msgstr "Перемешать плейлист" #~ msgid "Clear playlist" #~ msgstr "Очистить плейлист" #~ msgid "Save playlist" #~ msgstr "Сохранить плейлист" #, fuzzy #~ msgid "DB last updated" #~ msgstr "База обновлена" #~ msgid "Explicitly download lyrics" #~ msgstr "Принудительно загрузить текст" #~ msgid "Search: " #~ msgstr "Поиск: " #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "Клавиша %s назначена для %s и %s (%s - редактор клавиш)" #~ msgid "Clock" #~ msgstr "Часы" #~ msgid "Clock screen" #~ msgstr "Экран часов" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Ошибка: не удалось конвертировать символы в %s" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Ошибка: не удалось конвертировать символы в UTF-8" ncmpc-0.27/po/pl.po0000644000076400001440000006420513064033560011063 00000000000000# Polish translations for PACKAGE package # Polskie tłumaczenia dla pakietu PACKAGE. # Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # , 2011. # msgid "" msgstr "" "Project-Id-Version: ncmpc 0.19\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-07-23 21:08+0200\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: src/i18n.h:42 msgid "y" msgstr "t" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Łączenie z %s... [Wciśnij %s by anulować]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Błąd: MPD w wersji %d.%d.%d jest za stary (potrzebny jest %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "wciśnij %s by odpalić edytor klawiszy" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Tryb powtarzania jest włączony" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Tryb powtarzania jest wyłączony" #: src/screen.c:163 msgid "Random mode is on" msgstr "Tryb losowy jest włączony" #: src/screen.c:164 msgid "Random mode is off" msgstr "Tryb losowy jest wyłączony" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Tryb pojedynczej piosenki jest włączony" #: src/screen.c:174 msgid "Single mode is off" msgstr "Tryb pojedynczej piosenki jest wyłączony" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Tryb pożerania jest włączony" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Tryb pożerania jest wyłączony" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Przenikaj %d sekund" #: src/screen.c:198 msgid "Database updated" msgstr "Baza zaktualizowana" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Tryb wyszukiwania: Zawinięty" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Tryb wyszukiwania: Normalny" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Tryb automatycznego centrowania: Włączony" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Tryb automatycznego centrowania: Wyłączony" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Wszystkie ścieżki" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Wszyscy artyści" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Albumy artysty: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Wszystkie piosenki artysty: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Albumy: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Ścieżki bez albumów lub artystów: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Dodawanie albumu %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Dodawanie %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Ładowany listy odtwarzania %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Dodawanie '%s' do listy odtwarzania" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Aktualizacja bazy w toku..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Aktualizacja bazy %s rozpoczęta" #: src/screen_client.c:52 msgid "Database update started" msgstr "Aktualizacja bazy rozpoczęta" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Znajdź" #: src/screen_find.c:30 msgid "Find backward" msgstr "Znajdź wstecz" #: src/screen_find.c:31 msgid "Jump" msgstr "Skocz" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Nie można znaleźć '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Zamień %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Hasło" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Zamień %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Anulowano" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Zapisano %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Dodaj" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Usunięcie tego elementu nie jest możliwe" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Usuń listę odtwarzania" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Lista odtwarzania usunięta" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Przeglądaj" #: src/screen_search.c:46 msgid "artist" msgstr "artysta" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "tutuł" #: src/screen_search.c:49 msgid "track" msgstr "ściezka" #: src/screen_search.c:50 msgid "name" msgstr "nazwa" #: src/screen_search.c:51 msgid "genre" msgstr "rodzaj" #: src/screen_search.c:52 msgid "date" msgstr "data" #: src/screen_search.c:53 msgid "composer" msgstr "kompozytor" #: src/screen_search.c:54 msgid "performer" msgstr "wykonawca" #: src/screen_search.c:55 msgid "comment" msgstr "komentarz" #: src/screen_search.c:62 msgid "file" msgstr "plik" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Tytuł" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artysta" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Nazwa pliku" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artysta + Tytuł" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Nieprawidłowy wyszukiwany znacznik %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Brak argumentu przy wyszukiwaniu znacznika %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Znajdź" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Wciśnij %s by rozpocząć nowe wyszukiwanie" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Znajdź: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Znajdź: Wyniki dla %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Znajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Tryb szukania: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Masz nowe wiązania klawiszy" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Wiązania klawiszy niezmienione." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Błąd: Nie można stworzyć katalogu ~/.ncmpc -%s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Błąd: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Zapisano %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Usunięto" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Podaj nowy skrót dla %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Błąd: klawisz %s już jest używany do %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Przypisano klawisz %s do %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Zastosuj wiązania klawiszy " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Zastosuj i Zapisz wiązania klawiszy " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Dodaj nowy klawisz" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Informacja: Zapomniałeś 'Zastosować' swoje zmiany?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Edytuj wiązania klawiszy" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Edytuj klawisze dla %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Poruszanie" #: src/screen_help.c:84 msgid "Global" msgstr "Globalne" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Ekran definicji klawiszy" #: src/screen_help.c:121 msgid "Play" msgstr "Odtwarzaj" #: src/screen_help.c:124 msgid "Move song up" msgstr "Przesuń piosenkę w gorę" #: src/screen_help.c:125 msgid "Move song down" msgstr "Przesuń piosenkę w dół" #: src/screen_help.c:128 msgid "Center" msgstr "Wycentruj" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Ekran przeglądania" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Podaj katalog/Wybierz i odtwarzaj piosenkę" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Dodaj piosenkę do listy odtwarzania" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Usuń listę odtwarzania" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Ekran wyszukiwania" #: src/screen_help.c:151 msgid "Select and play" msgstr "Wybierz i odtwarzaj" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Ekran z tekstem piosenki" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Zobacz teskt piosenki" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Prze)ładuj tekst" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Przerwij pobieranie" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Sćiagnij słowa dla obecnie odtwarzanej piosenki" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Brak zapisanego tesktu piosenki" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Zapisz tekst piosenku" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Usuń zapisany tekst piosenki" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Ekran z wyjściami dźwiękowymi" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Włącz/wyłącz wyjście" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Następny ekran" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Ekran definicji klawiszy" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Edytuj definicje klawiszy dla wybranego polecenia" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Usuń wybraną definicję klawiszy" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Dodaj nowy klawisz" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Idź poziom wyżej" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Zastosuj i zapisz zmiany" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Pomoc" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Brak tekstu piosenki" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Teskt piosenki" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "ładowanie..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Tekst piosenki zapisany" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Teskt piosenki usunięty" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Brak zapisanego tesktu piosenki" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Wyjście '%s' włączone" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Wyjście '%s' wyłączone" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Wyjścia" #: src/screen_song.c:49 msgid "Length" msgstr "Długość" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Kompozytor" #: src/screen_song.c:52 msgid "Name" msgstr "Nazwa" #: src/screen_song.c:53 msgid "Disc" msgstr "Dysk" #: src/screen_song.c:54 msgid "Track" msgstr "Ścieżka" #: src/screen_song.c:55 msgid "Date" msgstr "Data" #: src/screen_song.c:56 msgid "Genre" msgstr "Rodzaj" #: src/screen_song.c:57 msgid "Comment" msgstr "Komentarz" #: src/screen_song.c:58 msgid "Path" msgstr "Ścieżka" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Przepływność bitowa" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Ilość artystów" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Ilość albumów" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Ilość piosenek" #: src/screen_song.c:79 msgid "Uptime" msgstr "" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Ostatnia aktualizacja bazy" #: src/screen_song.c:81 msgid "Playtime" msgstr "Czas odtwarzania" #: src/screen_song.c:82 msgid "DB playtime" msgstr "czas odtwarzania w bazie" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Przeglądarka piosenek" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "statystyki MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Wybrana piosenka" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Obecnie odtwarzana piosenka" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Odtwarzanie:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pauza]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Głośność: b/d" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Głóśność %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Ekran konfiguracji klawiszy" #: src/command.c:66 msgid "Quit" msgstr "Wyjdź" #: src/command.c:70 msgid "Move cursor up" msgstr "Przesuń kursor w górę" #: src/command.c:72 msgid "Move cursor down" msgstr "Przesuń kursor w dół" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Przesuń kursor na początek ekranu" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Przesuń kursor na środek ekranu" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Przesuń kursor na koniec ekranu" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Przesuń kursor na początek listy" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Przesuń kursor na koniec listy" #: src/command.c:84 msgid "Page up" msgstr "Przesuń o stronę do góry" #: src/command.c:86 msgid "Page down" msgstr "Przesuń o stronę w dół" #: src/command.c:88 msgid "Range selection" msgstr "Wybór zakresu" #: src/command.c:90 msgid "Scroll down one line" msgstr "Przesuń o linijkę w dół" #: src/command.c:92 msgid "Scroll up one line" msgstr "Przesuń o linijkę do góry" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Przesuń o pół ekranu do góry" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Przesuń o pół ekranu w dół" #: src/command.c:98 msgid "Select currently playing song" msgstr "Zaznacz obecnie odtwarzaną piosenkę" #: src/command.c:103 msgid "Help screen" msgstr "Ekran pomocy" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Odtwarzaj/Przejdź do katalogu" #: src/command.c:114 msgid "Pause" msgstr "Wstrzymanie" #: src/command.c:116 msgid "Stop" msgstr "Zatrzymanie" #: src/command.c:118 msgid "Crop" msgstr "Przycięcie" #: src/command.c:120 msgid "Next track" msgstr "Następna ścieżka" #: src/command.c:122 msgid "Previous track" msgstr "Poprzednia ściężka" #: src/command.c:124 msgid "Seek forward" msgstr "Przewiń naprzód" #: src/command.c:126 msgid "Seek backward" msgstr "Przewiń wstecz" #: src/command.c:128 msgid "Increase volume" msgstr "Zgłośnij" #: src/command.c:130 msgid "Decrease volume" msgstr "Przycisz" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Zaznacz/odznacz piosenkę na liście odtwarzania" #: src/command.c:134 msgid "Select all listed items" msgstr "Zazczacz wszystkie wylistowane pozycje" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Usuń piosenkę z listy odtwarzania" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Przełącz tryb powtarzania" #: src/command.c:144 msgid "Toggle random mode" msgstr "Przełącz tryb losowy" #: src/command.c:146 msgid "Toggle single mode" msgstr "Przełącz tryb pojedynczej piosenki" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Przełącz tryb pożerania" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Przełącz tryb przenikania" #: src/command.c:152 msgid "Start a music database update" msgstr "Włącz aktualizacje bazy piosenek" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Dodaj url/plik do playlisty" #: src/command.c:159 msgid "Go to root directory" msgstr "Przejdź do katalogu głównego" #: src/command.c:161 msgid "Go to parent directory" msgstr "Przejdź do nadrzędnego katalogu" #: src/command.c:164 msgid "Locate song in browser" msgstr "Zlokalizuj piosenkę w przeglądarce" #: src/command.c:168 msgid "Move item up" msgstr "Przesuń element w górę" #: src/command.c:170 msgid "Move item down" msgstr "Przesuń element w dół" #: src/command.c:172 msgid "Refresh screen" msgstr "Odświerz ekran" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Przełącz tryb wyszukiwania" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Przełącz tryb automatycznego centrowania" #: src/command.c:188 msgid "Next screen" msgstr "Następny ekran" #: src/command.c:190 msgid "Previous screen" msgstr "Poprzedni ekran" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Przełącz do najbardziej aktualnego ekranu" #: src/command.c:197 msgid "Forward find" msgstr "Wyszukaj naprzód" #: src/command.c:199 msgid "Forward find next" msgstr "Znajdź następne" #: src/command.c:201 msgid "Backward find" msgstr "Wyszukaj wstecz" #: src/command.c:203 msgid "Backward find previous" msgstr "Znajdź poprzednie" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Skocz do" #: src/command.c:214 msgid "Artist screen" msgstr "Ekran artysty" #: src/command.c:220 msgid "Change search mode" msgstr "Zmień tryb wyszukiwania" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Zobacz zaznaczone i obecnie odtwarzaną piosenkę" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Przerwij zadanie" #: src/command.c:234 msgid "Update Lyrics" msgstr "Zaktualizuj tekst piosenki" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Niezdefiniowany" #: src/command.c:292 msgid "Space" msgstr "Spacja" #: src/command.c:294 msgid "Enter" msgstr "" #: src/command.c:296 msgid "Backspace" msgstr "" #: src/command.c:298 msgid "Delete" msgstr "" #: src/command.c:300 msgid "Up" msgstr "Góra" #: src/command.c:302 msgid "Down" msgstr "Dół" #: src/command.c:304 msgid "Left" msgstr "Lewo" #: src/command.c:306 msgid "Right" msgstr "Prawo" #: src/command.c:308 msgid "Home" msgstr "" #: src/command.c:310 msgid "End" msgstr "" #: src/command.c:312 msgid "PageDown" msgstr "" #: src/command.c:314 msgid "PageUp" msgstr "" #: src/command.c:316 msgid "Tab" msgstr "" #: src/command.c:318 msgid "Shift+Tab" msgstr "" #: src/command.c:320 msgid "Esc" msgstr "" #: src/command.c:322 msgid "Insert" msgstr "" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Klawisz %s przypisany do %s oraz %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Nieznane polecenie" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Ostrzeżenie: Nieznany kolor pola - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminal nie obsługuje zmiany kolorów" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminal nie obsługuje kolorów" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Błąd" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Nieprawidłowa definicja skrótu klaiwszowego" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Nieznane polecenie" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Niekompletna konfiguracja skrótów klawiszowych" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Nieprawidłowy tryb wyświetlania czasu" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Brakujący '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Zła nazwa koloru" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Niekompletna definicja koloru" #: src/conf.c:269 msgid "Invalid number" msgstr "Nieprawidłowy numer" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Nieprawidłowa definicja koloru" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Nieznana nazwa ekranu" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Nieprawidłowy tryb wyszukiwania" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Nieznany tryb wyszukiwania" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Nieznany parametr konfiguracyjny" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Wielozaznaczanie wyłączone" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Wielozaznaczanie włączone" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Usuń listę odtwarzania %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Błąd: Ekran za mały" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Ostrzeżenie: Nieznany kolor - %s\n" #~ msgid "Connected to %s" #~ msgstr "Połączony z %s" #~ msgid "Shuffled playlist" #~ msgstr "Przetasowano listę odtwarzania" #~ msgid "Cleared playlist" #~ msgstr "Wyczyszczono listę odtwarzania" #~ msgid "Save playlist as" #~ msgstr "Zapisz listę odtwarzania jako" #~ msgid "Playlist" #~ msgstr "Lista odtwarzania" #~ msgid "Playlist on %s" #~ msgstr "Lista odtwarzania na %s" #~ msgid "Playlist screen" #~ msgstr "Ekran listy odtwarzania" #~ msgid "Shuffle playlist" #~ msgstr "Tasuj listę odtwarzania" #~ msgid "Clear playlist" #~ msgstr "Wyczyść listę odtwarzania" #~ msgid "Save playlist" #~ msgstr "Zapisz listę odtwarzania" ncmpc-0.27/po/pt_BR.po0000644000076400001440000006500213064033560011452 00000000000000msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-12-19 01:05+0000\n" "Last-Translator: Jamerson Albuquerque Tiossi \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n" "X-Generator: Launchpad (build 12138)\n" "X-Poedit-Country: BRAZIL\n" "X-Poedit-Language: Portuguese\n" "X-Poedit-SourceCharset: utf-8\n" #: src/i18n.h:42 msgid "y" msgstr "y (sim)" #: src/i18n.h:43 msgid "n" msgstr "n (não)" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Conectando a %s... [Pressione %s para abortar]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Erro: Versão do MPD %d.%d.%d é muito antiga (necessária %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "press %s para o editor de teclas" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Modo de Repetição está ligado" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Modo de Repetição está desligado" #: src/screen.c:163 msgid "Random mode is on" msgstr "Modo Aleatório está ligado" #: src/screen.c:164 msgid "Random mode is off" msgstr "Modo Aleatório está desligado" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Modo de Faixa Única está ligado" #: src/screen.c:174 msgid "Single mode is off" msgstr "Modo de Faixa Única está desligado" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Modo de Deleção de Faixa Reproduzida está ligado" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Modo de Deleção de Faixa Reproduzida está desligado" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Inter-mixagem de %d segundos" #: src/screen.c:198 msgid "Database updated" msgstr "Banco de Dados atualizado" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Modo de Busca: Envolvido" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Modo de Busca: Normal" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Modo de Auto-Centralização: Ligado" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Modo de Auto-Centralização: Desligado" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Todas as faixas" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Todos os artistas" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Álbuns do artista: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Todas as faixas do artista: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Álbum: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Faixas sem álbuns do artista: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Adicionando álbum %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Adicionando %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Carregando Lista de Reprodução %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Adicionando '%s' á Lista de Reprodução" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Atualização de Banco de Dados em progresso..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Atualização do Banco de Dados %s começou" #: src/screen_client.c:52 msgid "Database update started" msgstr "Atualização de Banco de Dados iniciada" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Procurar" #: src/screen_find.c:30 msgid "Find backward" msgstr "Procurar para trás" #: src/screen_find.c:31 msgid "Jump" msgstr "Pular" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "'%s' não pôde ser encontrado" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Substituir %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Senha" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Substituir %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Abortado" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s salvo" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Adicionar" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Deletar este item não é possível" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Deletar Lista de Reprodução" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Lista de Reprodução deletada" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Navegar" #: src/screen_search.c:46 msgid "artist" msgstr "artista" #: src/screen_search.c:47 msgid "album" msgstr "álbum" #: src/screen_search.c:48 msgid "title" msgstr "título" #: src/screen_search.c:49 msgid "track" msgstr "faixa" #: src/screen_search.c:50 msgid "name" msgstr "nome" #: src/screen_search.c:51 msgid "genre" msgstr "estilo" #: src/screen_search.c:52 msgid "date" msgstr "data" #: src/screen_search.c:53 msgid "composer" msgstr "compositor" #: src/screen_search.c:54 msgid "performer" msgstr "intérprete" #: src/screen_search.c:55 msgid "comment" msgstr "comentário" #: src/screen_search.c:62 msgid "file" msgstr "arquivo" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Título" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artista" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Álbum" #: src/screen_search.c:83 msgid "Filename" msgstr "Nome de Arquivo" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artista + Título" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Tag de pesquisa ruim %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Sem argumento para tag de pesquisa %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Pesquisa" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Pressione %s para uma nova pesquisa" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Pesquisa: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Pesquisa: Resultados para %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Pesquisa: Pressione %s para uma nova pesquisa [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Modo de Pesquisa: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Você tem novas teclas de atalho" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Teclas de atalho inalteradas." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Erro: Não foi possível criar diretório ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Erro: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Gravei %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Deletada" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Entre nova tecla para %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erro: tecla %s já está sendo usada para %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Tecla %s definida para %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Aplicar teclas de atalho " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Aplicar e salvar teclas de atalho " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Adicionar nova tecla" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Nota: Você esqueceu de 'Aplicar' suas mudanças?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Editar teclas de atalho" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Editar teclas para %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Movimento" #: src/screen_help.c:84 msgid "Global" msgstr "Global" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Tela de definição de teclas" #: src/screen_help.c:121 msgid "Play" msgstr "Reproduzir" #: src/screen_help.c:124 msgid "Move song up" msgstr "Mover trilha para cima" #: src/screen_help.c:125 msgid "Move song down" msgstr "Mover faixa para baixo" #: src/screen_help.c:128 msgid "Center" msgstr "Centralizar" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Tela de Navegação" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Adentrar diretório/Selecionar e reproduzir trilha" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Adicionar trilha à Lista de Reprodução" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Deletar Lista de Reprodução" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Tela de pesquisa" #: src/screen_help.c:151 msgid "Select and play" msgstr "Selecionar e reproduzir" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Tela de Letra de Música" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Ver Letra de Música" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Re)Carregar letra de música" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Interromper busca" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Baixar letra de música da faixa em reprodução" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Sem letras salvas" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Salvar letra de música." #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Apagar letras salvas" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Tela de Saídas" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Habilitar/desabilitar saída" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Próxima tela" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Tela de definição de teclas" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Editar a definição de teclas para o comando selecionado" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Remover keydef selecionado" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Adicionar nova tecla" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Subir um nível" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Aplicar mudanças e salvar" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Ajuda" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Sem letra de música" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Letra de Música" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "carregando..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Letra de Música salva" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Letras apagadas" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Sem letras salvas" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Saída '%s' habilitada" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Saída '%s' desabilitada" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Saídas" #: src/screen_song.c:49 msgid "Length" msgstr "Duração" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Compositor" #: src/screen_song.c:52 msgid "Name" msgstr "Nome" #: src/screen_song.c:53 msgid "Disc" msgstr "Disco" #: src/screen_song.c:54 msgid "Track" msgstr "Faixa" #: src/screen_song.c:55 msgid "Date" msgstr "Data" #: src/screen_song.c:56 msgid "Genre" msgstr "Estilo" #: src/screen_song.c:57 msgid "Comment" msgstr "Comentário" #: src/screen_song.c:58 msgid "Path" msgstr "Caminho" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Taxa de Amostragem" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Número de artistas" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Número de álbuns" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Número de faixas" #: src/screen_song.c:79 msgid "Uptime" msgstr "Tempo rodando" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Atualização do BD mais recente" #: src/screen_song.c:81 msgid "Playtime" msgstr "Tempo de reprodução" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Tempo de reprodução do BD" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Visualizador de Trilha" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Estatísticas do MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Faixa selecionada" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Faixa atualmente em reprodução" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Reproduzindo:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pausado]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volume n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Tela de configuração de teclas" #: src/command.c:66 msgid "Quit" msgstr "Sair" #: src/command.c:70 msgid "Move cursor up" msgstr "Mover cursor para cima" #: src/command.c:72 msgid "Move cursor down" msgstr "Mover cursor para baixo" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Mover cursor para o topo da tela" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Mover cursor para o meio da tela" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Mover cursor para o final da tela" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Mover cursor para o topo da lista" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Mover cursor para o final da lista" #: src/command.c:84 msgid "Page up" msgstr "Sobe uma página" #: src/command.c:86 msgid "Page down" msgstr "Desce uma página" #: src/command.c:88 msgid "Range selection" msgstr "Seleção de Intervalo" #: src/command.c:90 msgid "Scroll down one line" msgstr "Descer uma linha" #: src/command.c:92 msgid "Scroll up one line" msgstr "Subir uma linha" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Subir meia tela" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Descer meia tela" #: src/command.c:98 msgid "Select currently playing song" msgstr "Selecionar faixa atualmente em reprodução" #: src/command.c:103 msgid "Help screen" msgstr "Tela de Ajuda" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Reproduzir/Adentrar diretório" #: src/command.c:114 msgid "Pause" msgstr "Pause" #: src/command.c:116 msgid "Stop" msgstr "Parar" #: src/command.c:118 msgid "Crop" msgstr "Cortar" #: src/command.c:120 msgid "Next track" msgstr "Próxima faixa" #: src/command.c:122 msgid "Previous track" msgstr "Faixa anterior" #: src/command.c:124 msgid "Seek forward" msgstr "Correr para frente" #: src/command.c:126 msgid "Seek backward" msgstr "Correr para trás" #: src/command.c:128 msgid "Increase volume" msgstr "Aumentar volume" #: src/command.c:130 msgid "Decrease volume" msgstr "Abaixar volume" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Selecionar/De-selecionar trilha na Lista de Reprodução" #: src/command.c:134 msgid "Select all listed items" msgstr "Selecionar todos os itens listados" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Deletar faixa da lista de reprodução" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Liga/Desliga modo de repetição" #: src/command.c:144 msgid "Toggle random mode" msgstr "Liga/Desliga modo aleatório" #: src/command.c:146 msgid "Toggle single mode" msgstr "Liga/Desliga modo de única reprodução" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Liga/Desliga modo de deleção de faixa reproduzida" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Liga/Desliga inter-mixagem" #: src/command.c:152 msgid "Start a music database update" msgstr "Iniciar a atualização do banco de dados de faixas" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Adicionar URL/arquivo à lista de reprodução" #: src/command.c:159 msgid "Go to root directory" msgstr "Ir para raiz" #: src/command.c:161 msgid "Go to parent directory" msgstr "Ir para diretório pai" #: src/command.c:164 msgid "Locate song in browser" msgstr "Localizar musica no navegador" #: src/command.c:168 msgid "Move item up" msgstr "Mover item para cima" #: src/command.c:170 msgid "Move item down" msgstr "Mover item para baixo" #: src/command.c:172 msgid "Refresh screen" msgstr "Redesenhar tela" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Liga/Desliga modo de procura" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Liga/Desliga modo de centralização automática" #: src/command.c:188 msgid "Next screen" msgstr "Próxima tela" #: src/command.c:190 msgid "Previous screen" msgstr "Tela anterior" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Troca para a tela mais recente" #: src/command.c:197 msgid "Forward find" msgstr "Pesquisa para frente" #: src/command.c:199 msgid "Forward find next" msgstr "Pesquisa para a frente - próximo" #: src/command.c:201 msgid "Backward find" msgstr "Pesquisa para trás" #: src/command.c:203 msgid "Backward find previous" msgstr "Pesquisa para trás - anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Pular para" #: src/command.c:214 msgid "Artist screen" msgstr "Tela de artista" #: src/command.c:220 msgid "Change search mode" msgstr "Mudar modo de pesquisa" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Ver a trilha selecionada e a em atual reprodução" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Interromper ação" #: src/command.c:234 msgid "Update Lyrics" msgstr "Atualizar letra de música" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Não-definido" #: src/command.c:292 msgid "Space" msgstr "Espaço" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Cima" #: src/command.c:302 msgid "Down" msgstr "Baixo" #: src/command.c:304 msgid "Left" msgstr "Esquerda" #: src/command.c:306 msgid "Right" msgstr "Direita" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Tecla %s definida para %s e %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Comando desconhecido" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Aviso: Campo de cor desconhecido - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminal não tem suporte para mudar cores" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminal não tem capacidade para trabalhar com cores" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Erro" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Definição de tecla de atalho malformada" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Comando desconhecido" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Configuração de teclas de atalho incompleta" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Tipo de visualização de tempo ruim" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Falta '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Nome de cor ruim" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Definição de cor incompleta" #: src/conf.c:269 msgid "Invalid number" msgstr "Número inválido" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Definição de cor malformada" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Nome de tela desconhecido" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Modo de pesquisa inválido" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Modo de pesquisa desconhecido" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Parâmetro de configuração desconhecido" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Traduzido por Carlos Eduardo C. B. Shinagawa \n" "\n" "Launchpad Contributions:\n" " Cadu https://launchpad.net/~cadu-coelho\n" " Guilherme Lindner https://launchpad.net/~gui666\n" " Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi\n" " Max Kellermann https://launchpad.net/~max-duempel\n" " Osni Leandro https://launchpad.net/~osni" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Seleção de intervalo desabilitada" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Seleção de intervalo habilitada" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Deletar Lista de Reprodução %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Erro: Tela é muito pequena" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Aviso: Cor desconhecida - %s\n" #~ msgid "Connected to %s" #~ msgstr "Conectado à %s" #~ msgid "Shuffled playlist" #~ msgstr "Lista de Reprodução misturada" #~ msgid "Cleared playlist" #~ msgstr "Lista de Reprodução apagada" #~ msgid "Save playlist as" #~ msgstr "Salvar Lista de Reprodução como" #~ msgid "Playlist" #~ msgstr "Lista de Reprodução" #~ msgid "Playlist on %s" #~ msgstr "Lista de Reprodução em %s" #~ msgid "Playlist screen" #~ msgstr "Tela da Lista de Reprodução" #~ msgid "Shuffle playlist" #~ msgstr "Randomizar lista de reprodução" #~ msgid "Clear playlist" #~ msgstr "Limpar lista de reprodução" #~ msgid "Save playlist" #~ msgstr "Salvar lista de reprodução" ncmpc-0.27/po/sk.po0000644000076400001440000006556513064033560011077 00000000000000# Slovak # Copyright (C) 2004 Kalle Wallin # This file is distributed under the same license as the ncmpc package. # Jozef Riha , 2006, 2008. msgid "" msgstr "" "Project-Id-Version: ncmpc 0.11.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-04-07 01:36+0000\n" "Last-Translator: Roman Horník \n" "Language-Team: sk \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "a" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Pripájam sa k %s... [Stlačte %s pre zrušenie]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Chyba: MPD verzie %d.%d.%d je príliš staré (%s je potrebná)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "stlačte %s pre editor klávesov" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Režim opakovania zapnutý" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Režim opakovania vypnutý" #: src/screen.c:163 msgid "Random mode is on" msgstr "Náhodný režim zapnutý" #: src/screen.c:164 msgid "Random mode is off" msgstr "Náhodný režim vypnutý" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Jednotlivý režim zapnutý" #: src/screen.c:174 msgid "Single mode is off" msgstr "Jednotlivý režim vypnutý" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Spotrebný režim zapnutý" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Spotrebný režim vypnutý" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Prelínanie %d sekúnd" #: src/screen.c:198 msgid "Database updated" msgstr "Databáza aktualizovaná" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Režim vyhľadávania: Zabalený" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Režim vyhľadávanie: Normálny" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Automatické centrovanie: Zapnuté" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Automatické centrovanie: Vypnuté" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Všetky stopy" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Všetci interpreti" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Albumy od interpreta: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Všetky stopy od interpreta: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "Albumy od interpreta: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "Nahrávam playlist %s..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "Pridávam adresár %s...\n" #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Nahrávam playlist %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Pridávam '%s' do playlistu" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Prebieha aktualizácia databáze..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Aktualizácia databáze %s začala" #: src/screen_client.c:52 msgid "Database update started" msgstr "Bola spustená aktualizácia databáze" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Vyhľadať" #: src/screen_find.c:30 msgid "Find backward" msgstr "Vyhľadať spätne" #: src/screen_find.c:31 msgid "Jump" msgstr "Skok" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Nepodarilo sa nájsť '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Nahradiť %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Heslo" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Nahradiť %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Zrušené" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Uložený %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Pridať" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Zmazanie tejto položky nie je možné" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Vymazať playlist" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Playlist vymazaný" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Listovať" #: src/screen_search.c:46 msgid "artist" msgstr "interpret" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "názov" #: src/screen_search.c:49 msgid "track" msgstr "stopa" #: src/screen_search.c:50 msgid "name" msgstr "názov" #: src/screen_search.c:51 msgid "genre" msgstr "žáner" #: src/screen_search.c:52 msgid "date" msgstr "dátum" #: src/screen_search.c:53 msgid "composer" msgstr "skladateľ" #: src/screen_search.c:54 msgid "performer" msgstr "umelec" #: src/screen_search.c:55 msgid "comment" msgstr "komentár" #: src/screen_search.c:62 msgid "file" msgstr "súbor" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Názov" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Interpret" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Názov súboru" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Interpret + Názov" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Zlá značka vyhľadávania %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Chýba argument pre značku vyhľadávania %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Hľadanie" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Stlačte %s pre nové hľadanie" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Vyhľadať: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Hľadanie: Výsledky pre reťazec %s[%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Hľadanie: Stlačte %s pre opätovné hľadanie [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Režim vyhľadávania: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Nastavili ste nové priradenie klávesov" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Priradenie klávesov sa nezmenilo." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Chyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Chyba: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Zapísané %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Vymazané" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Zadajte nový kláves pre %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Chyba: kláves %s je už použitý pre %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s priradené k %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Použiť nastavenie klávesov " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Použiť & Uložiť nastavenie klávesov " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Pridať nový kláves" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Poznámka: Zabudli ste 'Použiť' vaše zmeny?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Upraviť priradenie klávesov" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Upraviť klávesy pre %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Pohyb" #: src/screen_help.c:84 msgid "Global" msgstr "Globálne" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Obrazovka s nastavením kláves" #: src/screen_help.c:121 msgid "Play" msgstr "Prehrávať" #: src/screen_help.c:124 msgid "Move song up" msgstr "Presunúť skladbu nahor" #: src/screen_help.c:125 msgid "Move song down" msgstr "Presunúť skladbu nadol" #: src/screen_help.c:128 msgid "Center" msgstr "Do stredu" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Okno listovania" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Vstúpiť do adresára/Vybrať a prehrať skladbu" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Pridať skladbu do playlistu" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Vymazať playlist" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Okno vyhľadávania" #: src/screen_help.c:151 msgid "Select and play" msgstr "Vybrať a prehrať" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Okno textu piesne" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Zobraziť text piesne" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Znovu)načítať text" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Zachytené prerušenie" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Stiahnuť text pre momentálne prehrávanú pieseň" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Uložiť text piesne" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Uložiť text piesne" #: src/screen_help.c:170 #, fuzzy msgid "Delete saved lyrics" msgstr "Uložiť text piesne" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Obrazovka výstupov" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Povoliť/vypnúť výstup" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Ďalšia obrazovka" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Obrazovka s nastavením kláves" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Upraviť kláves pre vybraný príkaz" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Odstrániť vybrané nastavenie kláves" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Pridať nový kláves" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Prejsť o úroveň vyššie" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Použiť a uložiť zmeny" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Pomoc" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Bez textu" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Text piesne" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "načítam..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Text piesne uložený" #: src/screen_lyrics.c:443 #, fuzzy msgid "Lyrics deleted" msgstr "Playlist vymazaný" #: src/screen_lyrics.c:446 #, fuzzy msgid "No saved lyrics" msgstr "Uložiť text piesne" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Výstup '%s' povolený" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Výstup '%s' vypnutý" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Výstupy" #: src/screen_song.c:49 msgid "Length" msgstr "Dĺžka" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Skladateľ" #: src/screen_song.c:52 msgid "Name" msgstr "Názov" #: src/screen_song.c:53 msgid "Disc" msgstr "Disk" #: src/screen_song.c:54 msgid "Track" msgstr "Stopa" #: src/screen_song.c:55 msgid "Date" msgstr "Dátum" #: src/screen_song.c:56 msgid "Genre" msgstr "Žáner" #: src/screen_song.c:57 msgid "Comment" msgstr "Komentár" #: src/screen_song.c:58 msgid "Path" msgstr "Cesta" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bitový tok" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Počet interpretov" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Počet albumov" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Počet piesní" #: src/screen_song.c:79 msgid "Uptime" msgstr "Uptime" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Najčerstvejší update databáze" #: src/screen_song.c:81 msgid "Playtime" msgstr "Čas hrania" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Čas hrania databáze" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Prehliadač piesní" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Štatistiky MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Vybraná pieseň" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Momentálne prehrávaná pieseň" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "Prehrávam:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pozastavené]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Hlasitosť n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Hlasitosť %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Okno nastavenia klávesov" #: src/command.c:66 msgid "Quit" msgstr "Ukončiť" #: src/command.c:70 msgid "Move cursor up" msgstr "Presunúť kurzor nahor" #: src/command.c:72 msgid "Move cursor down" msgstr "Presunúť kurzor nadol" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Presunúť na vrch obrazovky" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Presunúť kurzor do stredu obrazovky" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Presunúť kurzor na spodok obrazovky" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Presunúť kurzor na začiatok zoznamu" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Presunúť kurzor na koniec zoznamu" #: src/command.c:84 msgid "Page up" msgstr "Page up" #: src/command.c:86 msgid "Page down" msgstr "Page down" #: src/command.c:88 msgid "Range selection" msgstr "Výber rozsahu" #: src/command.c:90 msgid "Scroll down one line" msgstr "Posun o jeden riadok nadol" #: src/command.c:92 msgid "Scroll up one line" msgstr "Posun o jeden riadok nahor" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Posun o polovicu obrazovky nahor" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Posun o polovicu obrazovky nadol" #: src/command.c:98 msgid "Select currently playing song" msgstr "Zvoľiť práve prehrávanú skladbu" #: src/command.c:103 msgid "Help screen" msgstr "Okno s pomocou" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Prehrať/Vstúpiť do adresára" #: src/command.c:114 msgid "Pause" msgstr "Pauza" #: src/command.c:116 msgid "Stop" msgstr "Stop" #: src/command.c:118 msgid "Crop" msgstr "Orezať" #: src/command.c:120 msgid "Next track" msgstr "Ďalšia stopa" #: src/command.c:122 msgid "Previous track" msgstr "Predchádzajúca stopa" #: src/command.c:124 msgid "Seek forward" msgstr "Posunúť vpred" #: src/command.c:126 msgid "Seek backward" msgstr "Posunúť vzad" #: src/command.c:128 msgid "Increase volume" msgstr "Pridať hlasitosť" #: src/command.c:130 msgid "Decrease volume" msgstr "Stíšiť" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Vybrať/odvybrať skladbu v playliste" #: src/command.c:134 msgid "Select all listed items" msgstr "Vybrať všetky položky v zozname" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Vymazať skladbu z playlistu" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Prepnúť režim opakovania" #: src/command.c:144 msgid "Toggle random mode" msgstr "Prepnúť náhodný režim" #: src/command.c:146 msgid "Toggle single mode" msgstr "Prepnúť jednotlivý režim" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Prepnúť spotrebný režim" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Prepnúť režím prelínania skladieb" #: src/command.c:152 msgid "Start a music database update" msgstr "Spustiť aktualizáciu hudobnej databáze" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Pridať url/súbor do playlistu" #: src/command.c:159 msgid "Go to root directory" msgstr "Prejsť do koreňového adresára" #: src/command.c:161 msgid "Go to parent directory" msgstr "Prejsť do nadradeného adresára" #: src/command.c:164 msgid "Locate song in browser" msgstr "Nájsť skladbu v prehliadači" #: src/command.c:168 msgid "Move item up" msgstr "Presunúť položku nahor" #: src/command.c:170 msgid "Move item down" msgstr "Presunúť položku nadol" #: src/command.c:172 msgid "Refresh screen" msgstr "Obnoviť obrazovku" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Prepnúť režim vyhľadávania" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Prepnúť automatický režim centrovania" #: src/command.c:188 msgid "Next screen" msgstr "Ďalšia obrazovka" #: src/command.c:190 msgid "Previous screen" msgstr "Predchádzajúca obrazovka" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Prepnúť na predchádzajúcu obrazovku" #: src/command.c:197 msgid "Forward find" msgstr "Hľadať vpred" #: src/command.c:199 msgid "Forward find next" msgstr "Pokračovať v hľadaní vpred" #: src/command.c:201 msgid "Backward find" msgstr "Hľadať vzad" #: src/command.c:203 msgid "Backward find previous" msgstr "Pokračovať v hľadaní vzad" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Skok na" #: src/command.c:214 msgid "Artist screen" msgstr "Okno interpreta" #: src/command.c:220 msgid "Change search mode" msgstr "Zmeniť režim vyhľadávania" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Zobraziť vybranú a momentálne prehrávanú pieseň" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Akcia prerušenia" #: src/command.c:234 msgid "Update Lyrics" msgstr "Obnoviť text" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Neurčené" #: src/command.c:292 msgid "Space" msgstr "Medzera" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Hore" #: src/command.c:302 msgid "Down" msgstr "Dole" #: src/command.c:304 msgid "Left" msgstr "Vľavo" #: src/command.c:306 msgid "Right" msgstr "Vpravo" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Kláves %s priradený k %s a %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Neznámy príkaz" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Varovanie: Neznáme farebné pole - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminál nemá podporu pre zmenu farieb" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminál nemá schopnosti zobrazovania farieb" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Chyba" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Chybne zadaná definícia klávesovej skratky" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Neznámy príkaz" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Neúplná konfigurácie klavesových skratiek" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Nesprávny typ zobrazovania času" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Chýba '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Nesprávny názov farby" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Neúplná definícia farby" #: src/conf.c:269 msgid "Invalid number" msgstr "Neplatné číslo" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Zle zadaná definícia farby" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Neznámy názov obrazovky" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Neplatný režim vyhľadávania" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Neznámy režim vyhľadávania" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Neznámy parameter konfigurácie" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Jozef Riha \n" "\n" "Launchpad Contributions:\n" " Jose Riha https://launchpad.net/~jose1711\n" " Roman Horník https://launchpad.net/~roman.hornik" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Výber rozsahu vypnutý" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Výber rozsahu zapnutý" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Vymazať playlist %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Chyba: Okno je príliš malé" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varovania: Neznáma farba - %s\n" #~ msgid "Connected to %s" #~ msgstr "Pripojený k %s" #~ msgid "Shuffled playlist" #~ msgstr "Zamiešaný playlist" #~ msgid "Cleared playlist" #~ msgstr "Vyčistený playlist" #~ msgid "Save playlist as" #~ msgstr "Uložiť playlist ako" #~ msgid "Playlist" #~ msgstr "Playlist" #~ msgid "Playlist on %s" #~ msgstr "Playlist na %s" #~ msgid "Playlist screen" #~ msgstr "Okno playlistu" #~ msgid "Shuffle playlist" #~ msgstr "Zamiešať playlist" #~ msgid "Clear playlist" #~ msgstr "Vyčistiť playlist" #~ msgid "Save playlist" #~ msgstr "Uložiť playlist" #~ msgid "Explicitly download lyrics" #~ msgstr "Explicitne sťahovať texty" #~ msgid "Search: " #~ msgstr "Vyhľadať: " #~ msgid "Key %s assigned to %s and %s (press %s for the key editor)" #~ msgstr "Kláves %s priradený k %s a %s (stlačte %s pre editor klávesov)" #~ msgid "Clock" #~ msgstr "Hodiny" #~ msgid "Lyrics [No connection]" #~ msgstr "Text piesne [Bez pripojenia]" #~ msgid "Lyrics [Not found]" #~ msgstr "Text piesne [Nenájdený]" #~ msgid "Lyrics [retrieving]" #~ msgstr "Text piesne [získavam]" #~ msgid "Clock screen" #~ msgstr "Obrazovka s hodinami" #~ msgid "Error: Unable to convert characters to %s" #~ msgstr "Chyba: Nepodarilo sa konvertovať znaky na %s" #~ msgid "Error: Unable to convert characters to UTF-8" #~ msgstr "Chyba: Nepodarilo sa konvertovať znaky do UTF-8" ncmpc-0.27/po/sv.po0000644000076400001440000006146313064033560011103 00000000000000# Swedish # This file is distributed under the same license as the ncmpc package. # Kalle Wallin , 2004. # Björn Pettersson , 2008. # msgid "" msgstr "" "Project-Id-Version: ncmpc 0.12\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2010-04-14 05:21+0000\n" "Last-Translator: Rickard Närström \n" "Language-Team: sv \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/i18n.h:42 msgid "y" msgstr "j" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Ansluter till %s... [Tryck %s för att avbryta]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Fel: MPD version %d.%d.%d är för gammal (%s krävs)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "tryck på %s för att korrigera" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Upprepningsläge på" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Upprepningsläge av" #: src/screen.c:163 msgid "Random mode is on" msgstr "Slumpningsläge på" #: src/screen.c:164 msgid "Random mode is off" msgstr "Slumpningsläge av" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "" #: src/screen.c:174 msgid "Single mode is off" msgstr "" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Förtäringsläge på" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Förtäringsläge av" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Mjuk övergång %d sekunder" #: src/screen.c:198 msgid "Database updated" msgstr "Databas uppdaterad" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Sökläge: Börja om" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Sökläge: Till början/slut" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Automatisk centrering påslaget" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Automatisk centrering avslaget" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Alla spår" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Alla artister" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Album av artist: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Alla spår av artist: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Album: %s - %s" #: src/screen_artist.c:407 #, fuzzy, c-format msgid "Tracks of no album of artist: %s" msgstr "Album av artist: %s" #: src/screen_artist.c:452 #, fuzzy, c-format msgid "Adding album %s..." msgstr "Laddar spellista %s..." #: src/screen_artist.c:454 #, fuzzy, c-format msgid "Adding %s..." msgstr "laddar..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Laddar spellista %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Lägger till '%s' till spellista" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Databasen uppdateras..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Uppdaterar databasen ifrån %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "Databasuppdatering påbörjad" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Sök" #: src/screen_find.c:30 msgid "Find backward" msgstr "Sök bakåt" #: src/screen_find.c:31 msgid "Jump" msgstr "Hopp" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Kan inte hitta '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Ersätt %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Lösenord" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Ersätt %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Avbrutet" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "%s sparad" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Lägg till" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Du kan inte ta bort det här föremålet" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Ta bort spellista" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Spellista borttagen" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Filer" #: src/screen_search.c:46 msgid "artist" msgstr "artist" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "titel" #: src/screen_search.c:49 msgid "track" msgstr "spår" #: src/screen_search.c:50 msgid "name" msgstr "namn" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "datum" #: src/screen_search.c:53 msgid "composer" msgstr "kompositör" #: src/screen_search.c:54 msgid "performer" msgstr "uppträdare" #: src/screen_search.c:55 msgid "comment" msgstr "kommentar" #: src/screen_search.c:62 msgid "file" msgstr "fil" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Titel" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Artist" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Album" #: src/screen_search.c:83 msgid "Filename" msgstr "Filnamn" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Artist + titel" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Felaktig söktyp %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Argumentet för söktyp %s saknas" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Sök" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Tryck %s för ny sökning" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Sök: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Sökresultat för %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Tryck %s för ny sökning [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Sök efter: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Tangentdefinitioner uppdaterade" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Tangentdefinitioner oförändrade." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Fel: Kunde inte skapa mappen ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Fel: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Sparade %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Borttagen" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Ny tangent för %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Fel: Tangenten %s används redan för %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "%s tilldelad %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Verkställ " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Verkställ och spara " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Lägg till ny tangent" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "OBS! Glömde du att 'Verkställa' dina ändringar?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Ändra tangentdefinitioner" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Ändra tangenter för kommandot %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Navigation" #: src/screen_help.c:84 msgid "Global" msgstr "Globala" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Hjälp" #: src/screen_help.c:121 msgid "Play" msgstr "Starta/Spela markerad" #: src/screen_help.c:124 msgid "Move song up" msgstr "Flytta spår uppåt" #: src/screen_help.c:125 msgid "Move song down" msgstr "Flytta spår nedåt" #: src/screen_help.c:128 msgid "Center" msgstr "Centrera" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Filer" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Välj katalog/Markera och spela upp" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Lägg till i spellista" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Ta bort spellista" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Databassökning" #: src/screen_help.c:151 msgid "Select and play" msgstr "Lägg till spellistan och spela" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Texter" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Visa texter" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "Ladda (om) texter" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Avbryt hämtning" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Ladda ner texter till låten som spelas just nu" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Spara texter" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Spara texter" #: src/screen_help.c:170 #, fuzzy msgid "Delete saved lyrics" msgstr "Spara texter" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Utgångar" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Slå på/av utgång" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Nästa skärm" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Lägg till ny tangent" #: src/screen_help.c:194 msgid "Go up a level" msgstr "Gå upp en nivå" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Verkställ och spara förändringar" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Hjälp" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Ingen text" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Texter" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "laddar..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Text sparad" #: src/screen_lyrics.c:443 #, fuzzy msgid "Lyrics deleted" msgstr "Spellista borttagen" #: src/screen_lyrics.c:446 #, fuzzy msgid "No saved lyrics" msgstr "Spara texter" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Utgång '%s' påslagen" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Utgång '%s' avslagen" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Utgångar" #: src/screen_song.c:49 msgid "Length" msgstr "Längd" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Kompositör" #: src/screen_song.c:52 msgid "Name" msgstr "Namn" #: src/screen_song.c:53 msgid "Disc" msgstr "Skiva" #: src/screen_song.c:54 msgid "Track" msgstr "Spår" #: src/screen_song.c:55 msgid "Date" msgstr "Datum" #: src/screen_song.c:56 msgid "Genre" msgstr "Genre" #: src/screen_song.c:57 msgid "Comment" msgstr "Kommentar" #: src/screen_song.c:58 msgid "Path" msgstr "Sökväg" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Bithastighet" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Antal artister" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Antal album" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Antal låtar" #: src/screen_song.c:79 msgid "Uptime" msgstr "Upptid" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Senaste databasuppdateringen" #: src/screen_song.c:81 msgid "Playtime" msgstr "Speltid" #: src/screen_song.c:82 msgid "DB playtime" msgstr "" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Spår" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD-statistik" #: src/screen_song.c:410 msgid "Selected song" msgstr "Markerad låt" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kb/s" #: src/status_bar.c:121 msgid "Playing:" msgstr "Spelar:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Pausad]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Volym: n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Volym: %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Tangentdefinitioner" #: src/command.c:66 msgid "Quit" msgstr "Avsluta" #: src/command.c:70 msgid "Move cursor up" msgstr "Markör uppåt" #: src/command.c:72 msgid "Move cursor down" msgstr "Markör nedåt" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Flytta markören längst upp" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Flytta markören till mitten" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Flytta markören längst ner" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Flytta markören längst upp i listan" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Flytta markören längst ner i listan" #: src/command.c:84 msgid "Page up" msgstr "Markören en skärm uppåt" #: src/command.c:86 msgid "Page down" msgstr "Markören en skärm nedåt" #: src/command.c:88 msgid "Range selection" msgstr "" #: src/command.c:90 msgid "Scroll down one line" msgstr "Gå ner en rad" #: src/command.c:92 msgid "Scroll up one line" msgstr "Gå upp en rad" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Gå upp en halv skärm" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Gå ner en halv skärm" #: src/command.c:98 msgid "Select currently playing song" msgstr "" #: src/command.c:103 msgid "Help screen" msgstr "Hjälp" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Spela upp/Välj" #: src/command.c:114 msgid "Pause" msgstr "Pausa" #: src/command.c:116 msgid "Stop" msgstr "Stoppa" #: src/command.c:118 msgid "Crop" msgstr "Beskär" #: src/command.c:120 msgid "Next track" msgstr "Nästa spår" #: src/command.c:122 msgid "Previous track" msgstr "Föregående spår" #: src/command.c:124 msgid "Seek forward" msgstr "Sök framåt" #: src/command.c:126 msgid "Seek backward" msgstr "Sök bakåt" #: src/command.c:128 msgid "Increase volume" msgstr "Höj volymen" #: src/command.c:130 msgid "Decrease volume" msgstr "Sänk volymen" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Markera/avmarkera spår till spellistan" #: src/command.c:134 msgid "Select all listed items" msgstr "Markera alla listade föremål" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Ta bort låt från spellista" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Repeat på/av" #: src/command.c:144 msgid "Toggle random mode" msgstr "Slumpning på/av" #: src/command.c:146 msgid "Toggle single mode" msgstr "" #: src/command.c:148 msgid "Toggle consume mode" msgstr "" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Mjuk övergång på/av" #: src/command.c:152 msgid "Start a music database update" msgstr "Updatera musikdatabasen" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Lägg till url eller fil till spellistan" #: src/command.c:159 msgid "Go to root directory" msgstr "Gå till rotkatalogen" #: src/command.c:161 msgid "Go to parent directory" msgstr "Gå upp en nivå" #: src/command.c:164 msgid "Locate song in browser" msgstr "Hitta spår i Filer" #: src/command.c:168 msgid "Move item up" msgstr "Flytta upp" #: src/command.c:170 msgid "Move item down" msgstr "Flytta ner" #: src/command.c:172 msgid "Refresh screen" msgstr "Uppdatera fönster" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Ändra sökinställningar" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Automatisk centrering på/av" #: src/command.c:188 msgid "Next screen" msgstr "Nästa skärm" #: src/command.c:190 msgid "Previous screen" msgstr "Tidigare skärm" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "" #: src/command.c:197 msgid "Forward find" msgstr "Sök" #: src/command.c:199 msgid "Forward find next" msgstr "Nästa träff" #: src/command.c:201 msgid "Backward find" msgstr "Föregående träff" #: src/command.c:203 msgid "Backward find previous" msgstr "Upprepa sökning bakåt" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Hoppa till" #: src/command.c:214 msgid "Artist screen" msgstr "Artister" #: src/command.c:220 msgid "Change search mode" msgstr "Ändra måltyp för databassökning" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Avbryt handling" #: src/command.c:234 msgid "Update Lyrics" msgstr "Uppdatera texter" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Ej definierad" #: src/command.c:292 msgid "Space" msgstr "Mellanslag" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Bakstegstangent" #: src/command.c:298 msgid "Delete" msgstr "Ta bort" #: src/command.c:300 msgid "Up" msgstr "Uppåtpil" #: src/command.c:302 msgid "Down" msgstr "Nedåtpil" #: src/command.c:304 msgid "Left" msgstr "Vänsterpil" #: src/command.c:306 msgid "Right" msgstr "Högerpil" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+tabb" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Tangent %s tilldelad %s och %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Okänt kommando" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Varning: %s ej definierad.\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Terminalen saknar stöd för växling av färger" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Terminalen saknar stöd för färger" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Fel" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Dålig tangentdefinition" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Okänt kommando" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Inkomplett tangentdefinition" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Felaktigt tidsformat" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Saknar '='" #: src/conf.c:253 msgid "Bad color name" msgstr "Felaktigt färgnamn" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Inkomplett färgdefinition" #: src/conf.c:269 msgid "Invalid number" msgstr "Ogiltigt nummer" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Felaktig färgdefinition" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Skärmnamn okänt" #: src/conf.c:339 msgid "Invalid search mode" msgstr "" #: src/conf.c:362 msgid "Unknown search mode" msgstr "" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Okänd konfigurationsinställning" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Björn Pettersson https://launchpad.net/~bjorn-hygiena\n" " Kalle Wallin https://launchpad.net/~kaw\n" " Rickard Närström https://launchpad.net/~riccetn\n" " nanker https://launchpad.net/~nanker" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Ta bort spellista %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Fel: Terminalen är för liten" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varning: Okänd färg - %s\n" #~ msgid "Connected to %s" #~ msgstr "Ansluten till %s" #~ msgid "Shuffled playlist" #~ msgstr "Spellistan slumpsorterades" #~ msgid "Cleared playlist" #~ msgstr "Spellistan rensad" #~ msgid "Save playlist as" #~ msgstr "Spara spellistan som" #~ msgid "Playlist" #~ msgstr "Spellista" #~ msgid "Playlist on %s" #~ msgstr "Spellista på %s" #~ msgid "Playlist screen" #~ msgstr "Spellista" #~ msgid "Shuffle playlist" #~ msgstr "Slumpsportera spellista" #~ msgid "Clear playlist" #~ msgstr "Rensa spellista" #~ msgid "Save playlist" #~ msgstr "Spara spellista" ncmpc-0.27/po/uk.po0000644000076400001440000007542413064033560011074 00000000000000# Ukrainian translations for ncmpc package. # This file is distributed under the same license as the ncmpc package. # Oleksandr Kovalenko , 2009-2011. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-08-11 10:30+0300\n" "Last-Translator: Oleksandr Kovalenko \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Poedit-Language: Ukrainian\n" "X-Poedit-Country: UKRAINE\n" #: src/i18n.h:42 msgid "y" msgstr "y" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "невідомо" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "Встановлення з'єднання з %s... [Натисніть %s щоб припинити]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "Помилка: MPD версії %d.%d.%d застаріла (необхідна %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "натисніть %s щоб редагувати клавіші" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "Режим повторення увімкнений" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "Режим повторення вимкнений" #: src/screen.c:163 msgid "Random mode is on" msgstr "Режим випадкового програвання увімкнений" #: src/screen.c:164 msgid "Random mode is off" msgstr "Режим випадкового програвання вимкнений" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "Режим повторення однієї доріжки увімкнений" #: src/screen.c:174 msgid "Single mode is off" msgstr "Режим повторення однієї доріжки вимкнений" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "Режим вичерпання увімкнений" #: src/screen.c:183 msgid "Consume mode is off" msgstr "Режим вичерпання вимкнений" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "Плавний перехід: %dс" #: src/screen.c:198 msgid "Database updated" msgstr "База даних оновлена" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "Режим пошуку: завернутий (розділений???)" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "Режим пошуку: звичайний" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "Режим автоматичного центрування: увімкнено" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "Режим автоматичного центрування: вимкнено" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "Всі доріжки" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "Всі виконавці" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "Альбоми виконавця: %s" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "Всі доріжки виконавця: %s" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "Альбом: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "Доріжки без альбому виконавця: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "Додається альбом %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "Додається %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "Завантажується перелік програвання %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "Додається '%s' до переліку програвання" #: src/screen_client.c:41 msgid "Database update running..." msgstr "Виконується оновлення бази даних..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "Оновлення бази даних %s розпочате" #: src/screen_client.c:52 msgid "Database update started" msgstr "Початок оновлення бази даних" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "Знайти" #: src/screen_find.c:30 msgid "Find backward" msgstr "Знайти позаду" #: src/screen_find.c:31 msgid "Jump" msgstr "Перейти" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "Не вдається знайти '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "Замінити %s [%s/%s] ? " #: src/screen_utils.c:121 msgid "Password" msgstr "Пароль" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "Замінити %s [%s/%s] ? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "Перервано" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "Збережений %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "Додати" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "Видалити цей елемент неможливо" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "Видалити перелік програвання" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "Перелік програвання видалений" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "Огляд" #: src/screen_search.c:46 msgid "artist" msgstr "artist" #: src/screen_search.c:47 msgid "album" msgstr "album" #: src/screen_search.c:48 msgid "title" msgstr "title" #: src/screen_search.c:49 msgid "track" msgstr "track" #: src/screen_search.c:50 msgid "name" msgstr "name" #: src/screen_search.c:51 msgid "genre" msgstr "genre" #: src/screen_search.c:52 msgid "date" msgstr "date" #: src/screen_search.c:53 msgid "composer" msgstr "composer" #: src/screen_search.c:54 msgid "performer" msgstr "performer" #: src/screen_search.c:55 msgid "comment" msgstr "comment" #: src/screen_search.c:62 msgid "file" msgstr "file" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "Назва" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "Виконавець" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "Альбом" #: src/screen_search.c:83 msgid "Filename" msgstr "Назва файлу" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "Виконавець + Назва" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "Неправильна мітка %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "Немає аргументу для пошуку за міткою %s" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "Пошук" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "Натисніть %s для нового пошуку" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "Пошук: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "Пошук: наслідки пошуку для %s [%s]" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "Пошук: натисніть %s для нового пошуку [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "Режим пошуку: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "Ви маєте нову прив'язку клавіші" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "Прив'язки клавіш не змінені." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "Помилка: неможливо створити теку ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "Помилка: %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "Записаний %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "Видалена" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "Введіть нову клавішу для %s: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "Помилка: клавіша %s вже використовується для %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "Призначення %s до %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "===> Застосування прив'язки клавіші " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "===> Застосування та збереження прив'язки клавіші " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "Додати нову клавішу" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "Примітка: ви забули \"Застосувати\" зроблені зміни?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "Редагувати прив'язки клавіш" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "Редагувати клавішу для %s" #: src/screen_help.c:39 msgid "Movement" msgstr "Переміщення" #: src/screen_help.c:84 msgid "Global" msgstr "Загальні" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "Екран призначення клавіш" #: src/screen_help.c:121 msgid "Play" msgstr "Програти" #: src/screen_help.c:124 msgid "Move song up" msgstr "Перемістити пісню вгору" #: src/screen_help.c:125 msgid "Move song down" msgstr "Перемістити пісню вниз" #: src/screen_help.c:128 msgid "Center" msgstr "По центру" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "Екран перегляду" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "Ввести теку чи вибрати та програти пісню" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "Долучити пісню до переліку програвання" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "Видалити перелік програвання" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "Екран пошуку" #: src/screen_help.c:151 msgid "Select and play" msgstr "Вибрати та програти" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "Екран текстів пісень" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "Переглянути текст пісні" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(Пере)завантажити текст пісні" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "Припинити отримання" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "Завантажити текст для пісні, що зараз програється" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "Немає збереженого тексту пісні" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "Зберегти текст пісні" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "Видалити збережений текст пісні" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "Екран виходів" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "Увімкнути/вимкнути вихід" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "Наступний екран" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "Екран призначення клавіш" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "Редагувати призначену клавішу для вибраної команди" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "Вилучити вибране призначення клавіші" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "Додати нову клавішу" #: src/screen_help.c:194 msgid "Go up a level" msgstr "На рівень вище" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "Застосувати та зберегти зміни" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "Допомога" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "Немає тексту пісні" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "Тексти пісень" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "завантаження..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "Текст пісні збережений" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "Текст пісні видалений" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "Немає збереженого тексту пісні" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "Вихід '%s' увімкнений" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "Вихід '%s' вимкнений" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "Виходи" #: src/screen_song.c:49 msgid "Length" msgstr "Тривалість" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "Композитор" #: src/screen_song.c:52 msgid "Name" msgstr "Назва" #: src/screen_song.c:53 msgid "Disc" msgstr "Диск" #: src/screen_song.c:54 msgid "Track" msgstr "Доріжка" #: src/screen_song.c:55 msgid "Date" msgstr "Дата" #: src/screen_song.c:56 msgid "Genre" msgstr "Жанр" #: src/screen_song.c:57 msgid "Comment" msgstr "Примітка" #: src/screen_song.c:58 msgid "Path" msgstr "Шлях" #: src/screen_song.c:59 msgid "Bitrate" msgstr "Бітрейт" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "Кількість виконавців" #: src/screen_song.c:77 msgid "Number of albums" msgstr "Кількість альбомів" #: src/screen_song.c:78 msgid "Number of songs" msgstr "Кількість пісень" #: src/screen_song.c:79 msgid "Uptime" msgstr "Час роботи" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "Останнє оновлення бази даних" #: src/screen_song.c:81 msgid "Playtime" msgstr "Час програвання" #: src/screen_song.c:82 msgid "DB playtime" msgstr "Час програвання всієї БД" #: src/screen_song.c:171 msgid "Song viewer" msgstr "Переглядач пісень" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "Статистика MPD" #: src/screen_song.c:410 msgid "Selected song" msgstr "Вибрана пісня" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "Пісня, що зараз програється" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d кбіт/с" #: src/status_bar.c:121 msgid "Playing:" msgstr "Програється:" #: src/status_bar.c:124 msgid "[Paused]" msgstr "[Призупинено]" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "Гучність недоступна" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "Гучність %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "Екран конфігурації клавіш" #: src/command.c:66 msgid "Quit" msgstr "Вийти" #: src/command.c:70 msgid "Move cursor up" msgstr "Перемістити курсор доверху" #: src/command.c:72 msgid "Move cursor down" msgstr "Перемістити курсор донизу" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "Перемістити курсор на початок екрану" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "Перемістити курсор до середини екрану" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "Перемістити курсор в кінець екрану" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "Перемістити курсор на початок переліку" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "Перемістити курсор в кінець переліку" #: src/command.c:84 msgid "Page up" msgstr "Сторінка догори" #: src/command.c:86 msgid "Page down" msgstr "Сторінка донизу" #: src/command.c:88 msgid "Range selection" msgstr "Вибір обсягу" #: src/command.c:90 msgid "Scroll down one line" msgstr "Прогорнути один рядок донизу" #: src/command.c:92 msgid "Scroll up one line" msgstr "Прогорнути один рядок догори" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "Прогорнути півекрану догори" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "Прогорнути півекрану донизу" #: src/command.c:98 msgid "Select currently playing song" msgstr "Вибрати пісню, що зараз програється" #: src/command.c:103 msgid "Help screen" msgstr "Екран допомоги" #: src/command.c:112 msgid "Play/Enter directory" msgstr "Програти чи увійти до каталогу" #: src/command.c:114 msgid "Pause" msgstr "Призупинити" #: src/command.c:116 msgid "Stop" msgstr "Зупинити" #: src/command.c:118 msgid "Crop" msgstr "Обрізати" #: src/command.c:120 msgid "Next track" msgstr "Наступна доріжка" #: src/command.c:122 msgid "Previous track" msgstr "Попередня доріжка" #: src/command.c:124 msgid "Seek forward" msgstr "Шукати попереду" #: src/command.c:126 msgid "Seek backward" msgstr "Шукати позаду" #: src/command.c:128 msgid "Increase volume" msgstr "Збільшити гучність" #: src/command.c:130 msgid "Decrease volume" msgstr "Зменшити гучність" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "Вибрати чи зняти виділення пісні в переліку програвання" #: src/command.c:134 msgid "Select all listed items" msgstr "Вибрати всі перелічені елементи" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "Видалити пісню з переліку програвання" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "Перемкнути режим повторення" #: src/command.c:144 msgid "Toggle random mode" msgstr "Перемкнути випадковий режим" #: src/command.c:146 msgid "Toggle single mode" msgstr "Перемкнути режим повторення однієї пісні" #: src/command.c:148 msgid "Toggle consume mode" msgstr "Перемкнути режим вичерпання" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "Перемкнути режим плавного переходу" #: src/command.c:152 msgid "Start a music database update" msgstr "Розпочати оновлення бази даних музики" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "Додати url-посилання чи файл до переліку програвання" #: src/command.c:159 msgid "Go to root directory" msgstr "Перейти до кореневої теки" #: src/command.c:161 msgid "Go to parent directory" msgstr "Перейти до батьківської теки" #: src/command.c:164 msgid "Locate song in browser" msgstr "Визначити розміщення пісні в оглядачі" #: src/command.c:168 msgid "Move item up" msgstr "Перемістити елемент догори" #: src/command.c:170 msgid "Move item down" msgstr "Перемістити елемент донизу" #: src/command.c:172 msgid "Refresh screen" msgstr "Оновити екран" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "Перемкнути режим пошуку" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "Перемкнути режим автоматичного центрування" #: src/command.c:188 msgid "Next screen" msgstr "Наступний екран" #: src/command.c:190 msgid "Previous screen" msgstr "Попередній екран" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "Поміняти останні екрани" #: src/command.c:197 msgid "Forward find" msgstr "Знайти попереду" #: src/command.c:199 msgid "Forward find next" msgstr "Знайти попереду наступне" #: src/command.c:201 msgid "Backward find" msgstr "Знайти позаду" #: src/command.c:203 msgid "Backward find previous" msgstr "Знайти позаду попереднє" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "Перейти до" #: src/command.c:214 msgid "Artist screen" msgstr "Екран виконавців" #: src/command.c:220 msgid "Change search mode" msgstr "Змінити режим пошуку" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "Переглянути вибрану та пісню, що зараз програється" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "Припинити дію" #: src/command.c:234 msgid "Update Lyrics" msgstr "Оновити текст пісні" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "Не визначений" #: src/command.c:292 msgid "Space" msgstr "Space" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Up" #: src/command.c:302 msgid "Down" msgstr "Down" #: src/command.c:304 msgid "Left" msgstr "Left" #: src/command.c:306 msgid "Right" msgstr "Right" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "Клавіша %s призначена до %s та %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "Невідома команда" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "Застереження: невідоме поле кольору - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "Терміналу бракує підтримки зміни кольорів" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "Терміналу бракує підтримки можливостей кольорів" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "Помилка" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "Неправильне визначення гарячої клавіші" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "Невідома команда" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "Незавершена конфігурація гарячих клавіш" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "Неправильний тип показу часу" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "Відсутній \"=\"" #: src/conf.c:253 msgid "Bad color name" msgstr "Неправильна назва кольору" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "Незавершене визначення кольору" #: src/conf.c:269 msgid "Invalid number" msgstr "Неправильне число" #: src/conf.c:277 msgid "Malformed color definition" msgstr "Неправильне визначення кольору" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "Невідома назва екрану" #: src/conf.c:339 msgid "Invalid search mode" msgstr "Помилковий режим пошуку" #: src/conf.c:362 msgid "Unknown search mode" msgstr "Невідомий режим пошуку" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "Невідомий конфігураційний параметр" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "Oleksandr Kovalenko " #: src/list_window.c:575 msgid "Range selection disabled" msgstr "Вибір обсягу вимкнений" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "Вибір обсягу увімкнений" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Видалити перелік програвання %s [%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "Помилка: екран занадто маленький" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Застереження: невідомий колір - %s\n" #~ msgid "Connected to %s" #~ msgstr "Встановлене з'єднання з %s" #~ msgid "Shuffled playlist" #~ msgstr "Перемішаний перелік програвання" #~ msgid "Cleared playlist" #~ msgstr "Очищений перелік програвання" #~ msgid "Save playlist as" #~ msgstr "Зберегти перелік програвання як" #~ msgid "Playlist" #~ msgstr "Перелік програвання" #~ msgid "Playlist on %s" #~ msgstr "Перелік програвання %s" #~ msgid "Playlist screen" #~ msgstr "Екран переліку програвання" #~ msgid "Shuffle playlist" #~ msgstr "Перемішати перелік програвання" #~ msgid "Clear playlist" #~ msgstr "Очистити перелік програвання" #~ msgid "Save playlist" #~ msgstr "Зберегти перелік програвання" ncmpc-0.27/po/zh_CN.po0000644000076400001440000006160213064033560011447 00000000000000# Simplified Chinese translation for ncmpc # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the ncmpc package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2017-03-20 21:11+0100\n" "PO-Revision-Date: 2011-05-12 15:00+0000\n" "Last-Translator: snowdream \n" "Language-Team: Simplified Chinese \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" #: src/i18n.h:42 msgid "y" msgstr "y" #: src/i18n.h:43 msgid "n" msgstr "n" #: src/main.c:154 src/main.c:173 msgid "unknown" msgstr "" #: src/main.c:193 #, c-format msgid "Connecting to %s... [Press %s to abort]" msgstr "连接到 %s... [按 %s 键取消]" #: src/main.c:214 #, fuzzy, c-format msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "错误: MPD版本%d.%d.%d过低(需要 %s)" #: src/main.c:339 #, c-format msgid "press %s for the key editor" msgstr "按 %s 编辑快捷键" #: src/player_command.c:174 src/screen_queue.c:739 msgid "Shuffled queue" msgstr "" #: src/player_command.c:184 msgid "Cleared queue" msgstr "" #: src/screen.c:158 msgid "Repeat mode is on" msgstr "重复播放 开" #: src/screen.c:159 msgid "Repeat mode is off" msgstr "重复播放 关" #: src/screen.c:163 msgid "Random mode is on" msgstr "随机播放 开" #: src/screen.c:164 msgid "Random mode is off" msgstr "随机播放 关" #. "single" mode means #. that MPD will #. automatically stop #. after playing one #. single song #: src/screen.c:173 msgid "Single mode is on" msgstr "单曲播放 开" #: src/screen.c:174 msgid "Single mode is off" msgstr "单曲播放 关" #. "consume" mode means #. that MPD removes each #. song which has #. finished playing #: src/screen.c:182 msgid "Consume mode is on" msgstr "消除模式 开" #: src/screen.c:183 msgid "Consume mode is off" msgstr "消除模式 关" #: src/screen.c:186 #, c-format msgid "Crossfade %d seconds" msgstr "淡入淡出 %d 秒" #: src/screen.c:198 msgid "Database updated" msgstr "数据库已更新" #: src/screen.c:256 msgid "Find mode: Wrapped" msgstr "查找模式: 循环" #: src/screen.c:257 msgid "Find mode: Normal" msgstr "查找模式: 普通" #: src/screen.c:262 msgid "Auto center mode: On" msgstr "自动居中模式: 开" #: src/screen.c:263 msgid "Auto center mode: Off" msgstr "自动居中模式: 关" #: src/screen_artist.c:72 src/screen_artist.c:354 msgid "All tracks" msgstr "全部音轨" #: src/screen_artist.c:386 #, c-format msgid "All artists" msgstr "全部艺术家" #: src/screen_artist.c:391 #, c-format msgid "Albums of artist: %s" msgstr "%s 的专辑:" #: src/screen_artist.c:400 #, c-format msgid "All tracks of artist: %s" msgstr "%s 的所有曲目" #: src/screen_artist.c:403 #, c-format msgid "Album: %s - %s" msgstr "专辑: %s - %s" #: src/screen_artist.c:407 #, c-format msgid "Tracks of no album of artist: %s" msgstr "艺术家的无专辑曲目: %s" #: src/screen_artist.c:452 #, c-format msgid "Adding album %s..." msgstr "添加专辑 %s..." #: src/screen_artist.c:454 #, c-format msgid "Adding %s..." msgstr "添加 %s..." #: src/screen_browser.c:127 #, c-format msgid "Loading playlist %s..." msgstr "加载播放列表 %s..." #: src/screen_browser.c:168 src/screen_browser.c:261 src/screen_browser.c:286 #, fuzzy, c-format msgid "Adding '%s' to queue" msgstr "添加 '%s' 到播放列表" #: src/screen_client.c:41 msgid "Database update running..." msgstr "正在更新数据库..." #: src/screen_client.c:49 #, c-format msgid "Database update of %s started" msgstr "开始更新数据库 %s" #: src/screen_client.c:52 msgid "Database update started" msgstr "更新数据库中" #: src/screen_chat.c:59 #, c-format msgid "" "connected to MPD %u.%u.%u (you need at least \n" "version 0.17.0 to use the chat feature)" msgstr "" #: src/screen_chat.c:177 msgid "Your message" msgstr "" #: src/screen_chat.c:186 msgid "Message could not be sent" msgstr "" #: src/screen_chat.c:199 src/title_bar.c:91 msgid "Chat" msgstr "" #: src/screen_find.c:29 msgid "Find" msgstr "查找" #: src/screen_find.c:30 msgid "Find backward" msgstr "查找前一个" #: src/screen_find.c:31 msgid "Jump" msgstr "跳转" #: src/screen_find.c:82 #, c-format msgid "Unable to find '%s'" msgstr "找不到 '%s'" #. NOTE: if one day a translator decides to use a multi-byte character #. for one of the yes/no keys, we'll have to parse it properly #: src/screen_utils.c:80 #, fuzzy, c-format msgid "%s [%s/%s] " msgstr "替换 %s [%s/%s]? " #: src/screen_utils.c:121 msgid "Password" msgstr "密码" #. query the user for a filename #: src/screen_queue.c:249 msgid "Save queue as" msgstr "" #: src/screen_queue.c:282 #, fuzzy, c-format msgid "Replace %s?" msgstr "替换 %s [%s/%s]? " #. translators: a dialog was aborted by the user #: src/screen_queue.c:289 src/screen_file.c:220 src/screen_keydef.c:271 #: src/screen_lyrics.c:370 msgid "Aborted" msgstr "已放弃" #. success #: src/screen_queue.c:313 #, c-format msgid "Saved %s" msgstr "保存到 %s" #. get path #: src/screen_queue.c:390 msgid "Add" msgstr "增加" #: src/screen_queue.c:497 src/title_bar.c:76 msgid "Queue" msgstr "" #: src/screen_queue.c:499 #, c-format msgid "Queue on %s" msgstr "" #. translators: the "delete" command is only possible #. for playlists; the user attempted to delete a song #. or a directory or something else #: src/screen_file.c:206 msgid "Deleting this item is not possible" msgstr "此项目不能被删除" #: src/screen_file.c:213 #, fuzzy, c-format msgid "Delete playlist %s?" msgstr "删除播放列表" #. translators: MPD deleted the playlist, as requested by the #. user #: src/screen_file.c:233 msgid "Playlist deleted" msgstr "播放列表已删除" #. translators: caption of the browser screen #: src/screen_file.c:287 src/title_bar.c:77 msgid "Browse" msgstr "目录" #: src/screen_search.c:46 msgid "artist" msgstr "艺术家" #: src/screen_search.c:47 msgid "album" msgstr "专辑" #: src/screen_search.c:48 msgid "title" msgstr "标题" #: src/screen_search.c:49 msgid "track" msgstr "曲目" #: src/screen_search.c:50 msgid "name" msgstr "名称" #: src/screen_search.c:51 msgid "genre" msgstr "流派" #: src/screen_search.c:52 msgid "date" msgstr "日期" #: src/screen_search.c:53 msgid "composer" msgstr "作曲" #: src/screen_search.c:54 msgid "performer" msgstr "歌手" #: src/screen_search.c:55 msgid "comment" msgstr "注释" #: src/screen_search.c:62 msgid "file" msgstr "文件" #: src/screen_search.c:80 src/screen_song.c:47 msgid "Title" msgstr "标题" #: src/screen_search.c:81 src/screen_song.c:46 src/title_bar.c:79 msgid "Artist" msgstr "艺术家" #: src/screen_search.c:82 src/screen_song.c:48 msgid "Album" msgstr "专辑" #: src/screen_search.c:83 msgid "Filename" msgstr "文件名" #: src/screen_search.c:84 msgid "Artist + Title" msgstr "艺术家 + 标题" #: src/screen_search.c:216 #, c-format msgid "Bad search tag %s" msgstr "不正确的搜索条目 %s" #: src/screen_search.c:220 #, c-format msgid "No argument for search tag %s" msgstr "搜索条目 %s 没有参数" #: src/screen_search.c:328 src/screen_help.c:150 src/title_bar.c:82 msgid "Search" msgstr "查找" #. if( pattern==NULL ) #. search_new(screen, c); #. else #: src/screen_search.c:374 #, c-format msgid "Press %s for a new search" msgstr "按 %s 开始新的搜索" #: src/screen_search.c:401 #, c-format msgid "Search: %s" msgstr "查找: %s" #: src/screen_search.c:404 #, c-format msgid "Search: Results for %s [%s]" msgstr "查找: %s [%s] 的结果" #: src/screen_search.c:408 #, c-format msgid "Search: Press %s for a new search [%s]" msgstr "查找: 按 %s 开始新的搜索 [%s]" #: src/screen_search.c:432 #, c-format msgid "Search mode: %s" msgstr "搜索模式: %s" #: src/screen_keydef.c:141 msgid "You have new key bindings" msgstr "你有新绑定的快捷键" #: src/screen_keydef.c:143 msgid "Keybindings unchanged." msgstr "取消快捷键变更." #: src/screen_keydef.c:153 #, c-format msgid "Error: Unable to create directory ~/.ncmpc - %s" msgstr "错误: 无法创建文件夹 ~/.ncmpc - %s" #: src/screen_keydef.c:164 src/screen_keydef.c:173 #, c-format msgid "Error: %s - %s" msgstr "错误 %s - %s" #: src/screen_keydef.c:171 #, c-format msgid "Wrote %s" msgstr "写入 %s" #: src/screen_keydef.c:250 msgid "Deleted" msgstr "已删除" #: src/screen_keydef.c:265 #, c-format msgid "Enter new key for %s: " msgstr "为 %s 输入新的按键: " #: src/screen_keydef.c:276 msgid "Ctrl-Space can't be used" msgstr "" #: src/screen_keydef.c:282 #, c-format msgid "Error: key %s is already used for %s" msgstr "键 %s 已经绑定到 %s" #: src/screen_keydef.c:291 #, c-format msgid "Assigned %s to %s" msgstr "分配 %s 到 %s" #: src/screen_keydef.c:317 msgid "===> Apply key bindings " msgstr "应用快捷键设置 " #: src/screen_keydef.c:319 msgid "===> Apply & Save key bindings " msgstr "应用 & 保存快捷键设置 " #: src/screen_keydef.c:347 msgid "Add new key" msgstr "添加新的键" #: src/screen_keydef.c:410 msgid "Note: Did you forget to 'Apply' your changes?" msgstr "提示: 你忘记了保存你的设置?" #: src/screen_keydef.c:417 msgid "Edit key bindings" msgstr "编辑快捷键设置" #: src/screen_keydef.c:419 #, c-format msgid "Edit keys for %s" msgstr "为 %s 编辑快捷键" #: src/screen_help.c:39 msgid "Movement" msgstr "移动" #: src/screen_help.c:84 msgid "Global" msgstr "全局设定" #: src/screen_help.c:119 src/command.c:105 #, fuzzy msgid "Queue screen" msgstr "键定义页面" #: src/screen_help.c:121 msgid "Play" msgstr "播放" #: src/screen_help.c:124 msgid "Move song up" msgstr "上移" #: src/screen_help.c:125 msgid "Move song down" msgstr "下移" #: src/screen_help.c:128 msgid "Center" msgstr "当前播放项居中显示" #: src/screen_help.c:134 src/command.c:107 msgid "Browse screen" msgstr "目录页面" #: src/screen_help.c:136 msgid "Enter directory/Select and play song" msgstr "进入选中目录/播放选中歌曲" #: src/screen_help.c:138 src/screen_help.c:153 #, fuzzy msgid "Append song to queue" msgstr "添加到播放列表" #: src/screen_help.c:140 msgid "Delete playlist" msgstr "删除播放列表" #: src/screen_help.c:148 src/command.c:218 msgid "Search screen" msgstr "查找页面" #: src/screen_help.c:151 msgid "Select and play" msgstr "选中并播放" #: src/screen_help.c:160 src/command.c:228 msgid "Lyrics screen" msgstr "歌词页面" #: src/screen_help.c:162 msgid "View Lyrics" msgstr "查看歌词" #: src/screen_help.c:163 msgid "(Re)load lyrics" msgstr "(重新)加载歌词" #. to translators: this hotkey aborts the retrieval of lyrics #. from the server #: src/screen_help.c:166 msgid "Interrupt retrieval" msgstr "中断歌词下载" #: src/screen_help.c:167 msgid "Download lyrics for currently playing song" msgstr "为当前曲目下载歌词" #: src/screen_help.c:168 #, fuzzy msgid "Add or edit lyrics" msgstr "没有歌词" #: src/screen_help.c:169 msgid "Save lyrics" msgstr "保存歌词" #: src/screen_help.c:170 msgid "Delete saved lyrics" msgstr "删除已保存歌词" #: src/screen_help.c:175 src/command.c:243 msgid "Outputs screen" msgstr "输出页面" #: src/screen_help.c:177 msgid "Enable/disable output" msgstr "启用/禁用音频输出" #: src/screen_help.c:182 src/command.c:248 #, fuzzy msgid "Chat screen" msgstr "下一页面" #: src/screen_help.c:184 msgid "Write a message" msgstr "" #: src/screen_help.c:189 msgid "Keydef screen" msgstr "键定义页面" #: src/screen_help.c:191 msgid "Edit keydefs for selected command" msgstr "为选择的命令定义快捷键" #: src/screen_help.c:192 msgid "Remove selected keydef" msgstr "去除选择的快捷键设定" #: src/screen_help.c:193 #, fuzzy msgid "Add a keydef" msgstr "添加新的键" #: src/screen_help.c:194 msgid "Go up a level" msgstr "上一级" #: src/screen_help.c:195 msgid "Apply and save changes" msgstr "保存设置" #: src/screen_help.c:241 src/title_bar.c:74 msgid "Help" msgstr "帮助" #. translators: no lyrics were found for the song #: src/screen_lyrics.c:208 msgid "No lyrics" msgstr "无歌词" #: src/screen_lyrics.c:226 #, c-format msgid "Lyrics timeout occurred after %d seconds" msgstr "" #: src/screen_lyrics.c:327 src/screen_lyrics.c:336 src/screen_lyrics.c:346 #: src/title_bar.c:85 msgid "Lyrics" msgstr "歌词" #. translators: this message is displayed #. while data is retrieved #: src/screen_lyrics.c:330 msgid "loading..." msgstr "正在载入..." #: src/screen_lyrics.c:361 msgid "Editor not configured" msgstr "" #: src/screen_lyrics.c:367 msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" #: src/screen_lyrics.c:385 src/screen_lyrics.c:409 msgid "Can't start editor" msgstr "" #: src/screen_lyrics.c:411 #, c-format msgid "Editor exited unexpectedly (%d)" msgstr "" #: src/screen_lyrics.c:414 #, c-format msgid "Editor exited unexpectedly (signal %d)" msgstr "" #. lyrics for the song were saved on hard disk #: src/screen_lyrics.c:436 msgid "Lyrics saved" msgstr "歌词已保存" #: src/screen_lyrics.c:443 msgid "Lyrics deleted" msgstr "歌词已被删除" #: src/screen_lyrics.c:446 msgid "No saved lyrics" msgstr "没有歌词" #: src/screen_outputs.c:60 #, c-format msgid "Output '%s' enabled" msgstr "启用 '%s' 输出" #: src/screen_outputs.c:71 #, c-format msgid "Output '%s' disabled" msgstr "禁用 '%s' 输出" #: src/screen_outputs.c:161 src/title_bar.c:88 msgid "Outputs" msgstr "输出" #: src/screen_song.c:49 msgid "Length" msgstr "时长" #: src/screen_song.c:50 msgid "Position" msgstr "" #: src/screen_song.c:51 msgid "Composer" msgstr "作曲" #: src/screen_song.c:52 msgid "Name" msgstr "名字" #: src/screen_song.c:53 msgid "Disc" msgstr "碟片" #: src/screen_song.c:54 msgid "Track" msgstr "音轨" #: src/screen_song.c:55 msgid "Date" msgstr "日期" #: src/screen_song.c:56 msgid "Genre" msgstr "流派" #: src/screen_song.c:57 msgid "Comment" msgstr "注释" #: src/screen_song.c:58 msgid "Path" msgstr "路径" #: src/screen_song.c:59 msgid "Bitrate" msgstr "比特率" #: src/screen_song.c:60 msgid "Format" msgstr "" #: src/screen_song.c:76 msgid "Number of artists" msgstr "艺术家总数" #: src/screen_song.c:77 msgid "Number of albums" msgstr "专辑总数" #: src/screen_song.c:78 msgid "Number of songs" msgstr "歌曲总数" #: src/screen_song.c:79 msgid "Uptime" msgstr "启动时间" #: src/screen_song.c:80 msgid "Most recent db update" msgstr "最新DB更新" #: src/screen_song.c:81 msgid "Playtime" msgstr "播放时间" #: src/screen_song.c:82 msgid "DB playtime" msgstr "DB 播放时间" #: src/screen_song.c:171 msgid "Song viewer" msgstr "歌曲查看器" #: src/screen_song.c:320 msgid "MPD statistics" msgstr "MPD统计" #: src/screen_song.c:410 msgid "Selected song" msgstr "选中曲目" #: src/screen_song.c:420 msgid "Currently playing song" msgstr "当前播放曲目" #: src/screen_song.c:425 #, c-format msgid "%d kbps" msgstr "%d kbps" #: src/status_bar.c:121 msgid "Playing:" msgstr "播放中" #: src/status_bar.c:124 msgid "[Paused]" msgstr "暂停" #: src/title_bar.c:99 #, c-format msgid "Volume n/a" msgstr "音量 n/a" #: src/title_bar.c:101 #, c-format msgid "Volume %d%%" msgstr "音量 %d%%" #: src/command.c:63 msgid "Key configuration screen" msgstr "快捷键设置页面" #: src/command.c:66 msgid "Quit" msgstr "退出" #: src/command.c:70 msgid "Move cursor up" msgstr "向上移动光标" #: src/command.c:72 msgid "Move cursor down" msgstr "向下移动光标" #: src/command.c:74 msgid "Move cursor to the top of screen" msgstr "光标移到顶部" #: src/command.c:76 msgid "Move cursor to the middle of screen" msgstr "光标移到中部" #: src/command.c:78 msgid "Move cursor to the bottom of screen" msgstr "光标移到底部" #: src/command.c:80 msgid "Move cursor to the top of the list" msgstr "光标移到列表顶部" #: src/command.c:82 msgid "Move cursor to the bottom of the list" msgstr "光标移到列表底部" #: src/command.c:84 msgid "Page up" msgstr "上一页" #: src/command.c:86 msgid "Page down" msgstr "下一页" #: src/command.c:88 msgid "Range selection" msgstr "区段选择" #: src/command.c:90 msgid "Scroll down one line" msgstr "向下滚动一行" #: src/command.c:92 msgid "Scroll up one line" msgstr "向上滚动一行" #: src/command.c:94 msgid "Scroll up half a screen" msgstr "向上滚动半屏" #: src/command.c:96 msgid "Scroll down half a screen" msgstr "向下滚动半屏" #: src/command.c:98 msgid "Select currently playing song" msgstr "选择当前播放曲目" #: src/command.c:103 msgid "Help screen" msgstr "帮助页面" #: src/command.c:112 msgid "Play/Enter directory" msgstr "播放/进入 目录" #: src/command.c:114 msgid "Pause" msgstr "暂停" #: src/command.c:116 msgid "Stop" msgstr "停止" #: src/command.c:118 msgid "Crop" msgstr "剪切" #: src/command.c:120 msgid "Next track" msgstr "下一曲" #: src/command.c:122 msgid "Previous track" msgstr "上一曲" #: src/command.c:124 msgid "Seek forward" msgstr "快进" #: src/command.c:126 msgid "Seek backward" msgstr "快退" #: src/command.c:128 msgid "Increase volume" msgstr "增加音量" #: src/command.c:130 msgid "Decrease volume" msgstr "降低音量" #: src/command.c:132 #, fuzzy msgid "Select/deselect song in queue" msgstr "添加/删除选中文件到播放列表" #: src/command.c:134 msgid "Select all listed items" msgstr "选中所有列出的项" #: src/command.c:136 #, fuzzy msgid "Delete song from queue" msgstr "从播放列表中删除歌曲" #: src/command.c:138 msgid "Shuffle queue" msgstr "" #: src/command.c:140 msgid "Clear queue" msgstr "" #: src/command.c:142 msgid "Toggle repeat mode" msgstr "切换重复模式" #: src/command.c:144 msgid "Toggle random mode" msgstr "切换随机模式" #: src/command.c:146 msgid "Toggle single mode" msgstr "切换单曲模式" #: src/command.c:148 msgid "Toggle consume mode" msgstr "切换消除模式" #: src/command.c:150 msgid "Toggle crossfade mode" msgstr "切换淡入淡出模式" #: src/command.c:152 msgid "Start a music database update" msgstr "更新此数据库" #: src/command.c:154 msgid "Save queue" msgstr "" #: src/command.c:156 #, fuzzy msgid "Add url/file to queue" msgstr "添加链接/路径到播放列表" #: src/command.c:159 msgid "Go to root directory" msgstr "进入根目录" #: src/command.c:161 msgid "Go to parent directory" msgstr "进入父目录" #: src/command.c:164 msgid "Locate song in browser" msgstr "定位到音乐所在目录" #: src/command.c:168 msgid "Move item up" msgstr "上移" #: src/command.c:170 msgid "Move item down" msgstr "下移" #: src/command.c:172 msgid "Refresh screen" msgstr "刷新页面" #. translators: toggle between wrapping and non-wrapping #. search #: src/command.c:179 msgid "Toggle find mode" msgstr "切换查找模式" #. translators: the auto center mode always centers the song #. currently being played #: src/command.c:183 msgid "Toggle auto center mode" msgstr "切换自动居中模式" #: src/command.c:188 msgid "Next screen" msgstr "下一页面" #: src/command.c:190 msgid "Previous screen" msgstr "上一页面" #: src/command.c:192 msgid "Swap to most recent screen" msgstr "切换到最近一个页面" #: src/command.c:197 msgid "Forward find" msgstr "前向查找" #: src/command.c:199 msgid "Forward find next" msgstr "查找下一个" #: src/command.c:201 msgid "Backward find" msgstr "后向查找" #: src/command.c:203 msgid "Backward find previous" msgstr "查找前一个" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string #: src/command.c:208 msgid "Jump to" msgstr "跳转到" #: src/command.c:214 msgid "Artist screen" msgstr "艺术家页面" #: src/command.c:220 msgid "Change search mode" msgstr "更改搜索模式" #: src/command.c:224 msgid "View the selected and the currently playing song" msgstr "参看选择当前播放的曲目" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet #: src/command.c:232 msgid "Interrupt action" msgstr "中断后台操作" #: src/command.c:234 msgid "Update Lyrics" msgstr "更新歌词" #: src/command.c:238 msgid "Edit the current item" msgstr "" #: src/command.c:290 msgid "Undefined" msgstr "未定义的" #: src/command.c:292 msgid "Space" msgstr "Space" #: src/command.c:294 msgid "Enter" msgstr "Enter" #: src/command.c:296 msgid "Backspace" msgstr "Backspace" #: src/command.c:298 msgid "Delete" msgstr "Delete" #: src/command.c:300 msgid "Up" msgstr "Up" #: src/command.c:302 msgid "Down" msgstr "Down" #: src/command.c:304 msgid "Left" msgstr "Left" #: src/command.c:306 msgid "Right" msgstr "Right" #: src/command.c:308 msgid "Home" msgstr "Home" #: src/command.c:310 msgid "End" msgstr "End" #: src/command.c:312 msgid "PageDown" msgstr "PageDown" #: src/command.c:314 msgid "PageUp" msgstr "PageUp" #: src/command.c:316 msgid "Tab" msgstr "Tab" #: src/command.c:318 msgid "Shift+Tab" msgstr "Shift+Tab" #: src/command.c:320 msgid "Esc" msgstr "Esc" #: src/command.c:322 msgid "Insert" msgstr "Insert" #: src/command.c:326 #, c-format msgid "F%d" msgstr "" #: src/command.c:330 #, c-format msgid "Ctrl-%c" msgstr "" #: src/command.c:332 #, c-format msgid "Alt-%c" msgstr "" #: src/command.c:477 src/command.c:483 #, c-format msgid "Key %s assigned to %s and %s" msgstr "按键 %s 分配给 %s 和 %s" #: src/colors.c:156 #, fuzzy msgid "Unknown color" msgstr "未知命令" #: src/colors.c:196 #, fuzzy msgid "Unknown color field" msgstr "警告: 未知的颜色块 - %s\n" #: src/colors.c:230 msgid "Terminal lacks support for changing colors" msgstr "终端不支持改变颜色" #: src/colors.c:239 msgid "Terminal lacks color capabilities" msgstr "终端不支持彩色" #. To translators: prefix for error messages #: src/conf.c:99 msgid "Error" msgstr "错误" #: src/conf.c:107 src/conf.c:116 msgid "Malformed hotkey definition" msgstr "不正确的快捷键定义" #. the hotkey configuration contains an unknown #. command #: src/conf.c:140 msgid "Unknown command" msgstr "未知命令" #. the hotkey configuration line is incomplete #: src/conf.c:153 msgid "Incomplete hotkey configuration" msgstr "不完整的快捷键配置" #. translators: ncmpc supports displaying the #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting #: src/conf.c:189 msgid "Bad time display type" msgstr "错误的时间显示格式" #. an equals sign '=' was expected while parsing a #. configuration file line #: src/conf.c:202 msgid "Missing '='" msgstr "缺少 '='" #: src/conf.c:253 msgid "Bad color name" msgstr "错误的颜色名" #: src/conf.c:263 msgid "Incomplete color definition" msgstr "不完整的颜色定义" #: src/conf.c:269 msgid "Invalid number" msgstr "无效的数字" #: src/conf.c:277 msgid "Malformed color definition" msgstr "不正确的颜色定义" #. an unknown screen name was specified in the #. configuration file #: src/conf.c:311 msgid "Unknown screen name" msgstr "未知的页面名" #: src/conf.c:339 msgid "Invalid search mode" msgstr "无效的搜索模式" #: src/conf.c:362 msgid "Unknown search mode" msgstr "未知的搜索模式" #: src/conf.c:552 msgid "Unknown configuration parameter" msgstr "未知的配置参数" #. To translators: these credits are shown #. when ncmpc is started with "--version" #: src/options.c:232 src/options.c:235 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Gao Jie https://launchpad.net/~kindmail\n" " Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-" "deactivatedaccount\n" " snowdream https://launchpad.net/~yanghui" #: src/list_window.c:575 msgid "Range selection disabled" msgstr "禁用区段选取" #: src/list_window.c:580 msgid "Range selection enabled" msgstr "开启区段选取" #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "确定要删除列表 %s[%s/%s] ? " #~ msgid "Error: Screen too small" #~ msgstr "错误: 屏幕太小" #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "警告: 未知的颜色 - %s\n" #~ msgid "Connected to %s" #~ msgstr "连接到 %s" #~ msgid "Shuffled playlist" #~ msgstr "乱序播放列表" #~ msgid "Cleared playlist" #~ msgstr "清空播放列表" #~ msgid "Save playlist as" #~ msgstr "播放列表另存为" #~ msgid "Playlist" #~ msgstr "列表" #~ msgid "Playlist on %s" #~ msgstr "%s 上的播放列表" #~ msgid "Playlist screen" #~ msgstr "列表页面" #~ msgid "Shuffle playlist" #~ msgstr "随机列表" #~ msgid "Clear playlist" #~ msgstr "清除播放列表" #~ msgid "Save playlist" #~ msgstr "保存播放列表" #~ msgid "Volume n/a " #~ msgstr "音量 n/a " #~ msgid " Volume %d%%" #~ msgstr " 音量 %d%%" #~ msgid "Explicitly download lyrics" #~ msgstr "精确下载歌词" ncmpc-0.27/po/cs.gmo0000644000076400001440000003442113064033640011215 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$$-$"% #%/%!7%Y%k%%%%%%%% &&)&?&!S&!u&& &&&&& ' ' '8'?' X' b'6l''' '''(""(E(e(((( ((( (&)()-)33)g)%)"))))1)#*C*I*/X*******!* + #+1+G+ N+$Y+#~++ ++++*+",5,<,L,d,v, , ,$,,, --%- ,-M- l-y-----&- ....+E. q.'.+.#. /!/l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-03-02 13:59+0000 Last-Translator: Zbyněk Schwarz Language-Team: Czech Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) %d kbpsZnovu načíst text písně===> Použít & Uložit klávesové zkratky ===> Použít klávesové zkratky PřerušenoPřidatPřidat novou klávesovou zkratkuPřidávám %s...Přidávám album %s...AlbumAlbum: %s - %sAlba interpreta: %sVšichni interpretiVšechny skladbyVšechny skladby interpreta: %sAplikovat a uložit změnyInterpretInterpret + NázevObrazovka interpretů%s přiřazeno k %sAutomatické centrování vypnutoAutomatické centrování zapnutoZpětNajít zpětNajít předchozíChybné jméno barvyChybný tag vyhledávání %sChybný typ zobrazení časuBitrateProcházetObrazovka prohlíženíStředZměnit režim hledáníPoznámkaSkladatelPřipojuji se k %s... [Pro přerušení stiskněte %s]Režim konzumace vypnutRežim konzumace zapnutOříznoutPřerušení %d sekundPrávě přehrávaná skladbaČas hraní DBAktualizace databáze %s zahájenaProbíhá aktualizace databázeAktualizace databáze zahájenaDatabáze aktualizovánaDatumSnížit hlasitostOdstranitSmazat seznam skladebSmazat uložený text písněOdstraněnoSmazání této položky není možnéDiskDolůStáhnout text pro aktuálně přehrávanou skladbuUpravit klávesové zkratkyUpravit keydefs pro vybraný příkazUpravit klávesové zkratky pro %sPovolit/zakázat výstupKonecVstupVytoupit do adresáře/Vybrat a přehrát skladbuVložte novou klávesu pro %s: ChybaChyba: %s - %sChyba: Nemohu vytvořit adresář ~/.ncmpc - %sChyba: klávesa %s je již použita pro %sEscNázev souboruNajítHledat rekurzivněRežim vyhledávání: NormálníRežim vyhledávání: ZabalenýNajít vpředNajít další vpředŽánrGlobálníPřejít do nadřazeného adresářePřejít do kořenového adresářeJít o úroveň výšNápovědaObrazovka nápovědyDomůNeúplná definice barvyNeúplné nastavení klávesových zkratekZvýšit hlasitostInsertPřerušit akciPřerušit načítáníNeplatné čísloChybný vyhledávací módPřeskočitSkočit naKlávesa %s je přiřazena k %s a %sObrazovka klávesových zkratekKlávesové zkratky nezměněnyObrazovka keydefDolevaDélkaNačítám seznam skladeb: %s...Najít skladbu v prohlížečiText písněText písně smazánText písně uloženObrazovka textu písněMPD statistikyNeplatná definice barvyNeplatná definice klávesové zkratkyChybí '='Poslední aktualizace dbPosunout kurzoru dolůPřesunout kurzor na dolní okraj obrazovkyPřesunout kurzor na dno seznamuPřesunout kurzor doprostřed obrazovkyPřesunout kurzor na horní okraj obrazovkyPřesunout kurzor na vrchol seznamuPosunout kurzor nahoruPřesunout položku nížePřesunout položku výšePosunout skladbu dolůPosunout skladbu nahoruPohybNázevDalší obrazovkaNásledující stopaŽádný argument vyhledávání %sŽádný text písněŽádný uložený text písněPoznámka: Zapomněl jste 'Uplatnit' změny?Počet albPočet interpretůPočet skladebVýstup '%s' zakázánVýstup '%s' povolenVýstupyObrazovka výstupůPage downPage upPageDownPageUpHesloCestaPozastavitPřehrátPřehrát/Vstoupit do adresářePřehrávání:Seznam skladeb smazánČas přehráváníPro nové hledání stiskněte %sPředchozí obrazovkaPředchozí stopaUkončitNáhodné přehrávání je vypnutoNáhodné přehrávání je zapnutoVýběr rozsahuVýběr rozsahu vypnutVýběr rozsahu zapnutAktualizovat obrazovkuOdstranit vybraný keydefOpakování je vypnutoOpakování je zapnutoDopravaUložit text písněUloženo %sPosunout o půlku obrazovky dolůPosunout o jeden řádek dolůPosunout o půlku obrazovky nahoruPosunout o jeden řádek nahoruVyhledáváníRežim vyhledávání: %sObrazovka vyhledáváníHledání: %sHledání: Stiskněte %s pro nové hledání [%s]Hledání: Výsledky pro %s [%s]Přetočit zpětPřetočit vpředVybrat všechny vypsané položkyVybrat a přehrátZvolit právě hrající skladbuVybraná skladbaShift+TabJednoduchý mód je vypnutýJednoduchý mód je zapnutýProhlížeč skladebMezeraSpustit aktualizaci databáze skladebStopPřepnout na nedávnou obrazovkuTabTerminál postrádá podporu barevTerminál postrádá podporu změny barevNázevZapnout režim automatické centrováníPřepnout režim konzumaceZapnout režim přerušeníPřepnout na režim vyhledáváníPřepnout náhodný režimPřepnout režim opakováníPřepnout jednoduchý módSkladbaPísničky bez alba zpěváka: %sNemohu najít '%s'NedefinovánoNeznámý příkazNeznámý parametr nastaveníNeznámé jméno obrazovkyNeznámý vyhledávací módNahoruAktualizovat text písněDoba běhuZobrazit text písněZobrazit vybranou a v současnosti přehrávanou píseňHlasitost %d%%Hlasitost n/aZapsat %sNové klávesové zkratky[Pozastaveno]albuminterpretpoznámkaskladateldatumsouboržánrnačítám...nnázevumělecstiskněte %s pro otevření správce klávesových zkratektitulekstopaLaunchpad Contributions: Konki https://launchpad.net/~pavel-konkol Vojtěch Trefný https://launchpad.net/~vojtech.trefny Zbyněk Schwarz https://launchpad.net/~tsbookancmpc-0.27/po/da.gmo0000644000076400001440000003216313064033640011175 00000000000000D3l89A Qr    *8J` u  (#L`sx '.>"Fin*s!$(?E/T$   1 FT Yej /H _mry   1#B%f# "  .;D I U` ~- )3;DKTY_dy(@Ofy   %&0W s    #AFa!e*  1 D J ^ h x     0 ! !!,!5!O!X!^!e!m!v!{!! !!! !!!!!!! ####$/$7$?$P$V$e$~$ $$$$$$$ %*% I% U%c%x%%% %%%%% % %, &6&S&p&x&& &!&&&'' !'/'4'J'"R'u'z'+~''1''("('(;-(i(z( (,("(((((()-) 2)>)D)L)d)w)))))") )) )* **3* :*E*^*z**** ** **+ + +9+ S+_+u+"+ +"+"+ ,1,A,J,&R,%y, ,, ,,,,5, ,-9- I-U-l-- ----- ----- -- ..9.H.P.W.s....../!/:/A/P/X/r///////#/0 "0 /0;0W0g0 0000 0 0011!1$%1.J1y1'11(11"2(2A2_2d2 x222222222%3 53 C3P3Y3t3|33 3 3333 333 3333|3q4@$U7aQKc]Youz80&4[E/hNF9Rw",^eBM#X_q)~5%rsmDlVt. 1g`+=Oy<d;{ivJL kH:n|!G36'Tf ?\PC jZxI*S>-(b p }2AW%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.11.0 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2009-09-24 10:26+0200 Last-Translator: Niels Anker Language-Team: da Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2009-09-24 08:24+0000 X-Generator: Launchpad (build Unknown) %d kb/sek(Gen)indlæs santekster==> Anvend og gem taste bindinger ==> Anvend taste bindinger AfbrudtTilføjDefinér ny tastAlbumAlbum: %s - %sAlbum fra kunstneren: %sAlle kunstnereAlle sporAlle spor fra kunstneren: %sAnvend og gem ændringerKunstnerKunstner + TitelKunstner skærmTildelt %s til %sAutomatisk centrering er inaktivAutomatisk centrering er aktivTilbagetastSøg baglænsGentag søg baglænsDårligt farvenavnUgyldigt søge tag %sRinge tidsvisningstypeBithastighedGennemseGennemseCentrerÆndre søge tilstandKommentarKomponistForbinder til %s... [Tryk %s for at afbryde]"Consume mode" er slået fra"Consume mode" er slået tilBeskærCrossfade %d sekunderNummer der afspillesDB spilletidDatabase opdatering af %s startetDatabasen opdateres...Database opdatering startetDatabasen er opdateretDatoSænk volumenSletSlet afspilningslisteSlettetSletning af dette emne ikke muligtDiskNedDownload tekst for det nummer der afspillesModificer taste bindingerRedigér tastdefinitioner for udvalgte kommandoerModificer tast for '%s'Slå output til/fraSlutReturSkift til bibliotek/Tilføj til afspilningslisten og afspilNy tast for %s: FejlFejl: %s - %sFejl: Kunne ikke oprette mappe ~/.ncmpc - %sTasten %s anvendes allerede til %sEscFilnavnSøgSøg (baglæns)Søg normalt (start/slut)Søg (begynd forfra)SøgGentag søgGenreGlobaleGå til forældre mappeGå til rod mappenGå et niveau opHjælpHjælpHjemUfuldstændig farve definitionUfuldstændig hotkey konfigurationHæv volumenIndsætAfbryd actionAbryd hentningUgyldigt tal.Ugyldig søgetilstandSpringSpring tilTast %s tildelt %s og %sTaste konfigurations skærmTaste bindinger uændrede!Tastdefinitions skærmVenstreLængdeHenter %s...Lokaliser sang i browserenSangteksterSangtekster gemtSangtekst skærmMPD statistikForkert farve definitionForkert hotkey definitionMangler '='Seneste db opdateringFlyt markør nedFlyt cursor til bunden af skærmenFlyt cursor til bunden af listenFlyt cursor til midten af skærmenFlyt cursor til toppen af skærmenFlyt cursor til toppen af listenFlyt markør opFlyt nedFlyt opFlyt markøren ned i afspilningslistenFlyt markøren op i afspilningslistenNavigationNavnNæste skærmNæsteInter argument for søge tag %sIngen sangteksterOBS! Du glemte vel ikke at 'anvende' dine ændringer?Antal albumsAntal kunstnereAntal sangeOutput '%s' slået fraOutput '%s' slået tilOutputOutput skærmSide nedSide opPageDownPageUpAdgangskodeStiPauseAfspilAfspil/Gå til mappeAfspiller:Afspilningslisten slettetSpilletidTryk på %s for en ny søgningForrige skærmForrigeAfslutTilfældig orden slået fraTilfældig orden slået tilValg af intervalValg af interval slået fraValg af interval slået tilGenopfrisk skærmFjern valgte tastdefinitionerGentagelse er slået fraGentagelse er slået tilHøjreGem sagteksterGemt %sScroll en halv skærm nedScroll en linie nedScroll en halv skærm opScroll en linie opSøgSøg efter: %sDatabase søgningSøg: %sTryk på %s for en ny søgning [%s]Søg: Resultater for %s [%s]Søg tilbageSøg fremadVælg alle emner på listenVælg og afspilVælg den sang der spilles nuValgt nummerSkift+TabulatorSingle afspilning slået fraSingle afspilning slået tilSang viserMellemrumOpdater databasenStopSkift til seneste skærmTabTerminalen understøtter ikke farverTerminalen understøtter ikke at ændre farverTitelAktiver/deaktiver automatisk centreringAktiver/deaktiver consume valgAktiver/deaktiver crossfade mellem sangeÆndre søge tilstandAktiver/deaktiver tilfældigt valgAktiver/deaktiver gentagAktiver/deaktiver enkelt valgSporKan ikke finde '%s'UdefineretUkendt kommandoUkendt konfigurations parameterUkendt skærm navnUkendt søgetilstandOpOpdater sangteksterOppetidGennemse sangteksterVis valgte numre og det der afspillesVolumen: %d%%Volumen: n/aSkrev %sTaste bindinger opdaterede[Pause]albumkunstnerkommentarkomponistdatofilgenreindlæser...nnavnudførendetryk på %s for at redigeretitelsporLaunchpad Contributions: Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc Niels Anker https://launchpad.net/~nankerjncmpc-0.27/po/de.gmo0000644000076400001440000003454513064033640011207 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$$,$$% %%1%H%Z%r%x%%% %%%% & &&0&G&^& t&~&&&&&&&& '' 1' ;'2E'x''*''' (((!=(!_((((((( ()())5#)Y)3s))%)))3)$*A*H*6X*-** *****++1+7+#>+b+|++ ++!+1++,,.,A,Q, g, r,!},,,,,,,- (-2-B-W- g-u-)----&-$%.*J.+u.).... /'/@/I/N/_/p///8//00.0M0j0y00000000 0000 1171I1[1c111111%12>2\2c2v2%22$22 3 3 !3 -3+73c3 3 3033"3 4 4#4!C4e4 t4-~44%44&4+5.5&45[5$w55!5'556)"6L6 c6o6#66666666 7@7Q7a7 p777 7 7 7777777 7%788E8c9<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.12 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-06-21 08:19+0000 Last-Translator: Christoph Mende Language-Team: de Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) %d kbpsText (neu) laden===> Tastenbelegung speichern und anwenden ===> Tastenbelegung anwenden AbbruchHinzufügenFüge neue Taste hinzuHinzufügen %s...Füge Album %s... hinzuAlbumAlbum: %s - %sAlben des Künstlers: %sAlle KünstlerAlle StückeAlle Lieder des Künstlers: %sÄnderungen bestätigen und speichernKünstlerKünstler + TitelKünstlerdatenbank%s wurde %s zugeordnetAutozentriermodus: ausAutozentriermodus: anBackspaceRückwärtssucheRückwärtssuche fortsetzenUngültiger FarbnameTag nicht erkannt: %sUngültige AnzeigeartBitrateStöbernAnzeige durchstöbernZentrierenSuchmodus wechselnAnmerkungKomponistVerbinde mit %s… [%s drücken, um abzubrechen]Verbrauchs-Modus DeaktiviertVerbrauchs-Modus AktiviertPlaylist auf das markierte Lied reduzieren%d Sekunden CrossfadeGerade laufendes LiedDB SpielzeitDatenbankaktualisierung von %s gestartetDatenbankaktualisierung läuft...Datenbankaktualisierung gestartetDatenbank aktualisiertDatumLautstärke verringernEntfLösche PlaylistLösche gespeicherte TexteGelöschtDieses Objekt kann nicht gelöscht werdenCDUntenLiedtexte für aktuell laufendes Stück herunterladenEditiere TastenbelegungenTastenbelegung für ausgewählten Befehl bearbeitenEditiere Tasten für %sAusgabegerät aktivieren/deaktivierenEndeEnterVerzeichnis öffnen/Stück auswählen und abspielenGib neue Taste für %s ein: FehlerFehler: %s - %sFehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellenFehler: Taste %s wird bereits benutzt für %sEscDateinameSucheSuche rückwärtsSuchmodus: NormalSuchmodus: WrappedVorwärtssucheVorwärtssuche fortsetzenGenreGlobalÜbergeordnetes Verzeichnis öffnenBasis-Verzeichnis öffnenEine Ebene nach obenHilfeHilfeanzeigePos1Unvollständige FarbkonfigurationUnvollständige Konfiguration für TastenbelegungLautstärke erhöhenEinfgKommando UnterbrechenLaden unterbrechenUngültige ZahlUngültiger SuchmodusSpringe zuSpringe zuTaste %s ist %s und %s zugeordnetTastenkonfigurationsanzeigeTastenbelegung unverändert.TastenbelegungsanzeigeLinksLängeLade Playlist %s...Lied in Datenbank ortenLiedtexteTexte gelöschtLiedtext gespeichertLiedtextanzeigeMPD StatistikFehlerhafte FarbdefinitionFehlerhafte Definition der TastenbelegungEs fehlt ein '='Letzte db-AktualisierungCursor nach unten bewegenMarkierung ans Ende der Anzeige setzenMarkierung ans Ende der Liste setzenMarkierung in die Mitte der Anzeige setzenMarkierung an den Anfang der Anzeige setzenMarkierung an den Anfang der Liste setzenCursor nach oben bewegenBewege es nach untenBewege es nach obenStück nach unten bewegenStück nach oben bewegenBewegungNameNächste AnzeigeNächstes StückKein Argument für Tag %sKein Liedtext verfügbarKeine gespeicherten TexteTipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?Anzahl der AlbenAnzahl der KünstlerAnzahl der LiederAusgabegerät '%s' deaktiviertAusgabegerät '%s' aktiviertAusgabegeräteAnzeige der AusgabegeräteBild abBild aufBild abBild aufPasswortPfadPauseAbspielenAbspielen/Verzeichnis öffnenSpiele:Playlist gelöschtSpielzeitDrücke %s für eine neue SucheVorherige AnzeigeVorheriges StückBeendenZufalls-Modus ist deaktiviertZufalls-Modus ist aktiviertMehrfachauswahlMehrfachauswahl deaktiviertMehrfachauswahl aktiviertAktualisiere AnzeigeAusgewählte Tastenbelegung entfernenWiederhol-Modus ist deaktiviertWiederhol-Modus ist aktiviertRechtsLiedtext speichern%s gespeichertDie halbe Anzeige nach unten scrollenEine Zeile nach unten scrollenDie halbe Anzeige nach oben scrollenEine Zeile nach oben scrollenSucheSuchmodus: %sSuchanzeigeSuche: %sSuche: Drücke %s für eine neue Suche [%s]Suche: Ergebnisse für %s [%s]ZurückspulenVorspulenAlle angezeigten Lieder zur Playlist hinzufügenAuswählen und abspielenDerzeit spielenden Song auswählenLied anzeigenShift+TabEinzelabspiel-Modus ist deaktiviertEinzelabspiel-Modus ist aktiviertLiedbetrachterLeertasteStarte eine Aktualisierung der MusikdatenbankStopWechsle zur zuletzt benutzten AnzeigeTabDas Terminal unterstützt keine FarbenDas Terminal unterstützt keine FarbwechselTitelSchalte den Autozentrier-Modus ein/ausVerbrauchs-Modus UmschaltenSchalte Crossfade-Wiedergabe ein/ausWechsle den SuchmodusSchalte Zufallswiedergabe ein/ausSchalte Wiederholungswiedergabe ein/ausEinzelabspiel-Modus umschaltenStückTitel von keinem Album des Künstlers: %sKann '%s' nicht findenUndefiniertUnbekannter BefehlUnbekannter KonfigurationsparameterUnbekannter AnzeigennameUnbekannter SuchmodusObenLiedtext aktualisierenLaufzeitLiedtext lesenZeige das ausgewählte und das gerade laufende Lied anLautstärke %d%%Lautstärke n/a%s geschriebenDu hast eine neue Tastenbelegung[Pause]AlbumKünstlerAnmerkungKomponistDatumDateiGenrelade...nNameAufführungdrücken Sie %s für den TasteneditorTitelStückÜbersetzer Launchpad Contributions: BBO https://launchpad.net/~bbo Christoph Mende https://launchpad.net/~cmende Max Kellermann https://launchpad.net/~max-duempel Monika Brinkert https://launchpad.net/~moni-sunpig Samuel Creshal https://launchpad.net/~samuel-creshal cmdrhenner https://launchpad.net/~cmdrhennerjncmpc-0.27/po/eo.gmo0000644000076400001440000000231413064033640011207 00000000000000 01(5^ox}-    AddConnecting to %s... [Press %s to abort]Database updatedFilenameHelpTitleUnable to find '%s'datefilentranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-05-16 15:13+0000 Last-Translator: Aleksej Language-Team: Esperanto Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) AldoniKonektiĝado al %s... [Premu %s por ĉesigi]Ĝisdatigis datumbazonDosiernomoHelpoTitoloNe troviĝis "%s"datodosieronLaunchpad Contributions: Aleksej https://launchpad.net/~aleksejrs Kristjan SCHMIDT https://launchpad.net/~kristjan-eo Max Kellermann https://launchpad.net/~max-duempeljncmpc-0.27/po/es.gmo0000644000076400001440000003533213064033640011221 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$$5$*%-%E%M%g%w%%%%%% %&!&)&;&D&U&s& &&&&#&8&4'<' D'N'U' r' }'B'''.'+(J(_(5r( (2(())-)4)Q)i)q)))-)#)@)/*I*f*j*7p*+***8*)"+L+P+b+i+}+++++++ ,%,4,:,@,G,/g,,,,,,,---:-5S-- - --%---. .'.=.,Z. .%..-.*/-//1]/.// ///0)01080 K0/U000)000 11;1U1]1 q1111 111 1"1 122!72Y2k2t2z22222203F3c3}33 33333 33 4 42#4"V4 y4444/444 5'5>5S5*[555 545+56+6I6`6x66666#67 7)7(=7f7#7777 7*7 8 8 *8,48a8j8q8 y8 8888 888 8+8889:<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2012-01-30 07:08+0000 Last-Translator: Adolfo Jayme Barrientos Language-Team: es Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2013-04-11 07:56+0000 X-Generator: Launchpad (build 16550) %d kbps(Re)cargar letras===> Aplicar y guardar las teclas de acceso rápido ===> Aplicar las teclas de acceso rápido Ejecución interrumpidaAñadirIntroduce una nueva teclaAgregando %s...Agregando álbum %s...ÁlbumÁlbum: %s - %sÁlbumes del artista: %sTodos los artistasTodas las pistasTodas las pistas del artista: %sAplicar y guardar los cambiosArtistaArtista + TítuloArtistas%s asignada a %sModo autocentrado desactivadoModo autocentrado activadoBackspaceBuscar hacia atrásBuscar anteriorNombre de color incorrectoEtiqueta de búsqueda inválida: %sConfiguración incorrecta del tipo de duración mostradaBitrateNavegarNavegadorCentroCambiar el modo de búsquedaComentarioCompositorConectándose a %s... [Presiona %s para interrumpir la ejecución]Modo compacto desactivadoModo completo activadoReducir lista de canciónes a canción marcadoDesvanecimiento de %d segundosCanción reproducidaDuración de la BDHa comenzado la actualización de la base de datos %sActualizando la base de datos...Ha comenzado la actualización de la base de datosBase de datos actualizadaFechaBajar el volumenBorrarBorrar la lista de cancionesBorrar letras guardadasBorradoNo se puede borrar el elementoDiscoAbajoObtener las letras de la canción reproducidaCambia las teclas de acceso rápidoCambia las teclas de acceso rápido para el comando seleccionadoCambia las teclas para %sActivar/desactivar la salidaFinEnterAcceder al directorio/Seleccionar y reproducir canciónIntroduce tecla de acceso rápido para %s: ErrorError: %s - %sError: No se ha podido crear el directorio ~/.ncmpc - %sError: la tecla %s ya está asignada a %sEscNombre de archivoBuscarBuscar hacia atrásTipo de búsqueda: NormalTipo de búsqueda: simpleBuscar hacia adelanteBuscar siguienteEstiloGlobalEntrar al directorio superiorEntrar al directorio fundamentalSubir un nivelAyudaAyudaInicioDefinición de color incompletaConfiguración incompleta de la tecla de accesoSubir el volumenInsertarInterrumpir la acciónInterrumpir la descargaNúmero inválidoModo de búsqueda inválidoSaltarSaltar aTecla %s asignada a %s y %sConfiguración de teclasLas teclas de acceso rápido no han sido modificadas.Pantalla de teclas de accesoIzquierdaDuraciónCargando la lista %s...Encontrar la canción en el navegadorLetrasLetras borradasLetras guardadasLetrasEstadísticas del MPDDefinición de color erroneaDefinición incorrecta de la tecla de accesoFalta un '='Actualización más reciente de la BDMover el cursor hacia abajoMover el cursor hasta el final de la pantallaMover el cursor hasta el final de la listaMover el cursor hasta la mitad de la pantallaMover el cursor hasta el principio de la pantallaMover el cursor hasta el principio de la listaMover el cursor hacia arribaMoverlo abajoMoverlo arribaMover la canción abajoMover la canción arribaNavegarNombrePantalla siguienteSiguienteSin argumentos para la etiqueta de búsqueda %sNo hay letras disponiblesNo hay letras guardadasNota: Has olvidado 'Aplicar' tus cambios?Número de álbumesNúmero de artistasNúmero de cancionesSe desactivó la salida '%s'Se activó la salida '%s'SalidasPantalla de salidasPágina abajoPágina arribaPagina siguientePagina anteriorContraseñaRutaPausaReproducirReproducir/Entrar en el directorioEscuchando:Lista de reproducción borradaTiempo de reproducciónPulsa %s para una nueva búsquedaPantalla anteriorAnteriorSalirModo aleatorio desactivadoModo aleatorio activadoSelección del rangoSelección de rango desactivadaSelección de rango activadaActualizar la ventanaELiminar la tecla de acceso rápido seleccionadaModo repetición desactivadoModo repetición activadoDerechaGuardar las letras%s GuardadaBajar media pantallaBajar una lineaSubir media pantallaSubir una lineaBúsquedaModo de búsqueda: %sBúsquedaBuscar: %sBúsqueda: Pulsar %s para una nueva búsqueda [%s]Búsqueda: Resultados para %s [%s]RetrocederAvanzarSeleccionar todosSeleccionar y reproducirSeleccionar la actual canción en reproducciónCanción seleccionadaShift+TabuladorModo compacto desactivadoModo compacto activadoVisor de la canciónEspacioIniciar la actualización de la BD musicalPararVolver a la anterior pantallaTabuladorLa terminal no tiene la opcion de diferentes coloresLa terminal no soporta el cambio de coloresTítuloAlternar centrado automático de la ventanaAlternar modo completoAlternar modo crossfadeAlternar modo de búsquedaAlternar modo aleatorioAlternar modo repeticiónAlternar modo compactoPistaPistas del no álbum de artista: %sNo se pudo encontrar %sIndefinidoComando desconocidoParámetro de configuración desconocidoNombre de pantalla desconocidoNo se reconoce el modo de búsquedaArribaActualizar las letrasTiempo de ejecuciónVer letrasVer la canción seleccionada y reproducidaVolumen %d%%Volumen n/a%s creadoHas definido nuevas teclas de acceso rápido[Parado]álbumartistacomentariocompositorfechaficheroestilocargando…nnombreintérpretepressiona %s para accer al editor de teclastítulocanciónLaunchpad Contributions: Adolfo Jayme Barrientos https://launchpad.net/~fitoschido Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi Luis Miguel D.P. https://launchpad.net/~lmdp Max Kellermann https://launchpad.net/~max-duempel Monkey https://launchpad.net/~monkey-libre Paco Molinero https://launchpad.net/~franciscomolsncmpc-0.27/po/fi.gmo0000644000076400001440000001565713064033640011220 00000000000000nP Q a i m y          2 9 G (P y        ' ; "C f *k  !    / $0 U ^ c q           ( 6 E R W a -q         .EX jv  &'- 3T ht}    &=Oi p!~# &9? O;\&$$!!Fh .,57m2( ,@Ul q$ 5Fc( %.5K b$"( - ;H(Qz7,L`q       ' ($LR2 JiX;0S+ #:gb[=B.j*IQ7ZFkP 8C9Y c^GW?K"d]6!N)a'lm4/&n@ O1H TMU\(>V,A3-D`5ef%h_<E(Re)load lyricsAbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleAssigned %s to %sBrowseBrowse screenComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCrossfade %d secondsDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sFilenameFindFind backwardFind mode: NormalFind mode: WrappedGo up a levelHelpInterrupt retrievalJumpKeybindings unchanged.Keydef screenLengthLoading playlist %s...LyricsLyrics deletedLyrics savedLyrics screenMove song downMove song upNameNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Output '%s' disabledOutput '%s' enabledOutputsPasswordPlayPlaylist deletedPress %s for a new searchRandom mode is offRandom mode is onRemove selected keydefRepeat mode is offRepeat mode is onSave lyricsSaved %sSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Select and playSingle mode is offSingle mode is onTitleTrackTracks of no album of artist: %sUnable to find '%s'View LyricsWrote %sYou have new key bindingsalbumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-03-06 16:02+0000 Last-Translator: Sami Sankala Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) Lataa sanoituksetKeskeytettyLisääLisää uusi näppäinLisätään %s...Lisätään albumia %s...AlbumiLevy: %s - %sKaikki albumit esittäjältä: %sKaikki esittäjätKaikki kappaleetKaikki kappaleet esittäjältä: %sToteuta ja tallenna muutoksetEsittäjäEsittäjä + KappaleAsetettu %s %s:ksiSelaaSelailunäkymäSäveltäjäYhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]Kertakäyttökuuntelu poissa päältäKertakäyttökuuntelu päälläRistiinhäivytys %d sekuntiaTietokannan %s päivitys käynnistyiTietokannan päivitys käynnissä...Tietokannan päivitys käynnistyiTietokanta päivitettyPoista soittolistaPoista tallennettut sanoituksetPoistettuTämän kohteen poistaminen ei ole mahdollistaLevyLataa sanoitukset toistettavaan kappaleeseenMuuta näppäinasettelujaMuokkaa näppäinmäärittelyjä halutulle komennolleMuokkaa %s näppäimiäUlostulo päälle/poissaVirhe: %s - %sVirhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaanVirhe: näppäin %s on jo %s käytössäTiedostonimiEtsiEtsi alustapäinHakutyyli: NormaaliHakutyyli: 'Wrapped'Siirry taso ylöspäinOhjeKeskeytä sanoitusten noutaminenSiirryNäppäinmäärittelyjä ei muutettuNäppäinmäärittely ruutuKestoLadataan soittolistaa %s...SanoituksetSanoitukset poistettuSanoitukset talletettuSanoitusnäkymäSiirrä kappaletta alemmaksiSiirrä kappaletta ylemmäksiNimiSanoituksia ei löytynytEi talletettuja sanoituksiaHuomio: Unohditko 'Toteuttaa' muutokset?Ulostulo '%s' poissa päältäUlostulo '%s' päälläUlostulotSalasanaToistaSoittolista poistettuPaina %s uuteen hakuunSatunnaistoisto poissa päältäSatunnaistoisto on päälläPoista valittu näppäinmäärittelyJatkuva toisto on poissa päältäJatkuva toisto on päälläTallenna sanoituksetTallennettu %sHakuHakutyyli: %sHakunäkymäHaku: %sHaku: Paina %s hakeaksesi uudelleen [%s]Haku: Tulokset hauelle %s [%s]Valitse ja toistaKertatoisto on poissa päältäKertatoisto on päälläKappaleKappaleKappaleet tuntemattomista albumeista esittäjältä: %sHaku '%s' ei tuottanut tuloksiaNäytä sanoituksetKirjoitettiin %sUusia näppäinmäärittelyjälevyesittäjäkommenttisäveltäjäpäiväys:tiedostotyylilajilatautuu...enimiesittäjäPainalla %s pääset näppäineditoriinnimikappaleLaunchpad Contributions: Katja Viljakainen https://launchpad.net/~katja-viljakainen Sami Sankala https://launchpad.net/~valijumikncmpc-0.27/po/fr.gmo0000644000076400001440000003561313064033640011223 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$$=$- %9%A%I%e%}%%%%%%#%(&<&D&T&h&{&& &&&&'!'>' E'O'c'k' ' '1'''( (%(A(5[(/(0(())().)J)i)$q)))2)%)6)1*L*k*o*;w*#***;*/*+Z+`+o+ w++++++++,/,G, L,Y,"`,&,,,,,,--&-)/-"Y-5|-%---'-'.6.>.R.h.z.!.#. .&. /,$/,Q//~/-/-/! 0!,0"N0 q0!0 00 00*011831l1|11111111 22 2*21272 <2 ]2i22*222223 3#73[3{3$333334+4 =4,^4!4 4444;4#-5Q5Y5(a55,55 5566-6+46`6"e665656667$<7a7&~7(777#78 )838#E8i8~8888858 9 9 '9019 b9m9s9 {9 9999 999 9)9999;<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.14.0 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-09-23 11:15+0000 Last-Translator: Thibault Févry Language-Team: Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-01-05 20:00+0000 X-Generator: Launchpad (build 12138) %d kbps(Re)charger les paroles===> Appliquer et Enregistrer la correspondance des touches ===> Appliquer la correspondance des touches AnnuléAjouterAjouter une nouvelle toucheAjout de %s en cours...Ajout de l'album %s en cours...AlbumAlbum: %s - %sAlbums de l'artiste : %sTous les artistesToutes les pistesToutes les pistes de l'artiste : %sAppliquer et sauvegarder les changementsArtisteArtiste + TitreEcran sur l'Artiste%s assignée à %sMode d'auto-centrage: InactifMode d'auto-centrage: ActifBackspaceChercher avantChercher avant/précédentMauvais nom de couleurMauvais champ recherché %sMauvais type d'affichage du tempsDébitParcourirEcran de NavigationCentrerChanger le mode de rechercheCommentaireCompositeurConnexion à %s... [Appuyez sur %s pour annuler]Mode consommateur activéMode consommateur activéCouperFondu sur %d seconde(s)Chanson actuellement jouéeTemps de lecture de la BDMise à jour de la base de données de %s commençéeMise à jour de la base de données en cours...Début de la mise à jour de la base de donnéesBase de données mise à jourDateDiminuer le volumeSupprEffacer la liste de lectureSupprimer les paroles sauvéesEffacéImpossible d'effacer ce type d'objetDisqueBasTélécharger les paroles de la chanson en lectureEditer les correspondances de touchesÉditer les raccourcis pour la commande sélectionnéeEditer les touches pour %sActiver/désactiver une sortieFinEntréeEntrer dans le répertoire/Sélectionner et lire la chansonEntrez la nouvelle touche pour %s: ErreurErreur: %s - %sErreur : Impossible de créer le répertoire ~/.ncmpc - %sErreur: la touche %s est déja attribuée à %sEchapNom de fichierTrouverTrouver avantMode de recherche: NormalMode de recherche: EnveloppeChercher aprèsChercher après/suivantStyleGlobalesAller au répertoire supérieurAller au répertoire racineAller au dossier parentAideEcran d'aideDébutDéfinition de couleur incomplèteConfiguration de raccourci incomplèteAugmenter le volumeInserInterrompre l'actionRécupération interrompueNombre invalideMode de recherche invalideSauterAller àLa touche %s est assignée à %s et à %sEcran de configuration des touchesLa correspondance des touches n'a pas été changée.Écran du paramétrage des raccourcisGaucheDuréeChargement de la liste de lecture %s...Localiser la chanson dans le navigateurParolesParoles suppriméesParoles enregistréesEcran des parolesStatistiques MPDDéfinition de couleur malforméeDéfinition de raccourci malforméeManque '='Mise à jour de la BD la plus récenteDéplacer le curseur vers le basDéplacer le curseur vers le bas de l'écranDéplacer le curseur vers le bas de la listeDéplacer le curseur vers le milieu de l'écranDéplacer le curseur vers le haut de l'écranDéplacer le curseur vers le haut de la listeDéplacer le curseur vers le hautDéplacer l'élément vers le basDéplacer l'élément vers le hautDéplacer la chanson vers le basDéplacer la chanson vers le hautDéplacementsNomEcran suivantPiste suivantePas d'argument pour le champ recherché %sPas de parolesAucune parole sauvéeNote: Auriez-vous oublié d''Appliquer' vos changements?Nombre d'albumsNombre d'artistesNombre de chansonsSortie %s désactivéeSortie %s activéeSortiesEcran des sortiesDescendre d'une pageMonter d'une pagePageBasPageHautMot de passeCheminPauseLireJouer/Entrer dans le répertoireEn Lecture:Liste de lecture effacéeTemps de lectureAppuyez sur %s pour une nouvelle rechercheEcran précédentPiste précédenteQuitterMode Aléatoire désactivéMode Aléatoire activéSélection multi-ligneSélection multi-ligne désactivéeSélection multi-ligne activéeRafraîchir l'écranSupprimer le raccourci sélectionnéRépétition désactivéRépétition activéDroiteEnregistrer les paroles%s enregistréDéfiler d'une moitié d'écran vers le basDéfiler d'une ligne vers le basDéfiler d'une moitié d'écran vers le hautDéfiler d'une ligne vers le hautRechercherMode de recherche : %sEcran de rechercheRechercher: %sRechercher: Appuyez sur %s pour une nouvelle recherche [%s]Rechercher: Résultats pour %s [%s]ReculerAvancerSelectionner tous les éléments listésSélectionner et LireSélectionner la chanson actuellement jouéeChanson sélectionnéeShift+TabMode seul désactivéMode seul activéVisualiseur de chansonEspaceMettre à jour la base de données musicaleStopPasser à l'écran le plus récentTabLe terminal ne dispose pas de la gestion des couleursLe terminal ne supporte pas le changement de couleursTitreActiver le mode d'auto-centrageBasculer le mode consommationActiver/désactiver le mode de fonduActiver le mode de rechercheActiver/désactiver le mode aléatoireActiver/désactiver le mode répétitionBasculer le mode seulPistePiste sans album de l'artiste : %sImpossible de trouver '%s'IndéfiniCommande inconnueParamètre de configuration inconnuNom d'écran inconnuMode de recherche inconnuHautMettre à jour les parolesTemps de serviceVoir les ParolesVoir la chanson sélectionnée et actuellement jouéeVolume %d%%Volume n/a%s écritVous avez une nouvelle correspondance de touches[En Pause]albumartistecommentairecompositeurdatefichiergenreChargement...nnominterprèteappuyez sur %s pour l'éditeur de touchestitrepisteTraduction française : Yann Cézard Launchpad Contributions: Bastien Leblanc https://launchpad.net/~bass000 François Blondel https://launchpad.net/~francoisblondel Max Kellermann https://launchpad.net/~max-duempel Romain Bignon https://launchpad.net/~romain-peerfuse Thibault Févry https://launchpad.net/~thibaultfevry Yann Cézard https://launchpad.net/~eespritoncmpc-0.27/po/gl.gmo0000644000076400001440000003503713064033640011216 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$!$.$# % /%<%D%[%k%%%%%%%%&&(&=&!O&q& &&&&&/& /'<'E'\'d' }' '2'''' '"(B(/[(&()(((( ))(1)Z)%b)))'))')**5*9*3@*"t** *1*1*++#+*+=+S+k++++++++++,3 ,T,d,l,,,,,, ,&,&-C-W- `-&j----- .".7.2U.."..%."/)$/)N/&x/////0 20<0A0S0)b000*0011+1H1b1j1}11 1 1 111 11 12 262T2f2u2{222'2%23(3G3d333 333334 44 /4*:4e4 44'44745 '545N5e5w5!~555 5)5(56'6G61`66#6%667'7<7 W7c7)u7777!788908 j8 v8 88 888 8 8888 889 9%979?9E9:<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-03-25 19:34+0000 Last-Translator: Miguel Anxo Bouzada Language-Team: galician Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) %d kbps(Re)cargar as letras de cancións===> Aplicar e guardar os atallos de teclado ===> Aplicar os atallos de teclado InterrompidoEngadirEngadir un novo atalloEngadindo %s...Engadindo álbum %s...ÁlbumÁlbum: %s - %sÁlbumes do artista: %sTodos os artistasTodas as pistasTodas as pistas do artista: %sAplicar e gardar os cambiosArtistaArtista + TítuloPantalla de ArtistasAsignouse %s a %sModo de autocentrado: desactivadoModo de autocentrado: activadoRetrocesoBuscar cara atrásBuscar cara atrás, anteriorNome de cor incorrectoEtiqueta de busca errónea %sConfiguración incorrecta da duración mostradaTaxa de bitsExplorarPantalla do exploradorCentrarCambiar o modo de buscasComentarioCompositorConectandose con %s... [Prema %s para interromper]Modo completo desactivadoModo completo activadoCortarEsvaecemento cruzado %d segundosCanción que se está reproducindoDuraciónacumulada da BDComezou a actualización da base de datos de %sA base de datos estase actualizando...Comezou a actualización da base de datosBase de dados actualizadaDataDiminuir volumeBorrarBorrar a lista de reproduciónEliminar as letras de cancións gardadasBorradaNon é possíbel borrar este elementoDiscoAbaixoObter as letras da canción reproducidaEditar os atallos de tecladoEditar atallos para a orde seleccionadaEditar atallos para %sActivar/Desactivar a saídaFinEntrarEntre no cartafol/Seleccione e reproduza a canciónIntroduza un novo atallo para %s: ErroErro: %s - %sErro: Non se puido crear o cartafol ~/.ncmpc - %sErro: a tecla %s xá está sendo utilizada por %sEscNome do ficheiroBuscarBuscar cara atrásModo de busca: NormalModo de busca: LimitadaBuscar cara adianteBuscar cara adiante, seguinteXéneroGlobalIr ao cartafol paiIr ao cartafol raízSubir un nivelAxudaPantalla de axudaInicioDefinición incompleta da corConfiguraión incompleta da tecla de acceso rápidoAumentar volumeInserirInterromper a acciónInterromper a descargaNúmero incorrectoO modo de busca é incorrectoIr aIr aA tecla %s asignouse a %s e a %sPantalla de configuración dos atallosNon se cambiaron os atallos de tecladoPantalla de atallosEsquerdaDuraciónCargando a lista de reprodución %s...Atopar a canción no exploradorLetras de canciónsLetras de cancións eliminadasLetras de cancións gardadasPantalla das letras de canciónsEstatísticas do MPDDefinición incorrecta da corDefinición incorrecta da tecla de acceso rápido.Falta o signo «=»Actualización máis recente da BDMover o cursor cara embaixoMover o cursor até ao pe da pantallaMover o cursor até ao pe da listaMover o cursor até á metade da pantallaMover o cursor até ao comezo da pantallaMover o cursor até ao comezo da listaMover o cursor cara enribaMover o elemento cara abaixoMovera o elemento cara arriba.Mover a canción cara embaixoMover a canción cara enrribaMovementoNomeSeguinte pantallaSeguinte pistaSen argumento para a busca da etiqueta %sSen letras de canciónsLetras de cancións sen gardarNota: Esquecuse de «Aplicar» os cambios?Número de álbumesNúmero de artistasNúmero de canciónsDesactivouse a saída «%s»Activouse a saída «%s»SaídasPantalla de saídaPáxina embaixoPáxina enribaPáxEmbaixoPáxEnribaContrasinalRutaPausaReproducirReproducir/Entrar nun cartafolReproducindo:Lista de reprodución borradaTempo de reproduciónPrema %s para unha nova buscaPantalla anteriorPista anteriorSaírModo aleatório desactivadoModo aleatório activadoSelección do rangoA selección de rango está desactivadaA selección de rango está sactivadaActualizar a pantallaEliminar o atallo seleccionadoModo repetición desactivadoActivado o modo de repeticiónDireitaGuardar as letras de canciónsGardouse %sBaixar media pantallaBaixar unha liñaSubir media pantallaSubir unha liñaBuscarModo da busca: %sPantalla de buscaBuscar: %sBuscar: Prema %s para unha nova busca [%s]Buscar: Resultados para %s [%s]RetrocederAvanzarSeleccionar todos os elementos da listaSeleccionar e reproducirSeleccionar a cannción actual canción en reproduciónCanción seleccionadaMaiús + TabModo compacto desactivadoModo compacto activadoVisor da canciónEspazoComezar unha actualización da BDDeterVolvar á pantalla anteriorTabuladorA terminal non ten funcionalidades de corA terminal non admite o cambio das coresTítuloAlternar o modo de autocentradoAlternar o modo completoActivar/desactivar o modo de esvaecimento cruzadoAlternar o modo de buscaActivar/desactivar o modo aleatorioActivar/desactivar o modo repeticiónAlternar o modo compactoPistaPistas de ningún álbum do artista: %sNon se puido atopar «%s»Sen definirOrde descoñecidaParámetro de configuración descoñecidoNome de pantalla descoñecidoModo de busca descoñecidoArribaActualizar as letras de canciónsTempo de execuciónVer as letras de canciónsVer a canción seleccionada e a que se está a reproducirVolume %d%%Volume n/aEscribiuse %sTen novos atallos de teclado[En Pausa]álbumartistacomentáriocompositordataficheiroxénerocargando...nnomeinterpreteprema %s para ir ao editor de atallostítulopistaashtophet Launchpad Contributions: Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi Miguel Anxo Bouzada https://launchpad.net/~mbouzadasncmpc-0.27/po/he.gmo0000644000076400001440000003432313064033640011205 00000000000000<3\()1 Ab{     (:P e o}  (<Pch} ."6Y^*c!$/5/D$t   ! 6D IUZv8 O]by   #+%O#u "  $- 2 >I g-q $-4=BHMbk|)8Obt z  &@ \ jw    */J!N*p  - 3 G Q a     0 !!!8!A!G!N!V!_!d!i! o!z!|! !!!!!!!#%#0#$##$,$5$ L$W$h$$$#$ $$ $%%*)%*T% %%%%)%% &&$&6&?&X& a&.l&&&&&&''.7'1f'+'"' '''((.((W(`(0i(%(6(()0)7)*@)k) ))D)-)* * .*9*O*m*** * ***++!+1+8++W++++"+++ + , ,2,&Q,x, ,%,, ,, -$- ;--\- -;--1-5.&P.1w.5...//1/ J/U/ Z/h/(|//://0)0 =0^0 v00 00 00 00000 1 171(I1r111 1 112!2@2P2k22 22 222!3#23 V3a3y33.3.3344-4#=4 a4 o4y4444<455-5545)j55$55556-6F6 _6"j666%666 7#7@7T7.o777 7#7 7 77 8 8 8)8 28 <8I8N8S8!\8~8 8?88@$U7aQKb]Ynty80&4[E/gNF9Rv",^dB~M#X_p)}5%qrlDkVs. 1f`+=Ox<c;zhuJL jH:m{!G36'Te ?\PC iZwI*S>-( o |2AW%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-09-07 20:35+0200 Last-Translator: zeltak Language-Team: he Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-09-07 18:28+0000 X-Generator: Launchpad (build Unknown) %d kbpsהטען מחדש מילים לשיר=====> ישם ושמור תצורת מקשים =====> ישם תצורת מקשים בוטלהוסףהוסף מקש חדשאלבוםאלבום:%s-%sאלבום של אומן %sכל האמניםכל השיריםכל השירים של אומן: %sישם ושמור שינוייםאומןאומן+שםמסך אומןהוקצה %s ל %sמצב מרכז אוטומטי: מופסקמצב מרכז אוטומטי: מופעלאחורהמצא אחורהמצא אחורה הבאצבע שגויחיפוש לא תקין של תגית %sתצוגת זמן שגויהביטרייטדפדףדפדף במסךמרכזשנה תצורת מסךהערהמלחוןמתחבר ל %s [לחץ על %s לביטול]מצב יחיד מופסקמצב מתכלה מופעלחתוךקרוספייד שניות %dשיר עכשוויזמן נגינה בסיס נתוניםעדכון בסיס הנתנונים החל %sעדכון בסיס הנתנונים פועל....עדכון בסיס הנתנונים החלבסיס הנתונים עודכןתאריךהנמךמחקמחק רשימת שיריםנמחקמחיקת פריט זה בלתי אפשריתדיסקלמטההורד מילים לשיר המנגן כרגעערוך את תצורת המקשיםערוך שוני מקשים לפקודות שונותערוך את המקש ל %sאשר/אסור על פלטסוףהכנסהכנס תיקיה/בחר ונגן שירהכנס מקש חדש ל %s שגיאהשגיאה: %s - %sשגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %sשגיאה: המקש %s כבר קיים ל %sescשם קובץחיפושחיפוש לאחורמצב סופי: נורמלימצב סופי: כרוךמצא קדימהמצא קדימה הבאג'אנרגלובלילך לתיקיה עליונהלך לתיקיה שורשעלה רמה אחתעזרהמסך עזרהביתהגדרת צבעים חסרההגדרת המקשים החמים חסרההגברInsertהפסק פעולהשליפת המידע הופסקהמספר לא תקיןחיפוש לא תקיןקפיצהקפוץ למקש %s מוקצה ל %s ו %sמסך קינפוג מקשיםתצורת מקשים לא שונתה.מסך שוני מקשיםשמאלהטוען רשימת שירים %s....מצא שיר בדפדפןמיליםמילים לשיר נשמרומסך מילות השירסטטיסטיקה MPDהגדרת צבעים שגויההגדרת המקשים החמים שגויהחסר '='עדכון עדכני אחרון של בסיב נתוניםהזז סמן למטההזז סמן לקצה התחתון של המסךהזז סמן לקצה התחתון של הרשימההזז סמן לאמצע של המסךהזז סמן לקצה העליון של המסךהזז סמן לקצה העליון של הרשימההזז סמן למעלההזז למטההזז למעלההזז שיר למטההזז שיר למעלהתנועהשםמסך הבארצועה הבאהאין טעון לחיפוש תגית %sאין מילים לשירהזהרה: האם שכחת 'לישם' את השינויםמספר אלבומיםמספר אומניםמספר שיריםפלט '%s' אינו אפשריפלט '%s' אפשריפלטיםמסך הפלטדף למטהדף למעלהדף למטהדף למעלהסיסמהנתיבהפסקנגןנגן/הכנס תיקיהמנגן:רשימת שירים נמחקהזמן נגינהלחץ %s לביצוע חיפוש חדשמסך קודםרצועה קודמתצא מהתוכנהמצב רנדומלי מופסקמצב רנדומלי מופעלבחירת טווחטווח בחירה מאושרטווח בחירה מבוטלרענן מסךהסר שוני מקשיםמצב חזרה מופסקמצב חזרה מופעלחמינהשמור מילים לשירשמירת %sגלול חצי מסך למטהגלול שורה אחתגלול חצי מסך למעלהגלול שורה אחת למעלהחיפושצורת חיפוש: %sחפש במסךחיפוש: %sחיפוש: לחץ %s לחיפוש חדש [%s]חיפוש: תוצאוצ חיפוש ל %s [%s]דלג אחורהדלג קדימהבחר את הכלבחר ונגןבחר בשיר שכרגע מנגןבחר שירShift+Tabמצב יחיד מופסקמצב יחיד מופעלהצגת השיררווחהתחל עדכון בסיס הנתונים המוזיקליעצורהחלף למסך אחרוןטאבהמסוף ללא יכולת תמיכה בצבעיםהמסוף ללא תמיכה בצבעיםשםהפעל מירכוז אוטומטיהפעל מצב מתכלההפעל קרוספיידהפעל מצב חיפושהפעל מצב רנדומליהפעל מצב חזרההפעל מצב יחידרצועהלא ניתן למצוא את '%s'לא מוגדרפקודה לא ידועהפרמטר קונפיג לא ידועשם מסך לא ידועמצב חיפוש לא ידועלמעלהרענן מילים לשירזמן פעילותהצג מילים לשירהראה את השיר הנבחר והמנגןווליום %d%%ב n/aנכתב %sיש תצורת מקשים חדשה[הפסקה]אלבוםאומןהערותמלחיןתאריךקובץג'אנרטוען....לאשםמבצע%s לעורך המקשים לחץשםרצועהLaunchpad Contributions: zeltak https://launchpad.net/~zeltakכןncmpc-0.27/po/hu.gmo0000644000076400001440000003415413064033640011227 00000000000000D3l89A Qr    *8J` u  (#L`sx '.>"Fin*s!$(?E/T$   1 FT Yej /H _mry   1#B%f# "  .;D I U` ~- )3;DKTY_dy(@Ofy   %&0W s    #AFa!e*  1 D J ^ h x     0 ! !!,!5!O!X!^!e!m!v!{!! !!! !!!!!!!##7#+&$ R$ _$k$$$$$ $$#$%% %'4% \% }% %%%%%& & )& 4&?&G& ^& j&Kv&&&&&'$'(C'%l''''''' ((-(3(+8(d(3(*( ((): )/D)t) y):):)) * **)*A*]*m** ***** *++$ +E+Y+`+"w++++ +6+!,+6,!b,,,!,!, ,,, --"2-U-!p--&-!-)-(.#F.j......../+/?/GP/// /// / / 00$0-040 <0J0 Z0"f0 00000 0111,1!F1&h11*11111 2#2B2$[22222 2.2.343D3%T3z3%33 333 4"4.+4 Z4"g44&4544*45&:5"a515$55556$6%76]6x666 6686 77 /7%;7a7r7x7 7 7777 7777777v7j8@$U7aQKc]Youz80&4[E/hNF9Rw",^eBM#X_q)~5%rsmDlVt. 1g`+=Oy<d;{ivJL kH:n|!G36'Tf ?\PC jZxI*S>-(b p }2AW%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2009-09-24 21:45+0000 Last-Translator: Kiszel Kristóf Language-Team: Hungarian Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-09-07 18:28+0000 X-Generator: Launchpad (build Unknown) %d kbpsDalszövegek (újra)töltése===> Alkalmaz és Menti a billentyű beállításokat ===> Billentyű beállítások használata MegszakítvaHozzáadásÚj gomb hozzáadásaAlbumAlbum: %s - %s%s előadó albumaiMinden előadóMinden szám%s előadó minden számaAlkalmaz és menti a változásokatElőadóElőadó és CímElőadó képernyő%s hozzárendelve a következőhöz: %sKözépre igazítás kikapcsolvaKözépre igazítás bekapcsolvaBackspaceKeresés hátraElőző keresése hátraHibás szín megnevezésHibás keresési elem %sHibás időkijelzési típusBitrátaTallózásTallózásKözépKereső mód váltásaMegjegyzésZeneszerzőKapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]Fogyasztó mód kiFogyasztó mód beVágásEgymásba mosás %d másodpercJelenlegi zeneTeljes adatbázis lejátszási ideje%s adatbázis frissítése elkezdődöttAdatbázis frissítés folyamatban...Adatbázis frissítés elindultAdatbázis frissítveDátumHangerő csökkentéseDeleteLejátszólista törléseTörölveEz az elem nem törölhetőLemezDownDalszöveg letöltése a jelenlegi zenéhezBillentyűk változtatásaBillentyű szerkesztése a kiválasztott parancshozGombok módosítása a következőhöz: %sKimenet engedélyezése/tiltásaEndEnterKönyvtár megadása/szám kiválasztása és lejátszásaNyomd meg az új gombot a következőhöz: %s: HibaHiba: %s - %sHiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %sHiba: %s gombot már a következő funkció használja: %sEscFájlnévKeresésKeresés visszafeléKeresési mód: normálKeresési mód: újrakezdőKeresés előreKövetkező keresése előreMűfajÁltalánosMozgás a szülő könyvtárbaMozgás a gyökér könyvtárbaEgy szinttel feljebbSúgóSegítségHomeHiányos szín megadásHiányos gyorsbillentyű definícióHangerő növeléseInsertparancs megszakításaÚjrapróbálkozás megszakításaÉrvénytelen számÉrvénytelen keresési módUgrásUgrás odaA(z) %s gomb a követlezőkhoz van rendelve: %s és %sBillentyű beállító képernyőA billentyű beállítások változatlanok.Billentyű beállító képernyőLeftHossz%s lejátszólista betöltése...Szám megtekintése a tallozóbanDalszövegekDalszövegek elmentveDalszöveg képernyőMPD statisztikaHibás szín megadásHibás gyorsbillentyű definícióHiányzó egyenlőség jelLegutóbbi adatbázis frissítésKurzormozgatás lefeléKurzor mozgatása a képernyő aljáraKurzor mozgatása a lista aljáraKurzor mozgatása a képernyő közepéreKurzor mozgatása a képernyő tetejéreKurzor mozgatása a lista tetejéreKurzormozgatás felfeléElem mozgatása leElem mozgatása felSzám mozgatása lefeléSzám mozgatása felfeléMozgásNévKövezkező képernyőKövetkező számNincs argumentuma a(z) %s keresési elemnekNincs dalszövegÉszrevétel: nem felejtetted el érvényesíteni a változtatásaidat?Albumok számaElőadók számaZenék számaKimenet tiltva: %sKimenet engedélyezve: %sKimenetekKimenetekEgy oldalt leEgy oldalt felPageDownPageUpJelszóElérési útSzüneteltetésLejátszásLejátszás/Belépés könyvtárbaAmi szól:Lejátszólista törölveLejátszási időÚj kereséshez nyomj %s gombotElőző képernyőElőző számKilépVéletlen mód kiVéletlen mód beTartomány kiválasztásaTartomány kiválasztás letiltvaTartomány kiválasztás engedélyezveKépernyő frissítéseBillentyű hozzárendelés megszűntetéseIsmétlő mód kiIsmétlő mód beRightDalszövegek mentése%s elmentveGörgetés fél képernyőnyivel leGörgetés egy sorral leGörgetés fél képernyőnyivel felGörgetés egy sorral felKeresésKeresési mód: %sKereső képernyőKeresés: %sKeresés: új kereséshez nyomj %s gombot [%s]Keresés: találatok a következőhöz %s [%s]Tekerés hátraTekerés előreMinden listázott elem kiválasztásaKiválasztás és lejátszásMost lejátszott szám kiválasztásaKiválasztott zeneShift+TabEgyszeri lejátszás mód kiEgyszeri lejátszás mód beSzám nézőSzóközA zenei adatbázis frissítésének indításaLeállításVáltás a legutóbbi képernyőreTabA terminál nem támogatja a színeketA terminál nem támogatja a színek változtatásátCímKözépre igazítás ki- és bekapcsolásaFogyasztó mód átkapcsolásaEgymásba mosás ki- és bekapcsolásaKereső mód ki- és bekapcsolásaVéletlenszerű lejátszás ki- és bekapcsolásaIsmétlő mód ki- és bekapcsolásaEgyszeri mód átkapcsolásaSzám'%s' nem találhatóMeghatározatlanIsmeretlen parancsIsmeretlen konfigurációs paraméterIsmeretlen képernyő névIsmeretlen keresési módUpDalszövegek frissítéseÜzemidőDalszövegek megtekintéseA kiválasztott és épp lejátszott szám megtekintéseHangerő %d%%Hangerő ismeretlen%s elmentveÚj billentyű beállításaid vannak[Szüneteltetve]albumelőadómegjegyzészeneszerződátumfájlműfajbetöltés...nnévelőadónyomj %s-t a szerkesztéshezcímszámLaunchpad Contributions: Kiszel Kristóf https://launchpad.net/~ulysses Laszlo Ashin https://launchpad.net/~kodestincmpc-0.27/po/it.gmo0000644000076400001440000002177513064033640011234 00000000000000|        . C O Z s           (?Sf }$",O*T!$/%$Uz   ") 8 ESbx#%# ";J Yfo t --AI Xbjsx~%8 JV_ f t      *5>GMT\ejo u  '-<Rds!"!"DLT] f-r(&'&Nu+,-;M:)#93+m  )/JQg m {'#!#*"N q .#A5[  # 0 9 > D I e s       / !9!V!p! !!! !'!!!!"&"8">"E"K"g"z" " " " """ " """""## #)#A#H#N## 4 [pA6dBYaj1{GZ,Hl8eW~?hmT+u%@MoK0ktzv:-I2U"Pqwf;|#yF7X=R]S*9J !& VN>\`Q3'Esx/(iO$C_5 r)} .<ncL^gbD%d kbps(Re)load lyricsAbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleAssigned %s to %sAuto center mode: OffAuto center mode: OnBad search tag %sBitrateBrowseCenterCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEnter directory/Select and play songEnter new key for %s: Error: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sFilenameFindFind mode: NormalFind mode: WrappedGenreGlobalGo up a levelHelpIncrease volumeInterrupt retrievalJumpKeydef screenLengthLoading playlist %s...LyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMost recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove song downMove song upMovementNameNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious trackQuitRandom mode is offRandom mode is onRemove selected keydefRepeat mode is offRepeat mode is onSave lyricsSaved %sSearchSearch screenSearch: %sSelect all listed itemsSelect and playSelected songSingle mode is offSingle mode is onSong viewerStopTitleTrackUnable to find '%s'UptimeView LyricsVolume %d%%Volume n/aWrote %s[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-10-31 19:53+0000 Last-Translator: simone.sandri Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-01-05 20:00+0000 X-Generator: Launchpad (build 12138) %d kbps(Ri)caricare le lettereAnnullatoAggiungiIntroduce un nuovo tastoAggiungendo %s...Aggiungendo album %s...AlbumAlbum: %s - %sAlbum del artista: %sTutti gli artistiTutte le pisteTutte le piste del artista: %sApplicare e salvare i cambiamentiArtistaArtista + Titolo%s assegnato a %sModo di auto-centrato: disattivatoModo di auto-centrato: attivatoEtichetta di ricerca invalida: %sBitrateEsploraCentrareCommentoCompositoreCollegandosi a %s... [Preme %s per annullare]Modo consumazione disattivatoModo consumazione attivatoBrano riprodottoDurata del databaseIniziato l'aggiornamento del database %sAggiornamento del database in corso...Iniziato l'aggiornamento del database.Database aggiornatoDataAbbassa volumeRimuove la playlistRimuovere le lettereRimossoNon è possibile rimuovere questo elemento.DiscoOttenere le lettere della canzone riprodottaCambia i tasti di acceso veloceCambia i tasti di acceso veloce per il commando selezionatoCambia i tasti per %sAttivare/disattivare le usciteAccedere alla cartella/Selezionare e riprodurre la canzoneIntroduce tasto di acceso veloce per %s: Errore: %s - %sErrore: Non si ha potuto creare la cartella ~/.ncmpc - %sErrore: il tasto %s già sta assegnato a %sNome del fileCercaModo di ricerca: NormaleModo di ricerca: sempliceGeneroGlobaleSalire un livelloAiutoAlza volumeAnnullare la scarica.SaltaSchermo di tasti di accesoDurataCaricando la lista %sTestiTesti rimossiTesti salvatiLettereStatistiche del MPDAggiornamento più recente del databaseMuovi cursore in bassoMuovi cursore in fondo allo schermoMuovi cursore in fondo alla listaMuovi cursore in mezzo allo schermoMuovi cursore in cima allo schermoMuovi cursore in cima alla listaMuovi cursore in altoSposta la canzone giùSposta la canzone suMovimentoNomeProssima tracciaSenza argomenti per la etichetta di ricerca %sNon ci sono testi disponibiliNon ci sono testi salvatiNota: Hai dimenticato 'Applicare' i tuoi cambiamenti?Numero di albumsNumero di artistiNumero di braniLa uscita '%s' è disattivataLa uscita '%s' è attivataUsciteSchermo di uscitePagina sottoPagina sopraPasswordPathPausaPlayEsegui/Entra nella cartellaRiproducendo:Playlist rimossa.Tempo di riproduzionePreme %s per una nuova ricercaTraccia precedenteEsciModo randomizzato disattivatoModo randomizzato attivoRimuovere il tasto di acceso veloce selezionatoModo ripetizione disattivatoModo ripetizione attivatoSalvare le lettere%s salvatoCercaRicercaCerca: %sSeleziona tutti gli oggetti della listaSeleziona e riprodurreBrano selezionatoModo singolo disattivatoModo singolo attivatoVisore di canzoniFermaTitoloBranoNon si ha potuto trovare %sTempo in attivitàVedere le lettereVolume %d%%Volume n/a%s creato[Pausato]albumartistacommentarecompositoredatafilegenerocaricamento in corso...nnomeinterpretepreme %s per accedere al editore di tastititolotrackLaunchpad Contributions: Luis Miguel D.P. https://launchpad.net/~lmdp Max Kellermann https://launchpad.net/~max-duempel simone.sandri https://launchpad.net/~lexluxsoxencmpc-0.27/po/ko.gmo0000644000076400001440000003421613064033640011223 00000000000000D3l89A Qr    *8J` u  (#L`sx '.>"Fin*s!$(?E/T$   1 FT Yej /H _mry   1#B%f# "  .;D I U` ~- )3;DKTY_dy(@Ofy   %&0W s    #AFa!e*  1 D J ^ h x     0 ! !!,!5!O!X!^!e!m!v!{!! !!! !!!!!!!##(#$ /$ 9$C$[$b$r$$ $!$)$ $%%,2%_%% % %%%%%&/&6& J&T&i& p&Iz&&&& ''2'6R'0'3'3'"()( :(D( [(9e( ((4((1(-)J)h)l)Ar).)))8)C3*w* {********+ +(+F+ _+i+z++'+++ ++,1,I, P,>^,,(,,,,(,$-C- J- k- y----0-.(".+K.'w.%.(.. /$/2 R2s22222223#3<3C3 U3 c3/n33 33$33! 4 /4 =4G4\4 q4|4044!44+45 5B5I5h5}555555%5%696O6l6666 6 6.6 7 77.77 f7r7 y77 7777777 7=788o88@$U7aQKc]Youz80&4[E/hNF9Rw",^eBM#X_q)~5%rsmDlVt. 1g`+=Oy<d;{ivJL kH:n|!G36'Tf ?\PC jZxI*S>-(b p }2AW%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2009-10-16 17:35+0000 Last-Translator: Jay Whang Language-Team: Korean Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2009-10-19 13:36+0000 X-Generator: Launchpad (build Unknown) %d kbps가사 (다시)올리기===> 키 조합을 적용하고 저장 ===> 키 조합을 적용 중단됨더하기새로운 키 더하기앨범앨범: %s - %s아티스트의 앨범: %s모든 아티스트모든 트랙아티스트의 모든 트랙: %s적용하고 변경사항을 저장하기아티스트아티스트 + 제목아티스트 화면%s(을)를 %s(으)로 지정하였습니다.자동 가운데 방식: 꺼짐자동 가운데 방식: 켜짐Backspace뒤로 찾기뒤로 이전 찾기잘못된 색상 이름잘못된 찾기 태그 %s잘못된 시간 표시 형식비트 전송률열람열람하기 화면가운데찾기 모드 변경주석작곡가%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]소비 모드 꺼짐소비 모드 켜짐연주중인 곡만 선택곡바뀜 %d 초현재 연주중인 곡데이타베이스 연주시간%s 데이터베이스 업데이트를 시작합니다.데이터베이스 업데이트를 실행 중...데이터베이스 업데이트를 시작합니다.데이터베이스를 업데이트 하였습니다.날짜음량 낮추기지우기연주목록 지우기삭제됨이 항목을 지우는 것은 가능하지 않습니다.디스크Down현재 연주중인 노래의 가사를 다운로드키 조합 편집하기선택한 명령을 위한 키설정 편집하기%s(을)를 위한 키 편집출력 사용하기/안하기EndEnter디렉토리를 입력하고 곡을 선택하여 연주합니다.%s(을)를 위한 새 키를 입력하세요: 오류오류: %s - %s오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s오류: 키 %s(은)는 이미 %s(을)를 위하여 사용합니다.Esc파일이름찾기거꾸로 찾기찾기 방식: 보통찾기 방식: 줄 이어짐앞으로 찾기앞으로 다음 찾기장르전체상위 디렉토리로 가기루트 디렉토리로 가기한 단계 위로 가기도움말도움말 화면Home불완전한 색상 지정단축키 설정이 불완전합니다.음량 높이기Insert백그라운드 실행을 중지가사 가져오기 중지유효하지 않은 숫자잘못된 검색 모드이동직접 이동키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다.키 설정 화면키 조합을 바꾸지 않았습니다.키설정 화면Left길이연주목록 %s(을)를 올리는 중...열람 화면에 곡을 위치하기가사가사를 저장하였습니다.가사 화면MPD 통계잘못된 색상 지정잘못된 단축키 정의'=' 기호가 없습니다.가장 최근의 데이타베이스 업데이트커서를 아래로 내리기커서를 화면 맨 아래로 옮기기커서를 리스트 맨 아래로 옮기기커서를 화면 가운데로 옮기기커서를 화면 맨 위로 옮기기커서를 리스트 맨 위로 옮기기커서를 위로 올리기항목 아래로 내리기항목 위로 올리기곡을 아래로 내리기곡을 위로 올리기이동이름다음 화면다음 트랙찾기 태그 %s위한 인자가 없습니다.가사 없음주의: 변경사항 '적용하기'를 잊었나요?앨범 수아티스트 수곡 수출력 '%s'(을)를 사용 안합니다출력 '%s'(을)를 사용합니다출력출력 화면아래쪽 페이지위쪽 페이지PageDownPageUp열쇠글경로일시정지연주연주/디렉토리 입력연주중:연주목록을 삭제하였습니다.연주시간새로운 찾기를 위하여 %s(을)를 누르십시오.이전 화면이전 트랙끝내기무작위 모드 꺼짐무작위 모드 켜짐범위 선택범위 선택 기능을 사용하지 않습니다.범위 선택 기능을 사용합니다.화면 갱신하기선택한 키설정 삭제하기반복 모드 꺼짐반복 모드 켜짐Right가사 저장하기%s(으)로 저장함화면 반 아래로 내리기한 줄 아래로 내리기화면 반 위로 올리기한 줄 위로 올리기찾기찾기 방식: %s찾기 화면찾기: %s찾기: %s(을)를 눌러 새롭게 찾기 [%s]찾기: %s 결과 [%s]뒤로 찾기앞으로 찾기나열한 항목 모두 선택하기선택하고 연주현재 재생중인 곡을 선택선택한 곡Shift+Tab싱글 모드 꺼짐싱글 모드 켜짐곡 보기Space음악 데이타베이스 업데이트를 시작멈춤가장 최근 화면으로 교환Tab색상 기능이 없는 터미널입니다.색상 변경 지원이 부족한 터미널입니다.제목자동 가운데 모드 토글소비 모드 토글곡바꿈 모드 토글찾기 모드 토글무작위연주 모드 토클반복연주 모드 토클싱글 모드 토글트랙'%s'(을)를 찾을 수 없습니다.정의되지 않음알 수 없는 명령알 수 없는 설정 요소알 수 없는 화면 이름알 수 없는 검색 모드Up가사 업데이트업타임가사 보기선택하고 현재 연주중인 곡을 보기음량 %d%%음량 없음%s(을)를 썼습니다.새로운 키 조합을 지정하였습니다.[멈춰짐]앨범아티스트주석작곡가날짜파일장르올리는 중...n이름연주가키 편집기 사용을 위하여 %s(을)를 누르십시오.제목트랙Launchpad Contributions: atie https://launchpad.net/~atie-at-matrix bluejay https://launchpad.net/~jaypediayncmpc-0.27/po/nb.gmo0000644000076400001440000002344513064033640011213 00000000000000<  ";C GSYh }    &=Lbj q( -EV[kr"$"$1VZc hv   @PWhw| 2 NZp      -FWi y %4GY_ho  &   (.LQ!U*w  '1Aau x      6<BUWJRp     '5Q m y  */ ERo   .04ev {  " (07GW]c{   # . 5 N Z p     " ! !! +!,5!,b! !! !!!6!!" "&";"P"Y"`"h"n"""" """""" # #(# 1#;# ?# M#Z#!b###### # #$$$$"$4G$|$$$$ $ $$$ $%%1%C%G%\% d% p%{%%%%% % %%%% %%%%%&&&#'6N75) RS_; w>1nEe"I4yV=OQ,G{K?U!W2TbLfz|/rJ'@u^~q& Ho$d} Ya[A3m#i+t0.MpF<\c`hXlC %(jv:x8]gsD9*Bk -ZP%d kbps===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Crossfade %d secondsDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownEdit key bindingsEdit keys for %sEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryHelpHelp screenIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInvalid numberJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.LeftLengthLoading playlist %s...LyricsLyrics savedMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the top of screenMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsPage downPage upPageDownPageUpPasswordPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRefresh screenRepeat mode is offRepeat mode is onRightSaved %sSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playShift+TabSpaceStart a music database updateStopTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUpUpdate LyricsUptimeVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.11.0 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-07-03 16:34+0000 Last-Translator: Mathias Bhn Grytemark Language-Team: no Language: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-07-21 05:36+0000 X-Generator: Launchpad (build Unknown) %d kbps==> Bruk og Lagre snarveier ==> Bruk snarveier AvbruttLegg tilLegg til ny tastAlbumAlbum: %s - %sAlbumer fra artist: %sAlle artisterAlle sporAlle spor fra artist: %sArtistArtist + tittelArtistskjermSatte %s = %sAutomatisk centrering er avAutomatisk sentrering er pTilbaketastSk bakoverSk neste (bakover)Ugyldig fargenavnUgyldig tidsvisningstypeBitrateFilerFilerSentrerEndre skemodusKommentarKomponistKobler til %s... [Trykk %s for avslutte]Crossfade %d sekunderDB spilletidoppdaterer databasen ifra %sDatabasen oppdateres...Oppdaterer databasenDatabasen er oppdatertDatoDemp volumetDelSlett spillelisteSlettetKan ikke slette dette elementetPlateNedEndre tastEndre taster for '%s'EnterVelg bibliotek/Legg til spillisten og spill sangNy tast for %s: FeilFeil: %s - %sTasten %s brukes allerede for %sEscFilnavnSkSk (bakover)Sk normalt (til slutt/begynnelse)Skt rundt (starter p ny)Sk fremoverSk neste (fremover)SjangerGlobalG ett niv oppG til rotmappeHjelpHjelpUferdig fargedefinisjonUferdig hurtigtastkonfigurasjonk volumetInsAvbryt handlingUgyldig tallHoppG til%s-tasten satt til %s og %sTastaturkonfigurasjonTastatursnarveier uforandret!VenstrepilLengdeHenter spilleliste %s...SangteksterSangteksten er lagretMPD statestikkMalformert fargedefinisjonMalformert hurtigtastdefinisjonMangler '='Nyeste db oppdateringFlytt markr nedFlytt peker til toppen av skjermenFlytt markr oppFlytt nedFlytt oppFlytt den markerte sangen opp i spillelistenFlytt den markerte sangen opp i spillelistenNavigasjonNavnNeste skjermNesteIngen sangtekstOBS! Du glemte vel ikke legge til de nye endringene?Antall albumerAntall artisterAntall sangerMarkren en side nedMarkren en side oppPageDownPageUpPassordPauseStart/spill markertSpill/Velg mappeSpiller:Spillelisten slettetSpilletidTrykk p %s for ett nytt skForrige skjermForrigeAvsluttOppdater skjermbildeRepeter er avRepeter er pHyrepilLagret %sSkSk etter: %sDatabase skSk: %sTrykk p %s for ett nytt sk [%s]Sk: Resultater %s [%s]Spol/Sk tilbakeSpol/Sk framoverVelg alle i listenLegg til spillelisten og spillShift+TabMellomromOppdater databasenStoppTabTerminalen mangler sttte for fargerTerminalen mangler sttte for omdefinering av fargerTittelAutomatisk sentrering p/avCrossfade P/AvEndre skeinnstillingerRandom P/AvRepeat P/AvSporFant ikke '%s'Ikke definertUkjent kommandoUkjent konfiurasjonsparameterUkjent skjermnavnOppOppdater sangteksterOppetidVolum: %d%%Volum: n/aSkrev %sDu har nye tastatursnarveier[Pause]albumartistkommentarkomponistdatofilsjangerlaster...nnavnutvertrykk %s for rettetittelsporLaunchpad Contributions: Espen Jones https://launchpad.net/~epqr Jon Bergli Heier https://launchpad.net/~snakebite-jvnv Mathias Bhn Grytemark https://launchpad.net/~mboehn Ole R. Thorsen https://launchpad.net/~ole-rth Niels Anker https://launchpad.net/~nankerjncmpc-0.27/po/nl.gmo0000644000076400001440000000737513064033640011231 00000000000000FLa| * ? KVov(05EMRajou|)<NW^z           % + : Q ` m    +   / H \ b {           " 1 B M U ] w         $/5 = GQW_enp umD&AF% < :4,=( #"- E*B0?@)6$8.3C!7 9+5/>;'12 %d kbpsAbortedAddAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sArtistArtist + TitleBitrateBrowseCommentComposerConnecting to %s... [Press %s to abort]Database update of %s startedDatabase update running...Database update startedDatabase updatedDateDelete playlistDeletedDiscError: %s - %sFilenameFindGenreGlobalHelpJumpLoading playlist %s...LyricsMovementNameNumber of albumsNumber of artistsNumber of songsOutputsPasswordPathPlaying:Random mode is offRandom mode is onRepeat mode is offRepeat mode is onSaved %sSearchSearch: Results for %s [%s]TitleTrackUnable to find '%s'Volume %d%%Volume n/aalbumartistcommentcomposerdatefilegenreloading...nnameperformertitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-02-24 11:17+0000 Last-Translator: Tom Postma Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-04-05 17:16+0000 X-Generator: Launchpad (build Unknown) %d kbpsAfgebrokenVoeg toeAlbumAlbum: %s - %sAlbums van artiest: %sAlle artiestenAlle nummersAlle nummers van artiest: %sArtiestArtiest + TitelBitsnelheidBladerOpmerkingComponistVerbind met %s... [druk %s om af te breken]Database update van %s begonnenUpdate database draait...Database update begonnenDatabase bijgewerktDatumAfspeellijst verwijderenVerwijderdSchijfFout: %s - %sBestandsnaamVindGenreAlgemeenDocumentatieSpringLaden afspeellijst %s...SongtekstenBewegingNaamAantal albumsAantal artiestenAantal nummersUitvoerapparatenWachtwoordLocatieSpeelt:Willekeurige modus is uitWillekeurige modus is aanHerhaling modus uitHerhaling modus aanOpgeslagen %sZoekenZoeken: Resultaten voor %s [%s]TitelNummerNiet mogelijk '%s' te vindenVolume %d%%Volume n/balbumartiestopmerkingcomponistdatumbestandgenreladen...nnaamuitvoerdertitelnummerLaunchpad Contributions: Hipska https://launchpad.net/~hipska Tom Postma https://launchpad.net/~bluegen89jncmpc-0.27/po/ru.gmo0000644000076400001440000004326713064033640011246 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""Y$'h$]$F$5%F%*W%%)% %%)%&4&6P&;&&-&#','8L'6' ''*',('4(=\(((((-(!)8)HM)P)N)\6*-*/*2*1$+)V+*+++%+++0,N,A],,,M,@,N@-J-$- - .`.4w. ..S.I#/m/q/ //-///0,0G0P0?e070+0 11.18>1[w1%11!2!"2D2(`2224282H38a3 33-313 4)4A4"]4444W4!&50H5y5:5>5D 6<N6@666!74&76[7777'7>8!?88a8b8%8-#9)Q9*{9(99#9 : ):J:S: Z:g: p:{:A:::);2@;s;); ;.;,;$<.B<,q<<6<<= +=8=V=>o=6=@=8&> _> j>>>D>C>;?Y?@y?$?2?'@ :@.D@,s@,@ @0@ A2AMA9QAFAA=AO%B<uB.B-B)C-9CgC/vC#CC%C@D4CD.xD DDDDVEYEqEESE EEF FFF"F'F-FGFIF NF"XF{FF-FF<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-01-05 21:31+0100 Last-Translator: Max Arnold Language-Team: ru Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %d кбит/с(Пере)загрузить текст===> Применить и сохранить клавиатурные комбинации ===> Применить клавиатурные комбинации ПрерваноДобавитьДобавить новую клавишуДобавляется %s...Добавляется альбом %s...АльбомАльбом: %s - %sАльбомы исполнителя: %sВсе исполнителиВсе композицииВсе композиции исполнителя: %sПрименить и сохранить измененияИсполнительИсполнитель + КомпозицияЭкран исполнителейНазначено %s для %sРежим автоцентрирования: выкл.Режим автоцентрирования: вкл.BackspaceПоиск назадПродолжить поиск назадНеверное название цветаНеверный тег поиска %sНеверный тип отображения времениБитрейтНавигацияЭкран навигацииЦентрироватьИзменить поле для поискаКомментарийКомпозиторПодключение к %s... [Нажмите %s для отмены]Режим удаления после проигрывания выключенРежим удаления после проигрывания включенУдалить из плейлиста все композиции кроме текущейПлавный переход %d секундПроигрываемая композицияВремя воспроизведения базыОбновление базы %s запущеноИдёт обновление базы...Начато обновление базыБаза обновленаДатаУменьшить громкостьDeleteУдалить плейлистУдалить сохранённый текстУдаленоУдаление этого элемента невозможноДискВнизЗагрузить текст проигрываемой композицииИзменение клавиатурных комбинацийИзменить комбинации для выбранной командыИзменение клавиатурных комбинаций для %sВкл/выкл аудиовыходВ конецВводПерейти в директорию/Выбрать и проиграть композициюНажмите новую клавишу для %s: ОшибкаОшибка: %s - %sОшибка: не удалось создать директорию ~/.ncmpc - %sОшибка: клавиша %s уже используется для %sEscИмя файлаПоискПоиск назадРежим поиска: нормальныйРежим поиска: циклическийПоиск вперёдПродолжить поиск вперёдЖанрГлобальныеПерейти к родительской директорииПерейти к корневой директорииПерейти на уровень вышеПомощьЭкран помощиВ началоНеопределённое значение цветаНеопределённое значение клавиатурной комбинацииУвеличить громкостьInsertПрервать операциюПрервать загрузкуНеверное числоНеверный режим поискаПерейтиПерейти кКлавиша %s назначена для %s и %sЭкран клавиатурных комбинацийКлавиатурные комбинации не изменились.Экран клавиатурных комбинацийВлевоДлительностьЗагружается плейлист %s...Перейти к файлу композицииТекстТекст удалёнТекст сохранёнЭкран текста песниСтатистика MPDНеправильное значение цветаНеправильное значение клавиатурной комбинацииПропущен символ '='Последнее обновление базыКурсор внизПереместить курсор в низ экранаПереместить курсор в конец спискаПереместить курсор в середину экранаПереместить курсор в верх экранаПереместить курсор в начало спискаКурсор вверхПереместить внизПереместить вверхПереместить композицию внизПереместить композицию вверхПеремещениеНазваниеСледующий экранСледующая композицияНе задан критерий поиска по тегу %sТекст отсутствуетСохранённый текст отсутствуетВнимание: вы не забыли применить сделанные изменения?Количество альбомовКоличество исполнителейКоличество композицийАудиовыход '%s' выключенАудиовыход '%s' включенАудиовыходыЭкран аудиовыходовНа страницу внизНа страницу вверхPageDownPageUpПарольПутьПаузаВоспроизведениеВоспроизвести/Перейти в директориюПроигрывается:Плейлист удалёнВремя воспроизведенияНажмите %s для нового поискаПредыдущий экранПредыдущая композицияВыходСлучайный режим выключенСлучайный режим включенВыбор диапазонаВыбор диапазона выключенВыбор диапазона включенОбновить экранУдалить выбранную комбинациюПовтор выключенПовтор включенВправоСохранить текстСохранено в %sПрокрутка на половину экрана внизПрокрутка на одну строку внизПрокрутка на половину экрана вверхПрокрутка на одну строку вверхПоискПоле для поиска: %sЭкран поискаПоиск: %sПоиск: нажмите %s для поиска по полю [%s]Поиск: результаты поиска '%s' в поле [%s]Перемотка назадПеремотка вперёдДобавить все композиции в плейлистВыбрать и проигратьВыбрать текущую композициюВыбранная композицияShift+TabОдиночный режим выключенОдиночный режим включенИнформация о композицииПробелОбновить музыкальную базуОстановПоследний посещённый экранTabТерминал не поддерживает цветаТерминал не поддерживает смену цветовКомпозицияВкл/выкл режим автоцентрированияВкл/выкл режим удаления после проигрыванияВкл/выкл режим плавного переходаПереключить режим поискаВкл/выкл случайный режимВкл/выкл режим повтораВкл/выкл одиночный режимДорожкаКомпозиции исполнителя: %sНе удалось найти '%s'Не заданоНеизвестная командаНеизвестный параметр конфигурацииНеизвестное название экранаНеизвестный режим поискаВверхОбновить текстВремя работыПоказать текстПросмотр выбранной и проигрываемой композицийГромкость %d%%Громкость н/дЗаписано %sНовые клавиатурные комбинации задействованы[Пауза]albumartistcommentcomposerdatefilegenreзагружается...nnameperformer%s - редактор клавишtitletrackПеревод: Max Arnold yncmpc-0.27/po/pl.gmo0000644000076400001440000003350213064033640011222 00000000000000 3  # ' 3@SYh }   %3JYk (3 JVt"!*&Q!c$/$-R[ `n    &FVg{  )@G V cq #%#4 X"y     &0-@n  !*;D^n}!3 9ENh}  &  )6N^ | !*!LRj~   # 3 S g { ~ 0   ! !!!!!*!/!4! :!E!G! L!V!r!x!~!!u#}#*#!# ###$$'$-$=$P$a$u$$$$ $$,$+%I%Y%l%&~%'%% %% && '& 1&-<& j&& &&&& '!'='['o't'}'' '*'''1'&(1@(r((+((((2)+4) `)l)t)))))))!)*3*F* L*Y*0w* **** *++#+A+ ]+~++ +!+$+++,.,G,V,-v,,,, ,-!'-#I-"m------ ..#.3.-G.u..5...//./G/ P/q/// / / // //0,(0U0e0{0000001"1!61 X1y11 111 112#252 H29T2222&22%3-3*>3)i333"3 3+3 4'-4U4*\444444$5 35(=5f555 5555561,6^6q6 66666 6 6666 666 6'70777@7? %R 8]OI_YUlrw9|'5W0eLD:t#-ZaA}K$T[n*~6&opjBicq/ 1d\,<Mv`{xfbsHJhF ;ky"E472(Q >XNC gVuG+P=.)^!mz3@S%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenIncomplete color definitionIncomplete hotkey configurationIncrease volumeInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletrackyProject-Id-Version: ncmpc 0.19 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-07-23 21:08+0200 Last-Translator: Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); %d kbps(Prze)ładuj tekst===> Zastosuj i Zapisz wiązania klawiszy ===> Zastosuj wiązania klawiszy AnulowanoDodajDodaj nowy klawiszDodawanie %s...Dodawanie albumu %s...AlbumAlbumy: %s - %sAlbumy artysty: %sWszyscy artyściWszystkie ścieżkiWszystkie piosenki artysty: %sZastosuj i zapisz zmianyArtystaArtysta + TytułEkran artystyPrzypisano klawisz %s do %sTryb automatycznego centrowania: WyłączonyTryb automatycznego centrowania: WłączonyWyszukaj wsteczZnajdź poprzednieZła nazwa koloruNieprawidłowy wyszukiwany znacznik %sNieprawidłowy tryb wyświetlania czasuPrzepływność bitowaPrzeglądajEkran przeglądaniaWycentrujZmień tryb wyszukiwaniaKomentarzKompozytorŁączenie z %s... [Wciśnij %s by anulować]Tryb pożerania jest wyłączonyTryb pożerania jest włączonyPrzycięciePrzenikaj %d sekundObecnie odtwarzana piosenkaczas odtwarzania w bazieAktualizacja bazy %s rozpoczętaAktualizacja bazy w toku...Aktualizacja bazy rozpoczętaBaza zaktualizowanaDataPrzyciszUsuń listę odtwarzaniaUsuń zapisany tekst piosenkiUsuniętoUsunięcie tego elementu nie jest możliweDyskDółSćiagnij słowa dla obecnie odtwarzanej piosenkiEdytuj wiązania klawiszyEdytuj definicje klawiszy dla wybranego poleceniaEdytuj klawisze dla %sWłącz/wyłącz wyjściePodaj katalog/Wybierz i odtwarzaj piosenkęPodaj nowy skrót dla %s: BłądBłąd: %s - %sBłąd: Nie można stworzyć katalogu ~/.ncmpc -%sBłąd: klawisz %s już jest używany do %sNazwa plikuZnajdźZnajdź wsteczTryb wyszukiwania: NormalnyTryb wyszukiwania: ZawiniętyWyszukaj naprzódZnajdź następneRodzajGlobalnePrzejdź do nadrzędnego kataloguPrzejdź do katalogu głównegoIdź poziom wyżejPomocEkran pomocyNiekompletna definicja koloruNiekompletna konfiguracja skrótów klawiszowychZgłośnijPrzerwij zadaniePrzerwij pobieranieNieprawidłowy numerNieprawidłowy tryb wyszukiwaniaSkoczSkocz doKlawisz %s przypisany do %s oraz %sEkran konfiguracji klawiszyWiązania klawiszy niezmienione.Ekran definicji klawiszyLewoDługośćŁadowany listy odtwarzania %s...Zlokalizuj piosenkę w przeglądarceTeskt piosenkiTeskt piosenki usuniętyTekst piosenki zapisanyEkran z tekstem piosenkistatystyki MPDNieprawidłowa definicja koloruNieprawidłowa definicja skrótu klaiwszowegoBrakujący '='Ostatnia aktualizacja bazyPrzesuń kursor w dółPrzesuń kursor na koniec ekranuPrzesuń kursor na koniec listyPrzesuń kursor na środek ekranuPrzesuń kursor na początek ekranuPrzesuń kursor na początek listyPrzesuń kursor w góręPrzesuń element w dółPrzesuń element w góręPrzesuń piosenkę w dółPrzesuń piosenkę w goręPoruszanieNazwaNastępny ekranNastępna ścieżkaBrak argumentu przy wyszukiwaniu znacznika %sBrak tekstu piosenkiBrak zapisanego tesktu piosenkiInformacja: Zapomniałeś 'Zastosować' swoje zmiany?Ilość albumówIlość artystówIlość piosenekWyjście '%s' wyłączoneWyjście '%s' włączoneWyjściaEkran z wyjściami dźwiękowymiPrzesuń o stronę w dółPrzesuń o stronę do góryHasłoŚcieżkaWstrzymanieOdtwarzajOdtwarzaj/Przejdź do kataloguOdtwarzanie:Lista odtwarzania usuniętaCzas odtwarzaniaWciśnij %s by rozpocząć nowe wyszukiwaniePoprzedni ekranPoprzednia ściężkaWyjdźTryb losowy jest wyłączonyTryb losowy jest włączonyWybór zakresuWielozaznaczanie wyłączoneWielozaznaczanie włączoneOdświerz ekranUsuń wybraną definicję klawiszyTryb powtarzania jest wyłączonyTryb powtarzania jest włączonyPrawoZapisz tekst piosenkuZapisano %sPrzesuń o pół ekranu w dółPrzesuń o linijkę w dółPrzesuń o pół ekranu do góryPrzesuń o linijkę do góryZnajdźTryb szukania: %sEkran wyszukiwaniaZnajdź: %sZnajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]Znajdź: Wyniki dla %s [%s]Przewiń wsteczPrzewiń naprzódZazczacz wszystkie wylistowane pozycjeWybierz i odtwarzajZaznacz obecnie odtwarzaną piosenkęWybrana piosenkaTryb pojedynczej piosenki jest wyłączonyTryb pojedynczej piosenki jest włączonyPrzeglądarka piosenekSpacjaWłącz aktualizacje bazy piosenekZatrzymaniePrzełącz do najbardziej aktualnego ekranuTerminal nie obsługuje kolorówTerminal nie obsługuje zmiany kolorówTytułPrzełącz tryb automatycznego centrowaniaPrzełącz tryb pożeraniaPrzełącz tryb przenikaniaPrzełącz tryb wyszukiwaniaPrzełącz tryb losowyPrzełącz tryb powtarzaniaPrzełącz tryb pojedynczej piosenkiŚcieżkaŚcieżki bez albumów lub artystów: %sNie można znaleźć '%s'NiezdefiniowanyNieznane polecenieNieznany parametr konfiguracyjnyNieznana nazwa ekranuNieznany tryb wyszukiwaniaGóraZaktualizuj tekst piosenkiZobacz teskt piosenkiZobacz zaznaczone i obecnie odtwarzaną piosenkęGłóśność %d%%Głośność: b/dZapisano %sMasz nowe wiązania klawiszy[Pauza]albumartystakomentarzkompozytordataplikrodzajładowanie...nnazwawykonawcawciśnij %s by odpalić edytor klawiszytutułściezkatncmpc-0.27/po/pt_BR.gmo0000644000076400001440000003524213064033640011620 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """"""D"%%(6%_%~% %%%%%%%%&!&@&[&c&u&&'&$& && ')':'$R'w''' '' ' '.'6(3F(z(( ((+(/)(7)`)z))))))#)))0*2*9J*****2**+ +7"+,Z++++++++!+,%,,, C,P,`, f,t,y,-,,,,,--.- 4-?- ^---- -&--.$.4.K.d.y.). . ..!/"&/ I/ j/!/////0 0'0 ,0:0%I0o0010000111191I1[1l1u1|111 11 111#1 !2/2>2C2c22#2!222#3 ,3M3U3n3w3333333 323!(4J4\4"o44+44 4$4!595P53X555555*56063O6666 6(6"7!(7J7 i7w7)77777 88218 d8 p8 {8 8 888 8 8888 889 9 939;9XA9:<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-12-19 01:05+0000 Last-Translator: Jamerson Albuquerque Tiossi Language-Team: Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-01-05 20:00+0000 X-Generator: Launchpad (build 12138) X-Poedit-Country: BRAZIL X-Poedit-Language: Portuguese X-Poedit-SourceCharset: utf-8 %d kbps(Re)Carregar letra de música===> Aplicar e salvar teclas de atalho ===> Aplicar teclas de atalho AbortadoAdicionarAdicionar nova teclaAdicionando %s...Adicionando álbum %s...ÁlbumÁlbum: %s - %sÁlbuns do artista: %sTodos os artistasTodas as faixasTodas as faixas do artista: %sAplicar mudanças e salvarArtistaArtista + TítuloTela de artistaTecla %s definida para %sModo de Auto-Centralização: DesligadoModo de Auto-Centralização: LigadoBackspacePesquisa para trásPesquisa para trás - anteriorNome de cor ruimTag de pesquisa ruim %sTipo de visualização de tempo ruimTaxa de AmostragemNavegarTela de NavegaçãoCentralizarMudar modo de pesquisaComentárioCompositorConectando a %s... [Pressione %s para abortar]Modo de Deleção de Faixa Reproduzida está desligadoModo de Deleção de Faixa Reproduzida está ligadoCortarInter-mixagem de %d segundosFaixa atualmente em reproduçãoTempo de reprodução do BDAtualização do Banco de Dados %s começouAtualização de Banco de Dados em progresso...Atualização de Banco de Dados iniciadaBanco de Dados atualizadoDataAbaixar volumeDeleteDeletar Lista de ReproduçãoApagar letras salvasDeletadaDeletar este item não é possívelDiscoBaixoBaixar letra de música da faixa em reproduçãoEditar teclas de atalhoEditar a definição de teclas para o comando selecionadoEditar teclas para %sHabilitar/desabilitar saídaEndEnterAdentrar diretório/Selecionar e reproduzir trilhaEntre nova tecla para %s: ErroErro: %s - %sErro: Não foi possível criar diretório ~/.ncmpc - %sErro: tecla %s já está sendo usada para %sEscNome de ArquivoProcurarProcurar para trásModo de Busca: NormalModo de Busca: EnvolvidoPesquisa para frentePesquisa para a frente - próximoEstiloGlobalIr para diretório paiIr para raizSubir um nívelAjudaTela de AjudaHomeDefinição de cor incompletaConfiguração de teclas de atalho incompletaAumentar volumeInsertInterromper açãoInterromper buscaNúmero inválidoModo de pesquisa inválidoPularPular paraTecla %s definida para %s e %sTela de configuração de teclasTeclas de atalho inalteradas.Tela de definição de teclasEsquerdaDuraçãoCarregando Lista de Reprodução %s...Localizar musica no navegadorLetra de MúsicaLetras apagadasLetra de Música salvaTela de Letra de MúsicaEstatísticas do MPDDefinição de cor malformadaDefinição de tecla de atalho malformadaFalta '='Atualização do BD mais recenteMover cursor para baixoMover cursor para o final da telaMover cursor para o final da listaMover cursor para o meio da telaMover cursor para o topo da telaMover cursor para o topo da listaMover cursor para cimaMover item para baixoMover item para cimaMover faixa para baixoMover trilha para cimaMovimentoNomePróxima telaPróxima faixaSem argumento para tag de pesquisa %sSem letra de músicaSem letras salvasNota: Você esqueceu de 'Aplicar' suas mudanças?Número de álbunsNúmero de artistasNúmero de faixasSaída '%s' desabilitadaSaída '%s' habilitadaSaídasTela de SaídasDesce uma páginaSobe uma páginaPageDownPageUpSenhaCaminhoPauseReproduzirReproduzir/Adentrar diretórioReproduzindo:Lista de Reprodução deletadaTempo de reproduçãoPressione %s para uma nova pesquisaTela anteriorFaixa anteriorSairModo Aleatório está desligadoModo Aleatório está ligadoSeleção de IntervaloSeleção de intervalo desabilitadaSeleção de intervalo habilitadaRedesenhar telaRemover keydef selecionadoModo de Repetição está desligadoModo de Repetição está ligadoDireitaSalvar letra de música.%s salvoDescer meia telaDescer uma linhaSubir meia telaSubir uma linhaPesquisaModo de Pesquisa: %sTela de pesquisaPesquisa: %sPesquisa: Pressione %s para uma nova pesquisa [%s]Pesquisa: Resultados para %s [%s]Correr para trásCorrer para frenteSelecionar todos os itens listadosSelecionar e reproduzirSelecionar faixa atualmente em reproduçãoFaixa selecionadaShift+TabModo de Faixa Única está desligadoModo de Faixa Única está ligadoVisualizador de TrilhaEspaçoIniciar a atualização do banco de dados de faixasPararTroca para a tela mais recenteTabTerminal não tem capacidade para trabalhar com coresTerminal não tem suporte para mudar coresTítuloLiga/Desliga modo de centralização automáticaLiga/Desliga modo de deleção de faixa reproduzidaLiga/Desliga inter-mixagemLiga/Desliga modo de procuraLiga/Desliga modo aleatórioLiga/Desliga modo de repetiçãoLiga/Desliga modo de única reproduçãoFaixaFaixas sem álbuns do artista: %s'%s' não pôde ser encontradoNão-definidoComando desconhecidoParâmetro de configuração desconhecidoNome de tela desconhecidoModo de pesquisa desconhecidoCimaAtualizar letra de músicaTempo rodandoVer Letra de MúsicaVer a trilha selecionada e a em atual reproduçãoVolume %d%%Volume n/aGravei %sVocê tem novas teclas de atalho[Pausado]álbumartistacomentáriocompositordataarquivoestilocarregando...n (não)nomeintérpretepress %s para o editor de teclastítulofaixaTraduzido por Carlos Eduardo C. B. Shinagawa Launchpad Contributions: Cadu https://launchpad.net/~cadu-coelho Guilherme Lindner https://launchpad.net/~gui666 Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi Max Kellermann https://launchpad.net/~max-duempel Osni Leandro https://launchpad.net/~osniy (sim)ncmpc-0.27/po/sk.gmo0000644000076400001440000003356013064033640011230 00000000000000D3l89A Qr    *8J` u  (#L`sx '.>"Fin*s!$(?E/T$   1 FT Yej /H _mry   1#B%f# "  .;D I U` ~- )3;DKTY_dy(@Ofy   %&0W s    #AFa!e*  1 D J ^ h x     0 ! !!,!5!O!X!^!e!m!v!{!! !!! !!!!!!!##/##$ 7$A$I$_$e$t$$ $$$ $$%%"(%"K% n% x%%%%!% % && #&-& K& U&0`&&&&& &'"'#@'&d''' ''' '&''(3 (=(%[(((((1(())5$))Z))) )) ) ))*%* -*!7*!Y*{*****-** ++&+=+O+o+t+|++"+++,,!, @,L,b,t,,-, ,!,,%-#:-%^--&----.-.F.L.S.f.-u. ...... /#/:/C/ W/a/i/r/y/// // // //00 40>0X0r0000'001"1)1 >1 K1l1 11 11114 2(?2h2w2"22$22 22353I3)Q3{3'33.3(34) 454&Q4x444444 55 )5J5d55 5555555 6(6?6N6 T6 ^6 h6s6z66 6666 6666n7@$U7aQKc]Youz80&4[E/hNF9Rw",^eBM#X_q)~5%rsmDlVt. 1g`+=Oy<d;{ivJL kH:n|!G36'Tf ?\PC jZxI*S>-(b p }2AW%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.11.1 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-04-07 01:36+0000 Last-Translator: Roman Horník Language-Team: sk Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-06-19 15:12+0000 X-Generator: Launchpad (build Unknown) %d kbps(Znovu)načítať text===> Použiť & Uložiť nastavenie klávesov ===> Použiť nastavenie klávesov ZrušenéPridaťPridať nový klávesAlbumAlbum: %s - %sAlbumy od interpreta: %sVšetci interpretiVšetky stopyVšetky stopy od interpreta: %sPoužiť a uložiť zmenyInterpretInterpret + NázovOkno interpreta%s priradené k %sAutomatické centrovanie: VypnutéAutomatické centrovanie: ZapnutéBackspaceHľadať vzadPokračovať v hľadaní vzadNesprávny názov farbyZlá značka vyhľadávania %sNesprávny typ zobrazovania časuBitový tokListovaťOkno listovaniaDo streduZmeniť režim vyhľadávaniaKomentárSkladateľPripájam sa k %s... [Stlačte %s pre zrušenie]Spotrebný režim vypnutýSpotrebný režim zapnutýOrezaťPrelínanie %d sekúndMomentálne prehrávaná pieseňČas hrania databázeAktualizácia databáze %s začalaPrebieha aktualizácia databáze...Bola spustená aktualizácia databázeDatabáza aktualizovanáDátumStíšiťDeleteVymazať playlistVymazanéZmazanie tejto položky nie je možnéDiskDoleStiahnuť text pre momentálne prehrávanú pieseňUpraviť priradenie klávesovUpraviť kláves pre vybraný príkazUpraviť klávesy pre %sPovoliť/vypnúť výstupEndEnterVstúpiť do adresára/Vybrať a prehrať skladbuZadajte nový kláves pre %s: ChybaChyba: %s - %sChyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %sChyba: kláves %s je už použitý pre %sEscNázov súboruVyhľadaťVyhľadať spätneRežim vyhľadávanie: NormálnyRežim vyhľadávania: ZabalenýHľadať vpredPokračovať v hľadaní vpredŽánerGlobálnePrejsť do nadradeného adresáraPrejsť do koreňového adresáraPrejsť o úroveň vyššiePomocOkno s pomocouHomeNeúplná definícia farbyNeúplná konfigurácie klavesových skratiekPridať hlasitosťInsertAkcia prerušeniaZachytené prerušenieNeplatné čísloNeplatný režim vyhľadávaniaSkokSkok naKláves %s priradený k %s a %sOkno nastavenia klávesovPriradenie klávesov sa nezmenilo.Obrazovka s nastavením klávesVľavoDĺžkaNahrávam playlist %s...Nájsť skladbu v prehliadačiText piesneText piesne uloženýOkno textu piesneŠtatistiky MPDZle zadaná definícia farbyChybne zadaná definícia klávesovej skratkyChýba '='Najčerstvejší update databázePresunúť kurzor nadolPresunúť kurzor na spodok obrazovkyPresunúť kurzor na koniec zoznamuPresunúť kurzor do stredu obrazovkyPresunúť na vrch obrazovkyPresunúť kurzor na začiatok zoznamuPresunúť kurzor nahorPresunúť položku nadolPresunúť položku nahorPresunúť skladbu nadolPresunúť skladbu nahorPohybNázovĎalšia obrazovkaĎalšia stopaChýba argument pre značku vyhľadávania %sBez textuPoznámka: Zabudli ste 'Použiť' vaše zmeny?Počet albumovPočet interpretovPočet piesníVýstup '%s' vypnutýVýstup '%s' povolenýVýstupyObrazovka výstupovPage downPage upPageDownPageUpHesloCestaPauzaPrehrávaťPrehrať/Vstúpiť do adresáraPrehrávam:Playlist vymazanýČas hraniaStlačte %s pre nové hľadaniePredchádzajúca obrazovkaPredchádzajúca stopaUkončiťNáhodný režim vypnutýNáhodný režim zapnutýVýber rozsahuVýber rozsahu vypnutýVýber rozsahu zapnutýObnoviť obrazovkuOdstrániť vybrané nastavenie klávesRežim opakovania vypnutýRežim opakovania zapnutýVpravoUložiť text piesneUložený %sPosun o polovicu obrazovky nadolPosun o jeden riadok nadolPosun o polovicu obrazovky nahorPosun o jeden riadok nahorHľadanieRežim vyhľadávania: %sOkno vyhľadávaniaVyhľadať: %sHľadanie: Stlačte %s pre opätovné hľadanie [%s]Hľadanie: Výsledky pre reťazec %s[%s]Posunúť vzadPosunúť vpredVybrať všetky položky v zoznameVybrať a prehraťZvoľiť práve prehrávanú skladbuVybraná pieseňShift+TabJednotlivý režim vypnutýJednotlivý režim zapnutýPrehliadač piesníMedzeraSpustiť aktualizáciu hudobnej databázeStopPrepnúť na predchádzajúcu obrazovkuTabTerminál nemá schopnosti zobrazovania fariebTerminál nemá podporu pre zmenu fariebNázovPrepnúť automatický režim centrovaniaPrepnúť spotrebný režimPrepnúť režím prelínania skladiebPrepnúť režim vyhľadávaniaPrepnúť náhodný režimPrepnúť režim opakovaniaPrepnúť jednotlivý režimStopaNepodarilo sa nájsť '%s'NeurčenéNeznámy príkazNeznámy parameter konfigurácieNeznámy názov obrazovkyNeznámy režim vyhľadávaniaHoreObnoviť textUptimeZobraziť text piesneZobraziť vybranú a momentálne prehrávanú pieseňHlasitosť %d%%Hlasitosť n/aZapísané %sNastavili ste nové priradenie klávesov[Pozastavené]albuminterpretkomentárskladateľdátumsúboržánernačítam...nnázovumelecstlačte %s pre editor klávesovnázovstopaJozef Riha Launchpad Contributions: Jose Riha https://launchpad.net/~jose1711 Roman Horník https://launchpad.net/~roman.hornikancmpc-0.27/po/sv.gmo0000644000076400001440000002766313064033640011252 00000000000000\  # '39H ] it   4CUks z(;Vn"* .DH$Ns/$ & 9FX^e|  -<AIf   8DZ#k%# ", ;H Wdm r ~ -';C R\dmt}(7J\ bnw  &( D R_w   !*%+CYj}      (3<V_elt}     !(! 1!&E&L&Q&l& &&&&&& &&&"' 4'@'G'^'r' y'' ''' '''(% (F(c(%(( ( ((( (( ) )!) @)2K) ~)) ))) ) ))**&* -*7*@*F*\*l*t*********+#+ 8+ B+ O+Y+p+++++++++ , ,$,C, c, q,|, ,,,,$,0,- -)-@-Z- k-y-- --!-- --. . . . *.5.U.^.d. k. u.... ... ...../nOHq=E u/1#5m0U(t*Cd3` ]e.skpQ@vXh7TzKG}V% N|rlD W Jyg&<\F"!j~Iao :L6+A>'B[{iS4P2-;x,Yb9Zw?c$RfM_)^8%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.LeftLengthLoading playlist %s...Locate song in browserLyricsLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRefresh screenRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelected songShift+TabSong viewerSpaceStart a music database updateStopTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeTrackUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUpUpdate LyricsUptimeView LyricsVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc 0.12 Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2010-04-14 05:21+0000 Last-Translator: Rickard Närström Language-Team: sv Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2010-06-19 15:12+0000 X-Generator: Launchpad (build Unknown) %d kb/sLadda (om) texter===> Verkställ och spara ===> Verkställ AvbrutetLägg tillLägg till ny tangentAlbumAlbum: %s - %sAlbum av artist: %sAlla artisterAlla spårAlla spår av artist: %sVerkställ och spara förändringarArtistArtist + titelArtister%s tilldelad %sAutomatisk centrering avslagetAutomatisk centrering påslagetBakstegstangentFöregående träffUpprepa sökning bakåtFelaktigt färgnamnFelaktig söktyp %sFelaktigt tidsformatBithastighetFilerFilerCentreraÄndra måltyp för databassökningKommentarKompositörAnsluter till %s... [Tryck %s för att avbryta]Förtäringsläge avFörtäringsläge påBeskärMjuk övergång %d sekunderUppdaterar databasen ifrån %sDatabasen uppdateras...Databasuppdatering påbörjadDatabas uppdateradDatumSänk volymenTa bortTa bort spellistaBorttagenDu kan inte ta bort det här föremåletSkivaNedåtpilLadda ner texter till låten som spelas just nuÄndra tangentdefinitionerÄndra tangenter för kommandot %sSlå på/av utgångEndEnterVälj katalog/Markera och spela uppNy tangent för %s: FelFel: %s - %sFel: Kunde inte skapa mappen ~/.ncmpc - %sFel: Tangenten %s används redan för %sEscFilnamnSökSök bakåtSökläge: Till början/slutSökläge: Börja omSökNästa träffGenreGlobalaGå upp en nivåGå till rotkatalogenGå upp en nivåHjälpHjälpHomeInkomplett färgdefinitionInkomplett tangentdefinitionHöj volymenInsertAvbryt handlingAvbryt hämtningOgiltigt nummerHoppHoppa tillTangent %s tilldelad %s och %sTangentdefinitionerTangentdefinitioner oförändrade.VänsterpilLängdLaddar spellista %s...Hitta spår i FilerTexterText sparadTexterMPD-statistikFelaktig färgdefinitionDålig tangentdefinitionSaknar '='Senaste databasuppdateringenMarkör nedåtFlytta markören längst nerFlytta markören längst ner i listanFlytta markören till mittenFlytta markören längst uppFlytta markören längst upp i listanMarkör uppåtFlytta nerFlytta uppFlytta spår nedåtFlytta spår uppåtNavigationNamnNästa skärmNästa spårArgumentet för söktyp %s saknasIngen textOBS! Glömde du att 'Verkställa' dina ändringar?Antal albumAntal artisterAntal låtarUtgång '%s' avslagenUtgång '%s' påslagenUtgångarUtgångarMarkören en skärm nedåtMarkören en skärm uppåtPageDownPageUpLösenordSökvägPausaStarta/Spela markeradSpela upp/VäljSpelar:Spellista borttagenSpeltidTryck %s för ny sökningTidigare skärmFöregående spårAvslutaSlumpningsläge avSlumpningsläge påUppdatera fönsterUpprepningsläge avUpprepningsläge påHögerpilSpara texter%s sparadGå ner en halv skärmGå ner en radGå upp en halv skärmGå upp en radSökSök efter: %sDatabassökningSök: %sTryck %s för ny sökning [%s]Sökresultat för %s [%s]Sök bakåtSök framåtMarkera alla listade föremålLägg till spellistan och spelaMarkerad låtShift+tabbSpårMellanslagUpdatera musikdatabasenStoppaTabTerminalen saknar stöd för färgerTerminalen saknar stöd för växling av färgerTitelAutomatisk centrering på/avMjuk övergång på/avÄndra sökinställningarSlumpning på/avRepeat på/avSpårKan inte hitta '%s'Ej definieradOkänt kommandoOkänd konfigurationsinställningSkärmnamn okäntUppåtpilUppdatera texterUpptidVisa texterVolym: %d%%Volym: n/aSparade %sTangentdefinitioner uppdaterade[Pausad]albumartistkommentarkompositördatumfilgenreladdar...nnamnuppträdaretryck på %s för att korrigeratitelspårLaunchpad Contributions: Björn Pettersson https://launchpad.net/~bjorn-hygiena Kalle Wallin https://launchpad.net/~kaw Rickard Närström https://launchpad.net/~riccetn nanker https://launchpad.net/~nankerjncmpc-0.27/po/uk.gmo0000644000076400001440000004421013064033640011224 00000000000000|=  #+ / ;H[ap    - 7E\k} (+0E \h "5:*?j!|$ / $Puy     %16Rr +9>E\sz    #%A#g "   $ 0; Yc-s &/6?DJOdm~+:Qdv |  &B ^ ly     , 1 L !P *r        !!/! 5!V! j!t!!!!! !! !0! !" -"8"A"["d"j"q"y"""" """ """""""R"F%6U%Z%?%'& :&$G&l&%& &&%&&',$'7Q''!''!'N(PQ( ((,(0($$)5I)) )))&))*f*2}*4**#*2+-M+<{+@+5+$/,T,!],,6,;,,9 -D-M-[R-3-_--B..p...J.2.'/6/JN/S/// 00+.0GZ00.0005 1/?1o1111:1K1#C2g2n2%2!2,22 36 30W333.333H4FN44(4*4&5*5:C5I~555506@F6D6F6D7HX7272728*:8,e88 888F8"999\9Y9#9':<:"\:$: ::::;; ;$;-;D;8U;;8;;6;4<!T< v<K<M<=*3=,^==E=2=4>S>&Y>>4>5>4?58? n?y???G?8@=@W@;u@$@A@A 2AN@R1W8EM`S 6<(TD9+Un)5ZVbF#Aq "_{ vC2/BK Y%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsunknownyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-08-11 10:30+0300 Last-Translator: Oleksandr Kovalenko Language-Team: Ukrainian Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-Language: Ukrainian X-Poedit-Country: UKRAINE %d кбіт/с(Пере)завантажити текст пісні===> Застосування та збереження прив'язки клавіші ===> Застосування прив'язки клавіші ПерерваноДодатиДодати нову клавішуДодається %s...Додається альбом %s...АльбомАльбом: %s - %sАльбоми виконавця: %sВсі виконавціВсі доріжкиВсі доріжки виконавця: %sЗастосувати та зберегти зміниВиконавецьВиконавець + НазваЕкран виконавцівПризначення %s до %sРежим автоматичного центрування: вимкненоРежим автоматичного центрування: увімкненоBackspaceЗнайти позадуЗнайти позаду попереднєНеправильна назва кольоруНеправильна мітка %sНеправильний тип показу часуБітрейтОглядЕкран переглядуПо центруЗмінити режим пошукуПриміткаКомпозиторВстановлення з'єднання з %s... [Натисніть %s щоб припинити]Режим вичерпання вимкненийРежим вичерпання увімкненийОбрізатиПлавний перехід: %dсПісня, що зараз програєтьсяЧас програвання всієї БДОновлення бази даних %s розпочатеВиконується оновлення бази даних...Початок оновлення бази данихБаза даних оновленаДатаЗменшити гучністьDeleteВидалити перелік програванняВидалити збережений текст пісніВидаленаВидалити цей елемент неможливоДискDownЗавантажити текст для пісні, що зараз програєтьсяРедагувати прив'язки клавішРедагувати призначену клавішу для вибраної командиРедагувати клавішу для %sУвімкнути/вимкнути вихідEndEnterВвести теку чи вибрати та програти піснюВведіть нову клавішу для %s: ПомилкаПомилка: %s - %sПомилка: неможливо створити теку ~/.ncmpc - %sПомилка: клавіша %s вже використовується для %sEscНазва файлуЗнайтиЗнайти позадуРежим пошуку: звичайнийРежим пошуку: завернутий (розділений???)Знайти попередуЗнайти попереду наступнеЖанрЗагальніПерейти до батьківської текиПерейти до кореневої текиНа рівень вищеДопомогаЕкран допомогиHomeНезавершене визначення кольоруНезавершена конфігурація гарячих клавішЗбільшити гучністьInsertПрипинити діюПрипинити отриманняНеправильне числоПомилковий режим пошукуПерейтиПерейти доКлавіша %s призначена до %s та %sЕкран конфігурації клавішПрив'язки клавіш не змінені.Екран призначення клавішLeftТривалістьЗавантажується перелік програвання %s...Визначити розміщення пісні в оглядачіТексти пісеньТекст пісні видаленийТекст пісні збереженийЕкран текстів пісеньСтатистика MPDНеправильне визначення кольоруНеправильне визначення гарячої клавішіВідсутній "="Останнє оновлення бази данихПеремістити курсор донизуПеремістити курсор в кінець екрануПеремістити курсор в кінець перелікуПеремістити курсор до середини екрануПеремістити курсор на початок екрануПеремістити курсор на початок перелікуПеремістити курсор доверхуПеремістити елемент донизуПеремістити елемент догориПеремістити пісню внизПеремістити пісню вгоруПереміщенняНазваНаступний екранНаступна доріжкаНемає аргументу для пошуку за міткою %sНемає тексту пісніНемає збереженого тексту пісніПримітка: ви забули "Застосувати" зроблені зміни?Кількість альбомівКількість виконавцівКількість пісеньВихід '%s' вимкненийВихід '%s' увімкненийВиходиЕкран виходівСторінка донизуСторінка догориPageDownPageUpПарольШляхПризупинитиПрогратиПрограти чи увійти до каталогуПрограється:Перелік програвання видаленийЧас програванняНатисніть %s для нового пошукуПопередній екранПопередня доріжкаВийтиРежим випадкового програвання вимкненийРежим випадкового програвання увімкненийВибір обсягуВибір обсягу вимкненийВибір обсягу увімкненийОновити екранВилучити вибране призначення клавішіРежим повторення вимкненийРежим повторення увімкненийRightЗберегти текст пісніЗбережений %sПрогорнути півекрану донизуПрогорнути один рядок донизуПрогорнути півекрану догориПрогорнути один рядок догориПошукРежим пошуку: %sЕкран пошукуПошук: %sПошук: натисніть %s для нового пошуку [%s]Пошук: наслідки пошуку для %s [%s]Шукати позадуШукати попередуВибрати всі перелічені елементиВибрати та програтиВибрати пісню, що зараз програєтьсяВибрана пісняShift+TabРежим повторення однієї доріжки вимкненийРежим повторення однієї доріжки увімкненийПереглядач пісеньSpaceРозпочати оновлення бази даних музикиЗупинитиПоміняти останні екраниTabТерміналу бракує підтримки можливостей кольорівТерміналу бракує підтримки зміни кольорівНазваПеремкнути режим автоматичного центруванняПеремкнути режим вичерпанняПеремкнути режим плавного переходуПеремкнути режим пошукуПеремкнути випадковий режимПеремкнути режим повторенняПеремкнути режим повторення однієї пісніДоріжкаДоріжки без альбому виконавця: %sНе вдається знайти '%s'Не визначенийНевідома командаНевідомий конфігураційний параметрНевідома назва екрануНевідомий режим пошукуUpОновити текст пісніЧас роботиПереглянути текст пісніПереглянути вибрану та пісню, що зараз програєтьсяГучність %d%%Гучність недоступнаЗаписаний %sВи маєте нову прив'язку клавіші[Призупинено]albumartistcommentcomposerdatefilegenreзавантаження...nnameperformerнатисніть %s щоб редагувати клавішіtitletrackOleksandr Kovalenko невідомоyncmpc-0.27/po/zh_CN.gmo0000644000076400001440000003172113064033640011611 00000000000000t9    (;AP e q|   %<K]s{ ( % <Hf"*J!\~$/$0UYb gu   2Rbiz %<SZ i v #%!#G k"     9C-S $*/DM^g 1DV \hq  &" > LYq     , !0 *R }        ! !6! J!T!d!!!! !! !0! " ""!";"D"J"Q"Y"b"g"l" r"}"" """""""$$ $% %&%-% =%J%]%d% t%% %% % %%%%%& -& 7&D&T&g&& && &&&&&"&'.'?'F'Z'm'}''''' '''( (#(<(C(H(d(!z(((((%(() )+/)[)u) y))))) ))) ))* ** &*3*8*Q* m*z****** ***+)+9+>+E+^+z+++ + +++ ++ ,,0,I,\,o,,,,,,,, , ,, , -'- 8-E- U-b-u-- - - -------- -- .. 8. E.O.V.g. x... ..... . //,/?/R/e/l/ }/ /&////// 0 &0 30=0N0_0o0u0000000011-1@1S1f1y111 1 11112 2 2 %2!22 T2 `2 k2u222 222222222223 333<:&}(XGa8s.?=nqw~j{HZg2,1b$-TPCW pBL>l5/Mu#0hco3| AkQv^_+yIY"FzEtrSe 6idmx `R%)9N*K! \@U]['Df7J4V;O%d kbps(Re)load lyrics===> Apply & Save key bindings ===> Apply key bindings AbortedAddAdd new keyAdding %s...Adding album %s...AlbumAlbum: %s - %sAlbums of artist: %sAll artistsAll tracksAll tracks of artist: %sApply and save changesArtistArtist + TitleArtist screenAssigned %s to %sAuto center mode: OffAuto center mode: OnBackspaceBackward findBackward find previousBad color nameBad search tag %sBad time display typeBitrateBrowseBrowse screenCenterChange search modeCommentComposerConnecting to %s... [Press %s to abort]Consume mode is offConsume mode is onCropCrossfade %d secondsCurrently playing songDB playtimeDatabase update of %s startedDatabase update running...Database update startedDatabase updatedDateDecrease volumeDeleteDelete playlistDelete saved lyricsDeletedDeleting this item is not possibleDiscDownDownload lyrics for currently playing songEdit key bindingsEdit keydefs for selected commandEdit keys for %sEnable/disable outputEndEnterEnter directory/Select and play songEnter new key for %s: ErrorError: %s - %sError: Unable to create directory ~/.ncmpc - %sError: key %s is already used for %sEscFilenameFindFind backwardFind mode: NormalFind mode: WrappedForward findForward find nextGenreGlobalGo to parent directoryGo to root directoryGo up a levelHelpHelp screenHomeIncomplete color definitionIncomplete hotkey configurationIncrease volumeInsertInterrupt actionInterrupt retrievalInvalid numberInvalid search modeJumpJump toKey %s assigned to %s and %sKey configuration screenKeybindings unchanged.Keydef screenLeftLengthLoading playlist %s...Locate song in browserLyricsLyrics deletedLyrics savedLyrics screenMPD statisticsMalformed color definitionMalformed hotkey definitionMissing '='Most recent db updateMove cursor downMove cursor to the bottom of screenMove cursor to the bottom of the listMove cursor to the middle of screenMove cursor to the top of screenMove cursor to the top of the listMove cursor upMove item downMove item upMove song downMove song upMovementNameNext screenNext trackNo argument for search tag %sNo lyricsNo saved lyricsNote: Did you forget to 'Apply' your changes?Number of albumsNumber of artistsNumber of songsOutput '%s' disabledOutput '%s' enabledOutputsOutputs screenPage downPage upPageDownPageUpPasswordPathPausePlayPlay/Enter directoryPlaying:Playlist deletedPlaytimePress %s for a new searchPrevious screenPrevious trackQuitRandom mode is offRandom mode is onRange selectionRange selection disabledRange selection enabledRefresh screenRemove selected keydefRepeat mode is offRepeat mode is onRightSave lyricsSaved %sScroll down half a screenScroll down one lineScroll up half a screenScroll up one lineSearchSearch mode: %sSearch screenSearch: %sSearch: Press %s for a new search [%s]Search: Results for %s [%s]Seek backwardSeek forwardSelect all listed itemsSelect and playSelect currently playing songSelected songShift+TabSingle mode is offSingle mode is onSong viewerSpaceStart a music database updateStopSwap to most recent screenTabTerminal lacks color capabilitiesTerminal lacks support for changing colorsTitleToggle auto center modeToggle consume modeToggle crossfade modeToggle find modeToggle random modeToggle repeat modeToggle single modeTrackTracks of no album of artist: %sUnable to find '%s'UndefinedUnknown commandUnknown configuration parameterUnknown screen nameUnknown search modeUpUpdate LyricsUptimeView LyricsView the selected and the currently playing songVolume %d%%Volume n/aWrote %sYou have new key bindings[Paused]albumartistcommentcomposerdatefilegenreloading...nnameperformerpress %s for the key editortitletracktranslator-creditsyProject-Id-Version: ncmpc Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general POT-Creation-Date: 2017-03-20 21:11+0100 PO-Revision-Date: 2011-05-12 15:00+0000 Last-Translator: snowdream Language-Team: Simplified Chinese Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2011-06-23 08:56+0000 X-Generator: Launchpad (build 13265) %d kbps(重新)加载歌词应用 & 保存快捷键设置 应用快捷键设置 已放弃增加添加新的键添加 %s...添加专辑 %s...专辑专辑: %s - %s%s 的专辑:全部艺术家全部音轨%s 的所有曲目保存设置艺术家艺术家 + 标题艺术家页面分配 %s 到 %s自动居中模式: 关自动居中模式: 开Backspace后向查找查找前一个错误的颜色名不正确的搜索条目 %s错误的时间显示格式比特率目录目录页面当前播放项居中显示更改搜索模式注释作曲连接到 %s... [按 %s 键取消]消除模式 关消除模式 开剪切淡入淡出 %d 秒当前播放曲目DB 播放时间开始更新数据库 %s正在更新数据库...更新数据库中数据库已更新日期降低音量Delete删除播放列表删除已保存歌词已删除此项目不能被删除碟片Down为当前曲目下载歌词编辑快捷键设置为选择的命令定义快捷键为 %s 编辑快捷键启用/禁用音频输出EndEnter进入选中目录/播放选中歌曲为 %s 输入新的按键: 错误错误 %s - %s错误: 无法创建文件夹 ~/.ncmpc - %s键 %s 已经绑定到 %sEsc文件名查找查找前一个查找模式: 普通查找模式: 循环前向查找查找下一个流派全局设定进入父目录进入根目录上一级帮助帮助页面Home不完整的颜色定义不完整的快捷键配置增加音量Insert中断后台操作中断歌词下载无效的数字无效的搜索模式跳转跳转到按键 %s 分配给 %s 和 %s快捷键设置页面取消快捷键变更.键定义页面Left时长加载播放列表 %s...定位到音乐所在目录歌词歌词已被删除歌词已保存歌词页面MPD统计不正确的颜色定义不正确的快捷键定义缺少 '='最新DB更新向下移动光标光标移到底部光标移到列表底部光标移到中部光标移到顶部光标移到列表顶部向上移动光标下移上移下移上移移动名字下一页面下一曲搜索条目 %s 没有参数无歌词没有歌词提示: 你忘记了保存你的设置?专辑总数艺术家总数歌曲总数禁用 '%s' 输出启用 '%s' 输出输出输出页面下一页上一页PageDownPageUp密码路径暂停播放播放/进入 目录播放中播放列表已删除播放时间按 %s 开始新的搜索上一页面上一曲退出随机播放 关随机播放 开区段选择禁用区段选取开启区段选取刷新页面去除选择的快捷键设定重复播放 关重复播放 开Right保存歌词保存到 %s向下滚动半屏向下滚动一行向上滚动半屏向上滚动一行查找搜索模式: %s查找页面查找: %s查找: 按 %s 开始新的搜索 [%s]查找: %s [%s] 的结果快退快进选中所有列出的项选中并播放选择当前播放曲目选中曲目Shift+Tab单曲播放 关单曲播放 开歌曲查看器Space更新此数据库停止切换到最近一个页面Tab终端不支持彩色终端不支持改变颜色标题切换自动居中模式切换消除模式切换淡入淡出模式切换查找模式切换随机模式切换重复模式切换单曲模式音轨艺术家的无专辑曲目: %s找不到 '%s'未定义的未知命令未知的配置参数未知的页面名未知的搜索模式Up更新歌词启动时间查看歌词参看选择当前播放的曲目音量 %d%%音量 n/a写入 %s你有新绑定的快捷键暂停专辑艺术家注释作曲日期文件流派正在载入...n名称歌手按 %s 编辑快捷键标题曲目Launchpad Contributions: Gao Jie https://launchpad.net/~kindmail Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-deactivatedaccount snowdream https://launchpad.net/~yanghuiy