diff --git a/.gitignore b/.gitignore index b2ea73dc2..b55ce1e23 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ doc_src/commands.hdr doc_src/index.hdr po/*.gmo fish -fish.spec fish_indent fish_pager fish_tests diff --git a/Makefile.in b/Makefile.in index 2e3a03e30..4f4dfb865 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,3 @@ - # Copyright (C) 2005-2006 Axel Liljencrantz # # This program is free software; you can redistribute it and/or modify @@ -21,14 +20,7 @@ # # Makefile for the fish shell. Can build fish and associated -# applications, install them, recalculate dependencies and also create -# binary distributions in tar.bz2, tar.gz and rpm formats. -# - -# -# The fish buildprocess is quite complex. Do not stare directly into -# the Makefile. Doing so may cause nausea, dizziness and -# hallucinations. +# applications, install them, and recalculate dependencies. # # Used by docdir @@ -61,9 +53,9 @@ optbindirs = @optbindirs@ # Various flags # -MACROS = -DLOCALEDIR=\"$(localedir)\" -DPREFIX=L\"$(prefix)\" -DDATADIR=L\"$(datadir)\" -DSYSCONFDIR=L\"$(sysconfdir)\" -DBINDIR=L\"$(bindir)\" +MACROS = -DLOCALEDIR=\"$(localedir)\" -DPREFIX=L\"$(prefix)\" -DDATADIR=L\"$(datadir)\" -DSYSCONFDIR=L\"$(sysconfdir)\" -DBINDIR=L\"$(bindir)\" -DDOCDIR=L\"$(docdir)\" CXXFLAGS = @CXXFLAGS@ $(MACROS) $(EXTRA_CXXFLAGS) -LDFLAGS = @LIBS@ @LDFLAGS@ +LDFLAGS = @LDFLAGS@ LDFLAGS_FISH = ${LDFLAGS} @LIBS_FISH@ @LDFLAGS_FISH@ LDFLAGS_FISH_INDENT = ${LDFLAGS} @LIBS_FISH_INDENT@ LDFLAGS_FISH_PAGER = ${LDFLAGS} @LIBS_FISH_PAGER@ @@ -168,11 +160,6 @@ HDR_FILES := $(HDR_FILES_SRC:.hdr.in=.hdr) # Use a pattern rule so that Make knows to only issue one invocation # per http://www.gnu.org/software/make/manual/make.html#Pattern-Intro -# Internalized scripts are currently disabled. -# For now, we just generate empty arrays. -# To generate them again, you would run this: -# ./internalize_scripts.py share/functions/*.fish share/completions/*.fish - # # Files containing documentation for external commands. @@ -187,53 +174,11 @@ HELP_SRC := $(wildcard doc_src/*.txt) TEST_IN := $(wildcard tests/test*.in) - -# -# Files that should be added to the tar archives -# - -# -# Files in ./doc_src/ -# - -DOC_SRC_DIR_FILES := $(HDR_FILES_SRC) $(HELP_SRC) - - -# -# Files in ./ -# - -MAIN_DIR_FILES_UNSORTED := Doxyfile Doxyfile.user Doxyfile.help \ - Makefile.in configure configure.ac config.h.in install-sh \ - key_reader.cpp $(MIME_OBJS:.o=.h) \ - $(MIME_OBJS:.o=.cpp) $(FISH_OBJS:.o=.h) $(BUILTIN_FILES) \ - $(COMMON_FILES) $(COMMON_FILES:.cpp=.h) $(FISH_OBJS:.o=.cpp) \ - fish.spec.in INSTALL README user_doc.head.html \ - ChangeLog config.sub config.guess fish_tests.cpp fish.cpp fish_pager.cpp \ - fishd.cpp make_vcs_completions.fish $(FISH_INDENT_OBJS:.o=.cpp) - -# -# The sorting is not meaningful in itself, but it has the side effect -# of removing duplicates, which means there will be fewer warnings -# during building. -# - -MAIN_DIR_FILES := $(sort $(MAIN_DIR_FILES_UNSORTED)) - - -# -# Files in ./tests/ -# - -TESTS_DIR_FILES := $(TEST_IN) $(TEST_IN:.in=.out) $(TEST_IN:.in=.err) \ - $(TEST_IN:.in=.status) tests/test.fish tests/gen_output.fish - - # # Files in ./share/completions/ # -COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish) +COMPLETIONS_DIR_FILES := $(wildcard share/completions/*.fish) share/completions/..fish # @@ -450,7 +395,7 @@ doc.h: $(HDR_FILES) # %.po:messages.pot - if test $(HAVE_GETTEXT) = 1;then \ + if test "$(HAVE_GETTEXT)" = 1;then \ if test -f $*.po; then \ msgmerge -U --backup=existing $*.po messages.pot;\ else \ @@ -464,7 +409,7 @@ doc.h: $(HDR_FILES) # messages.pot: *.cpp *.h share/completions/*.fish share/functions/*.fish - if test $(HAVE_GETTEXT) = 1;then \ + if test "$(HAVE_GETTEXT)" = 1; then \ xgettext -k_ -kN_ *.cpp *.h -o messages.pot; \ if xgettext -j -k_ -kN_ -k--description -LShell share/completions/*.fish share/functions/*.fish -o messages.pot; then true; else \ echo "Your xgettext version is too old to build the messages.pot file"\ @@ -509,7 +454,7 @@ share/man: $(HELP_SRC) -mkdir share/man touch share/man -rm -Rf share/man/man1 - ./build_tools/build_documentation.sh Doxyfile.help ./doc_src ./share + PROJECT_NUMBER=`echo $(FISH_BUILD_VERSION)| sed "s/-.*//"` ./build_tools/build_documentation.sh Doxyfile.help ./doc_src ./share # # The build rules for installing/uninstalling fish @@ -715,7 +660,7 @@ uninstall-legacy: uninstall .PHONY: uninstall-legacy install-translations: $(TRANSLATIONS) - if test $(HAVE_GETTEXT) = 1; then \ + if test "$(HAVE_GETTEXT)" = 1; then \ for i in $(TRANSLATIONS); do \ $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES; \ $(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/locale/`basename $$i .gmo`/LC_MESSAGES/fish.mo; \ @@ -725,7 +670,7 @@ install-translations: $(TRANSLATIONS) .PHONY: install-translations uninstall-translations: - if test $(HAVE_GETTEXT) = 1; then \ + if test "$(HAVE_GETTEXT)" = 1; then \ for i in $(TRANSLATIONS_SRC); do \ rm -f $(DESTDIR)$(datadir)/locale/*/LC_MESSAGES/fish.mo; \ done; \ @@ -742,7 +687,7 @@ uninstall-translations: # fish: $(FISH_OBJS) fish.o - $(CXX) $(FISH_OBJS) fish.o $(LDFLAGS_FISH) -o $@ + $(CXX) $(CXXFLAGS) $(FISH_OBJS) fish.o $(LDFLAGS_FISH) -o $@ # @@ -750,7 +695,7 @@ fish: $(FISH_OBJS) fish.o # fish_pager: $(FISH_PAGER_OBJS) - $(CXX) $(FISH_PAGER_OBJS) $(LDFLAGS_FISH_PAGER) -o $@ + $(CXX) $(CXXFLAGS) $(FISH_PAGER_OBJS) $(LDFLAGS_FISH_PAGER) -o $@ # @@ -758,7 +703,7 @@ fish_pager: $(FISH_PAGER_OBJS) # fishd: $(FISHD_OBJS) - $(CXX) $(FISHD_OBJS) $(LDFLAGS_FISHD) -o $@ + $(CXX) $(CXXFLAGS) $(FISHD_OBJS) $(LDFLAGS_FISHD) -o $@ # @@ -766,17 +711,15 @@ fishd: $(FISHD_OBJS) # fish_tests: $(FISH_TESTS_OBJS) - $(CXX) $(FISH_TESTS_OBJS) $(LDFLAGS_FISH) -o $@ + $(CXX) $(CXXFLAGS) $(FISH_TESTS_OBJS) $(LDFLAGS_FISH) -o $@ # # Build the mimedb program. # -# mimedb does not need any libraries, so we don't use LDFLAGS here. -# mimedb: $(MIME_OBJS) - $(CXX) $(MIME_OBJS) $(LDFLAGS_MIMEDB) -o $@ + $(CXX) $(CXXFLAGS) $(MIME_OBJS) $(LDFLAGS_MIMEDB) -o $@ # @@ -784,7 +727,7 @@ mimedb: $(MIME_OBJS) # fish_indent: $(FISH_INDENT_OBJS) - $(CXX) $(FISH_INDENT_OBJS) $(LDFLAGS_FISH_INDENT) -o $@ + $(CXX) $(CXXFLAGS) $(FISH_INDENT_OBJS) $(LDFLAGS_FISH_INDENT) -o $@ # @@ -792,7 +735,7 @@ fish_indent: $(FISH_INDENT_OBJS) # key_reader: key_reader.o input_common.o common.o env_universal.o env_universal_common.o wutil.o iothread.o - $(CXX) key_reader.o input_common.o common.o env_universal.o env_universal_common.o wutil.o iothread.o $(LDFLAGS_FISH) -o $@ + $(CXX) $(CXXFLAGS) key_reader.o input_common.o common.o env_universal.o env_universal_common.o wutil.o iothread.o $(LDFLAGS_FISH) -o $@ # @@ -803,13 +746,6 @@ depend: ./config.status .PHONY: depend -# -# Build the RPM spec file. -# - -fish.spec: fish.spec.in - ./config.status - # # Cleanup targets # @@ -819,7 +755,6 @@ fish.spec: fish.spec.in # distclean: clean - rm -f fish.spec rm -f config.status config.log config.h Makefile .PHONY: distclean @@ -835,7 +770,6 @@ distclean: clean clean: rm -f *.o doc.h doc.tmp doc_src/*.doxygen doc_src/*.cpp doc_src/*.o doc_src/commands.hdr - rm -f $(GENERATED_INTERN_SCRIPT_FILES) rm -f tests/tmp.err tests/tmp.out tests/tmp.status tests/foo.txt rm -f $(PROGRAMS) fish_tests key_reader rm -f command_list.txt command_list_toc.txt toc.txt diff --git a/README.md b/README.md index c74624656..10df81d9e 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ on RedHat, CentOS, or Amazon EC2: ## Packages for Linux -Nightly builds for several Linux distros can be downloaded from +Instructions on how to find builds for several Linux distros are at ## Switching to fish @@ -66,6 +66,12 @@ To switch your default shell back, you can run: Substitute /bin/bash with /bin/tcsh or /bin/zsh as appropriate. +## Optional Dependencies + +In order to generate completions from man pages compressed with either lzma or xz, you may need to install an extra Python package. + +Python versions prior to 2.6 are not supported. For Python versions 2.6 to 3.2 you need to install the module `backports.lzma`. How to install it depends on your system and how you installed Python. Most Linux distributions should include it as a package named `backports-lzma` (or similar). From version 3.3 onwards, Python already includes the required module. + ## Contact Us Questions, comments, rants and raves can be posted to the official fish mailing list at or join us on our IRC channel [#fish at irc.oftc.net](https://webchat.oftc.net/?channels=fish). diff --git a/build_tools/build_documentation.sh b/build_tools/build_documentation.sh index 76c19a04e..0c4a2aac8 100755 --- a/build_tools/build_documentation.sh +++ b/build_tools/build_documentation.sh @@ -86,7 +86,7 @@ done # Input is kept as . because we cd to the input directory beforehand # This prevents doxygen from generating "documentation" for intermediate directories DOXYPARAMS=$(cat <first_process; p; p=p->next) diff --git a/builtin_printf.cpp b/builtin_printf.cpp index efe4a2118..1a1ab3350 100644 --- a/builtin_printf.cpp +++ b/builtin_printf.cpp @@ -195,11 +195,6 @@ double C_STRTOD(wchar_t const *nptr, wchar_t **endptr) return r; } -static inline unsigned wchar_t to_uwchar_t(wchar_t ch) -{ - return ch; -} - void builtin_printf_state_t::fatal_error(const wchar_t *fmt, ...) { // Don't error twice @@ -292,7 +287,7 @@ static T string_to_scalar_type(const wchar_t *s, builtin_printf_state_t *state) T val; if (*s == L'\"' || *s == L'\'') { - unsigned wchar_t ch = *++s; + wchar_t ch = *++s; val = ch; } else @@ -632,7 +627,7 @@ int builtin_printf_state_t::print_formatted(const wchar_t *format, int argc, wch } break; } - + modify_allowed_format_specifiers(ok, "aAcdeEfFgGiosuxX", true); for (;; f++, direc_length++) @@ -736,8 +731,8 @@ no_more_flag_characters: ++f; { - unsigned wchar_t conversion = *f; - if (! ok[conversion]) + wchar_t conversion = *f; + if (conversion > 0xFF || ! ok[conversion]) { this->fatal_error(_(L"%.*ls: invalid conversion specification"), (int)(f + 1 - direc_start), direc_start); return 0; diff --git a/builtin_set.cpp b/builtin_set.cpp index bf0ea008c..eb2a70e9b 100644 --- a/builtin_set.cpp +++ b/builtin_set.cpp @@ -698,7 +698,6 @@ static int builtin_set(parser_t &parser, wchar_t **argv) Slice mode */ size_t idx_count, val_count; - wcstring_list_t values; std::vector indexes; wcstring_list_t result; diff --git a/common.cpp b/common.cpp index 7a9f7a514..9608e31eb 100644 --- a/common.cpp +++ b/common.cpp @@ -72,6 +72,7 @@ parts of fish. #include "util.cpp" #include "fallback.cpp" +#define NOT_A_WCHAR WEOF struct termios shell_modes; @@ -1125,26 +1126,256 @@ wcstring escape_string(const wcstring &in, escape_flags_t flags) return result; } -wchar_t *unescape(const wchar_t * orig, int flags) +/* Helper to return the last character in a string, or NOT_A_WCHAR */ +static wint_t string_last_char(const wcstring &str) { - int out_pos; - size_t in_pos; - size_t len; - int c; - int bracket_count=0; - wchar_t prev=0; - wchar_t *in; - bool unescape_special = !!(flags & UNESCAPE_SPECIAL); - bool allow_incomplete = !!(flags & UNESCAPE_INCOMPLETE); + size_t len = str.size(); + return len == 0 ? NOT_A_WCHAR : str.at(len - 1); +} - CHECK(orig, 0); +/* Given a null terminated string starting with a backslash, read the escape as if it is unquoted, appending to result. Return the number of characters consumed, or 0 on error */ +static size_t read_unquoted_escape(const wchar_t *input, wcstring *result, bool allow_incomplete, bool unescape_special) +{ + if (input[0] != L'\\') + { + // not an escape + return 0; + } - len = wcslen(orig); - in = wcsdup(orig); + /* Here's the character we'll ultimately append. Note that L'\0' is a valid thing to append. */ + wchar_t result_char = NOT_A_WCHAR; - if (!in) - DIE_MEM(); + bool errored = false; + size_t in_pos = 1; //in_pos always tracks the next character to read (and therefore the number of characters read so far) + const wchar_t c = input[in_pos++]; + switch (c) + { + /* A null character after a backslash is an error */ + case L'\0': + { + /* Adjust in_pos to only include the backslash */ + assert(in_pos > 0); + in_pos--; + + /* It's an error, unless we're allowing incomplete escapes */ + if (! allow_incomplete) + errored = true; + break; + } + + /* Numeric escape sequences. No prefix means octal escape, otherwise hexadecimal. */ + case L'0': + case L'1': + case L'2': + case L'3': + case L'4': + case L'5': + case L'6': + case L'7': + case L'u': + case L'U': + case L'x': + case L'X': + { + long long res=0; + size_t chars=2; + int base=16; + + bool byte_literal = false; + wchar_t max_val = ASCII_MAX; + + switch (c) + { + case L'u': + { + chars=4; + max_val = UCS2_MAX; + break; + } + + case L'U': + { + chars=8; + max_val = WCHAR_MAX; + + // Don't exceed the largest Unicode code point - see #1107 + if (0x10FFFF < max_val) + max_val = (wchar_t)0x10FFFF; + + break; + } + + case L'x': + { + chars = 2; + max_val = ASCII_MAX; + break; + } + + case L'X': + { + byte_literal = true; + max_val = BYTE_MAX; + break; + } + + default: + { + base=8; + chars=3; + // note that in_pos currently is just after the first post-backslash character; we want to start our escape from there + assert(in_pos > 0); + in_pos--; + break; + } + } + + for (size_t i=0; i= L'a' && sequence_char <= (L'a'+32)) + { + result_char = sequence_char-L'a'+1; + } + else if (sequence_char >= L'A' && sequence_char <= (L'A'+32)) + { + result_char = sequence_char-L'A'+1; + } + else + { + errored = true; + } + break; + } + + /* \x1b means escape */ + case L'e': + { + result_char = L'\x1b'; + break; + } + + /* + \f means form feed + */ + case L'f': + { + result_char = L'\f'; + break; + } + + /* + \n means newline + */ + case L'n': + { + result_char = L'\n'; + break; + } + + /* + \r means carriage return + */ + case L'r': + { + result_char = L'\r'; + break; + } + + /* + \t means tab + */ + case L't': + { + result_char = L'\t'; + break; + } + + /* + \v means vertical tab + */ + case L'v': + { + result_char = L'\v'; + break; + } + + /* If a backslash is followed by an actual newline, swallow them both */ + case L'\n': + { + result_char = NOT_A_WCHAR; + break; + } + + default: + { + if (unescape_special) + result->push_back(INTERNAL_SEPARATOR); + result_char = c; + break; + } + } + + if (! errored && result_char != NOT_A_WCHAR) + { + result->push_back(result_char); + } + return errored ? 0 : in_pos; +} + +/* Returns the unescaped version of input_str into output_str (by reference). Returns true if successful. If false, the contents of output_str are undefined (!) */ +static bool unescape_string_internal(const wchar_t * const input, const size_t input_len, wcstring *output_str, unescape_flags_t flags) +{ + /* Set up result string, which we'll swap with the output on success */ + wcstring result; + result.reserve(input_len); + + const bool unescape_special = !!(flags & UNESCAPE_SPECIAL); + const bool allow_incomplete = !!(flags & UNESCAPE_INCOMPLETE); + + int bracket_count = 0; + + bool errored = false; enum { mode_unquoted, @@ -1152,548 +1383,289 @@ wchar_t *unescape(const wchar_t * orig, int flags) mode_double_quotes } mode = mode_unquoted; - for (in_pos=0, out_pos=0; - in_pos=0)?in[out_pos]:0), out_pos++, in_pos++) + for (size_t input_position = 0; input_position < input_len && ! errored; input_position++) { - c = in[in_pos]; - switch (mode) + const wchar_t c = input[input_position]; + /* Here's the character we'll append to result, or NOT_A_WCHAR to suppress it */ + wchar_t to_append = c; + if (mode == mode_unquoted) { - /* - Mode 0 means unquoted string - */ - case mode_unquoted: + switch (c) { - if (c == L'\\') + case L'\\': { - switch (in[++in_pos]) + /* Backslashes (escapes) are complicated and may result in errors, or appending INTERNAL_SEPARATORs, so we have to handle them specially */ + size_t escape_chars = read_unquoted_escape(input + input_position, &result, allow_incomplete, unescape_special); + if (escape_chars == 0) { - - /* - A null character after a backslash is an - error, return null - */ - case L'\0': - { - if (!allow_incomplete) - { - free(in); - return 0; - } - } - - /* - Numeric escape sequences. No prefix means - octal escape, otherwise hexadecimal. - */ - - case L'0': - case L'1': - case L'2': - case L'3': - case L'4': - case L'5': - case L'6': - case L'7': - case L'u': - case L'U': - case L'x': - case L'X': - { - int i; - long long res=0; - int chars=2; - int base=16; - - int byte = 0; - wchar_t max_val = ASCII_MAX; - - switch (in[in_pos]) - { - case L'u': - { - chars=4; - max_val = UCS2_MAX; - break; - } - - case L'U': - { - chars=8; - max_val = WCHAR_MAX; - break; - } - - case L'x': - { - break; - } - - case L'X': - { - byte=1; - max_val = BYTE_MAX; - break; - } - - default: - { - base=8; - chars=3; - // note in_pod must be larger than 0 since we incremented it above - assert(in_pos > 0); - in_pos--; - break; - } - } - - for (i=0; i= L'a' && - in[in_pos] <= (L'a'+32)) - { - in[out_pos]=in[in_pos]-L'a'+1; - } - else if (in[in_pos] >= L'A' && - in[in_pos] <= (L'A'+32)) - { - in[out_pos]=in[in_pos]-L'A'+1; - } - else - { - free(in); - return 0; - } - break; - - } - - /* - \x1b means escape - */ - case L'e': - { - in[out_pos]=L'\x1b'; - break; - } - - /* - \f means form feed - */ - case L'f': - { - in[out_pos]=L'\f'; - break; - } - - /* - \n means newline - */ - case L'n': - { - in[out_pos]=L'\n'; - break; - } - - /* - \r means carriage return - */ - case L'r': - { - in[out_pos]=L'\r'; - break; - } - - /* - \t means tab - */ - case L't': - { - in[out_pos]=L'\t'; - break; - } - - /* - \v means vertical tab - */ - case L'v': - { - in[out_pos]=L'\v'; - break; - } - - /* If a backslash is followed by an actual newline, swallow them both */ - case L'\n': - out_pos--; - break; - - default: - { - if (unescape_special) - in[out_pos++] = INTERNAL_SEPARATOR; - in[out_pos]=in[in_pos]; - break; - } + /* A 0 return indicates an error */ + errored = true; } + else + { + /* Skip over the characters we read, minus one because the outer loop will increment it */ + assert(escape_chars > 0); + input_position += escape_chars - 1; + } + /* We've already appended, don't append anything else */ + to_append = NOT_A_WCHAR; + break; } - else + + case L'~': { - switch (in[in_pos]) + if (unescape_special && (input_position == 0)) { - case L'~': - { - if (unescape_special && (in_pos == 0)) - { - in[out_pos]=HOME_DIRECTORY; - } - else - { - in[out_pos] = L'~'; - } - break; - } - - case L'%': - { - if (unescape_special && (in_pos == 0)) - { - in[out_pos]=PROCESS_EXPAND; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'*': - { - if (unescape_special) - { - if (out_pos > 0 && in[out_pos-1]==ANY_STRING) - { - out_pos--; - in[out_pos] = ANY_STRING_RECURSIVE; - } - else - in[out_pos]=ANY_STRING; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'?': - { - if (unescape_special) - { - in[out_pos]=ANY_CHAR; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'$': - { - if (unescape_special) - { - in[out_pos]=VARIABLE_EXPAND; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'{': - { - if (unescape_special) - { - bracket_count++; - in[out_pos]=BRACKET_BEGIN; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'}': - { - if (unescape_special) - { - bracket_count--; - in[out_pos]=BRACKET_END; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L',': - { - if (unescape_special && bracket_count && prev!=BRACKET_SEP) - { - in[out_pos]=BRACKET_SEP; - } - else - { - in[out_pos]=in[in_pos]; - } - break; - } - - case L'\'': - { - mode = mode_single_quotes; - if (unescape_special) - in[out_pos] = INTERNAL_SEPARATOR; - else - out_pos--; - break; - } - - case L'\"': - { - mode = mode_double_quotes; - if (unescape_special) - in[out_pos] = INTERNAL_SEPARATOR; - else - out_pos--; - break; - } - - default: - { - in[out_pos] = in[in_pos]; - break; - } + to_append = HOME_DIRECTORY; } + break; } - break; - } - /* - Mode 1 means single quoted string, i.e 'foo'. - A backslash at the end of a line in a single quoted string does not swallow the backslash or newline. - */ - case mode_single_quotes: - { - if (c == L'\\') + case L'%': { - switch (in[++in_pos]) + if (unescape_special && (input_position == 0)) { - case '\\': - case L'\'': - { - in[out_pos]=in[in_pos]; - break; - } - - case L'\0': - { - if (!allow_incomplete) - { - free(in); - return 0; - } - else - { - //We may ever escape a NULL character, but still appending a \ in case I am wrong. - in[out_pos] = L'\\'; - } - } - break; - - default: - { - in[out_pos++] = L'\\'; - in[out_pos]= in[in_pos]; - } + to_append = PROCESS_EXPAND; } - + break; } - if (c == L'\'') + + case L'*': { if (unescape_special) - in[out_pos] = INTERNAL_SEPARATOR; - else - out_pos--; - mode = mode_unquoted; - } - else - { - in[out_pos] = in[in_pos]; + { + /* In general, this is ANY_STRING. But as a hack, if the last appended char is ANY_STRING, delete the last char and store ANY_STRING_RECURSIVE to reflect the fact that ** is the recursive wildcard. */ + if (string_last_char(result) == ANY_STRING) + { + assert(result.size() > 0); + result.resize(result.size() - 1); + to_append = ANY_STRING_RECURSIVE; + } + else + { + to_append = ANY_STRING; + } + } + break; } - break; + case L'?': + { + if (unescape_special) + { + to_append = ANY_CHAR; + } + break; + } + + case L'$': + { + if (unescape_special) + { + to_append = VARIABLE_EXPAND; + } + break; + } + + case L'{': + { + if (unescape_special) + { + bracket_count++; + to_append = BRACKET_BEGIN; + } + break; + } + + case L'}': + { + if (unescape_special) + { + bracket_count--; + to_append = BRACKET_END; + } + break; + } + + case L',': + { + /* If the last character was a separator, then treat this as a literal comma */ + if (unescape_special && bracket_count > 0 && string_last_char(result) != BRACKET_SEP) + { + to_append = BRACKET_SEP; + } + break; + } + + case L'\'': + { + mode = mode_single_quotes; + to_append = unescape_special ? INTERNAL_SEPARATOR : NOT_A_WCHAR; + break; + } + + case L'\"': + { + mode = mode_double_quotes; + to_append = unescape_special ? INTERNAL_SEPARATOR : NOT_A_WCHAR; + break; + } } - - /* - Mode 2 means double quoted string, i.e. "foo" - */ - case mode_double_quotes: + } + else if (mode == mode_single_quotes) + { + if (c == L'\\') { - switch (c) + /* A backslash may or may not escape something in single quotes */ + switch (input[input_position + 1]) { - case '"': - { - mode = mode_unquoted; - if (unescape_special) - in[out_pos] = INTERNAL_SEPARATOR; - else - out_pos--; - break; - } - case '\\': + case L'\'': { - switch (in[++in_pos]) - { - case L'\0': - { - if (!allow_incomplete) - { - free(in); - return 0; - } - else - { - //We probably don't need it since NULL character is always appended before ending this function. - in[out_pos]=in[in_pos]; - } - } - break; - case '\\': - case L'$': - case '"': - { - in[out_pos]=in[in_pos]; - break; - } - - case '\n': - { - out_pos--; - break; - } - - default: - { - in[out_pos++] = L'\\'; - in[out_pos] = in[in_pos]; - break; - } - } + to_append = input[input_position + 1]; + input_position += 1; /* Skip over the backslash */ break; } - case '$': + case L'\0': { - if (unescape_special) + if (!allow_incomplete) { - in[out_pos]=VARIABLE_EXPAND_SINGLE; + errored = true; } else { - in[out_pos]=in[in_pos]; + // PCA this line had the following cryptic comment: + // 'We may ever escape a NULL character, but still appending a \ in case I am wrong.' + // Not sure what it means or the importance of this + input_position += 1; /* Skip over the backslash */ + to_append = L'\\'; } - break; } + break; default: { - in[out_pos] = in[in_pos]; + /* Literal backslash that doesn't escape anything! Leave things alone; we'll append the backslash itself */ break; } - } - break; } + else if (c == L'\'') + { + to_append = unescape_special ? INTERNAL_SEPARATOR : NOT_A_WCHAR; + mode = mode_unquoted; + } + } + else if (mode == mode_double_quotes) + { + switch (c) + { + case L'"': + { + mode = mode_unquoted; + to_append = unescape_special ? INTERNAL_SEPARATOR : NOT_A_WCHAR; + break; + } + + case '\\': + { + switch (input[input_position + 1]) + { + case L'\0': + { + if (!allow_incomplete) + { + errored = true; + } + else + { + to_append = L'\0'; + } + } + break; + + case '\\': + case L'$': + case '"': + { + to_append = input[input_position + 1]; + input_position += 1; /* Skip over the backslash */ + break; + } + + case '\n': + { + /* Swallow newline */ + to_append = NOT_A_WCHAR; + input_position += 1; /* Skip over the backslash */ + break; + } + + default: + { + /* Literal backslash that doesn't escape anything! Leave things alone; we'll append the backslash itself */ + break; + } + } + break; + } + + case '$': + { + if (unescape_special) + { + to_append = VARIABLE_EXPAND_SINGLE; + } + break; + } + + } + } + + /* Now maybe append the char */ + if (to_append != NOT_A_WCHAR) + { + result.push_back(to_append); } } - if (!allow_incomplete && mode) + /* Return the string by reference, and then success */ + if (! errored) { - free(in); - return 0; + output_str->swap(result); } - - in[out_pos]=L'\0'; - return in; + return ! errored; } -bool unescape_string(wcstring &str, int escape_special) +bool unescape_string_in_place(wcstring *str, unescape_flags_t escape_special) { - bool success = false; - wchar_t *result = unescape(str.c_str(), escape_special); - if (result) + assert(str != NULL); + wcstring output; + bool success = unescape_string_internal(str->c_str(), str->size(), &output, escape_special); + if (success) { - str.replace(str.begin(), str.end(), result); - free(result); - success = true; + str->swap(output); } return success; } +bool unescape_string(const wchar_t *input, wcstring *output, unescape_flags_t escape_special) +{ + bool success = unescape_string_internal(input, wcslen(input), output, escape_special); + if (! success) + output->clear(); + return success; +} + +bool unescape_string(const wcstring &input, wcstring *output, unescape_flags_t escape_special) +{ + bool success = unescape_string_internal(input.c_str(), input.size(), output, escape_special); + if (! success) + output->clear(); + return success; +} void common_handle_winch(int signal) diff --git a/common.h b/common.h index 57fe7fa1a..f74c372b6 100644 --- a/common.h +++ b/common.h @@ -59,15 +59,19 @@ typedef std::vector wcstring_list_t; */ #define BYTE_MAX 0xffu -/** - Escape special fish syntax characters like the semicolon - */ -#define UNESCAPE_SPECIAL 1 +/* Flags for unescape_string functions */ +enum +{ + /* Default behavior */ + UNESCAPE_DEFAULT = 0, -/** - Allow incomplete escape sequences - */ -#define UNESCAPE_INCOMPLETE 2 + /* Escape special fish syntax characters like the semicolon */ + UNESCAPE_SPECIAL = 1 << 0, + + /* Allow incomplete escape sequences */ + UNESCAPE_INCOMPLETE = 1 << 1 +}; +typedef unsigned int unescape_flags_t; /* Flags for the escape() and escape_string() functions */ enum @@ -715,16 +719,14 @@ wcstring escape_string(const wcstring &in, escape_flags_t flags); character and a few more into constants which are defined in a private use area of Unicode. This assumes wchar_t is a unicode character set. - - The result must be free()d. The original string is not modified. If - an invalid sequence is specified, 0 is returned. - */ -wchar_t *unescape(const wchar_t * in, - int escape_special); -bool unescape_string(wcstring &str, - int escape_special); +/** Unescapes a string in-place. A true result indicates the string was unescaped, a false result indicates the string was unmodified. */ +bool unescape_string_in_place(wcstring *str, unescape_flags_t escape_special); + +/** Unescapes a string, returning the unescaped value by reference. On failure, the output is set to an empty string. */ +bool unescape_string(const wchar_t *input, wcstring *output, unescape_flags_t escape_special); +bool unescape_string(const wcstring &input, wcstring *output, unescape_flags_t escape_special); /** diff --git a/complete.cpp b/complete.cpp index 8df02b35a..ed0fc102d 100644 --- a/complete.cpp +++ b/complete.cpp @@ -44,6 +44,7 @@ #include "parser_keywords.h" #include "wutil.h" #include "path.h" +#include "iothread.h" /* Completion description strings, mostly for different types of files, such as sockets, block devices, etc. @@ -341,7 +342,6 @@ class completer_t const completion_request_flags_t flags; const wcstring initial_cmd; std::vector completions; - wcstring_list_t commands_to_load; /** Table of completions conditions that have already been tested and the corresponding test results */ typedef std::map condition_cache_t; @@ -430,7 +430,7 @@ public: /* Never do command substitution in autosuggestions. Sadly, we also can't yet do job expansion because it's not thread safe. */ expand_flags_t result = 0; if (this->type() == COMPLETE_AUTOSUGGEST) - result |= EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_JOBS; + result |= EXPAND_SKIP_CMDSUBST; /* Allow fuzzy matching */ if (this->fuzzy()) @@ -438,18 +438,6 @@ public: return result; } - - void get_commands_to_load(wcstring_list_t *lst) - { - if (lst) - lst->insert(lst->end(), commands_to_load.begin(), commands_to_load.end()); - } - - bool has_commands_to_load() const - { - return ! commands_to_load.empty(); - } - }; /* Autoloader for completions */ @@ -1350,6 +1338,15 @@ void complete_load(const wcstring &name, bool reload) completion_autoloader.load(name, reload); } +// Performed on main thread, from background thread. Return type is ignored. +static int complete_load_no_reload(wcstring *name) +{ + assert(name != NULL); + ASSERT_IS_MAIN_THREAD(); + complete_load(*name, false); + return 0; +} + /** Find completion for the argument str of command cmd_orig with previous option popt. Insert results into comp_out. Return 0 if file @@ -1372,14 +1369,15 @@ bool completer_t::complete_param(const wcstring &scmd_orig, const wcstring &spop if (this->type() == COMPLETE_DEFAULT) { + ASSERT_IS_MAIN_THREAD(); complete_load(cmd, true); } else if (this->type() == COMPLETE_AUTOSUGGEST) { - /* Maybe indicate we should try loading this on the main thread */ - if (! list_contains_string(this->commands_to_load, cmd) && ! completion_autoloader.has_tried_loading(cmd)) + /* Maybe load this command (on the main thread) */ + if (! completion_autoloader.has_tried_loading(cmd)) { - this->commands_to_load.push_back(cmd); + iothread_perform_on_main(complete_load_no_reload, &cmd); } } @@ -1627,7 +1625,7 @@ void completer_t::complete_param_expand(const wcstring &sstr, bool do_file) if (expand_string(comp_str, this->completions, - flags ) == EXPAND_ERROR) + flags) == EXPAND_ERROR) { debug(3, L"Error while expanding string '%ls'", comp_str); } @@ -1790,7 +1788,7 @@ bool completer_t::try_complete_user(const wcstring &str) return res; } -void complete(const wcstring &cmd, std::vector &comps, completion_request_flags_t flags, wcstring_list_t *commands_to_load) +void complete(const wcstring &cmd, std::vector &comps, completion_request_flags_t flags) { /* Make our completer */ completer_t completer(cmd, flags); @@ -1911,7 +1909,7 @@ void complete(const wcstring &cmd, std::vector &comps, completion_ end_loop=1; break; } - + default: { break; @@ -1982,13 +1980,10 @@ void complete(const wcstring &cmd, std::vector &comps, completion_ { bool do_file = false; - wcstring current_command_unescape = current_command; - wcstring prev_token_unescape = prev_token; - wcstring current_token_unescape = current_token; - - if (unescape_string(current_command_unescape, 0) && - unescape_string(prev_token_unescape, 0) && - unescape_string(current_token_unescape, UNESCAPE_INCOMPLETE)) + wcstring current_command_unescape, prev_token_unescape, current_token_unescape; + if (unescape_string(current_command, ¤t_command_unescape, UNESCAPE_DEFAULT) && + unescape_string(prev_token, &prev_token_unescape, UNESCAPE_DEFAULT) && + unescape_string(current_token, ¤t_token_unescape, UNESCAPE_INCOMPLETE)) { do_file = completer.complete_param(current_command_unescape, prev_token_unescape, @@ -2002,12 +1997,7 @@ void complete(const wcstring &cmd, std::vector &comps, completion_ if (completer.empty()) do_file = true; - /* But if we are planning on loading commands, don't do file completions. - See https://github.com/fish-shell/fish-shell/issues/378 */ - if (commands_to_load != NULL && completer.has_commands_to_load()) - do_file = false; - - /* And if we're autosuggesting, and the token is empty, don't do file suggestions */ + /* If we're autosuggesting, and the token is empty, don't do file suggestions */ if ((flags & COMPLETION_REQUEST_AUTOSUGGESTION) && current_token_unescape.empty()) do_file = false; @@ -2019,7 +2009,6 @@ void complete(const wcstring &cmd, std::vector &comps, completion_ } comps = completer.get_completions(); - completer.get_commands_to_load(commands_to_load); } diff --git a/complete.h b/complete.h index 84b844824..cd4f22a16 100644 --- a/complete.h +++ b/complete.h @@ -127,7 +127,7 @@ class completion_t completion_t(const wcstring &comp, const wcstring &desc = L"", string_fuzzy_match_t match = string_fuzzy_match_t(fuzzy_match_exact), int flags_val = 0); completion_t(const completion_t &); completion_t &operator=(const completion_t &); - + /* Compare two completions. No operating overlaoding to make this always explicit (there's potentially multiple ways to compare completions). */ static bool is_alphabetically_less_than(const completion_t &a, const completion_t &b); static bool is_alphabetically_equal_to(const completion_t &a, const completion_t &b); @@ -216,14 +216,11 @@ void complete_remove(const wchar_t *cmd, const wchar_t *long_opt); -/** Find all completions of the command cmd, insert them into out. If to_load is - * not NULL, append all commands that we would autoload, but did not (presumably - * because this is not the main thread) +/** Find all completions of the command cmd, insert them into out. */ void complete(const wcstring &cmd, std::vector &comp, - completion_request_flags_t flags, - wcstring_list_t *to_load = NULL); + completion_request_flags_t flags); /** Print a list of all current completions into the string. diff --git a/configure.ac b/configure.ac index ea7c592f2..64a6f1ecb 100644 --- a/configure.ac +++ b/configure.ac @@ -238,56 +238,24 @@ AS_IF([test "$use_doxygen" != "no"], CXXFLAGS="$CXXFLAGS -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64" + +# fish does not use exceptions +# Disabling exceptions saves about 20% (!) of the compiled code size +CXXFLAGS="$CXXFLAGS -fno-exceptions" + + # -# If we are using gcc, set some flags that increase the odds of the -# compiler producing a working binary... +# -Wall is there to keep me on my toes # -if test "$GCC" = yes; then +CXXFLAGS="$CXXFLAGS -Wall" - # - # -fno-optimize-sibling-calls seems to work around a bug where - # sending a SIGWINCH to fish on NetBSD 3.0 causes fish to exit when - # compiled with GCC 3.3.3. This is probably either a compiler bug - # or a libc bug, but adding this flag seems to fix things for - # now. Long term, the real problem should be tracked down and - # truly fixed, at which point we can remove this silly flag. This - # bug has been verified to not exist on Linux using GCC 3.3.3. - # - - GCC_VERSION=$($CC -dumpversion) - GCC_VERSION_MAJOR=$(echo $GCC_VERSION | cut -d'.' -f1) - GCC_VERSION_MINOR=$(echo $GCC_VERSION | cut -d'.' -f2) - GCC_VERSION_PATCH=$(echo $GCC_VERSION | cut -d'.' -f3) - - if test "$GCC_VERSION_MAJOR" -le 3; then - if test 0"$GCC_VERSION_MINOR" -le 3; then - if test 0"$GCC_VERSION_PATCH" -le 3; then - CXXFLAGS="$CXXFLAGS -fno-optimize-sibling-calls" - fi - fi - fi - - # fish does not use exceptions - # Disabling exceptions saves about 20% (!) of the compiled code size - CXXFLAGS="$CXXFLAGS -fno-exceptions" - - - # - # -Wall is there to keep me on my toes - # - - # Some day... - CXXFLAGS="$CXXFLAGS -Wall" - - # - # This is needed in order to get the really cool backtraces on Linux - # - - if test `uname` != "Darwin"; then - LDFLAGS_FISH="$LDFLAGS_FISH -rdynamic" - fi +# +# This is needed in order to get the really cool backtraces on Linux +# +if test `uname` != "Darwin"; then + LDFLAGS_FISH="$LDFLAGS_FISH -rdynamic" fi @@ -475,82 +443,58 @@ AC_DEFINE( # # Check for os dependant libraries for all binaries. -LIBS_COMMON=$LIBS -LIBS="" AC_SEARCH_LIBS( connect, socket, , [AC_MSG_ERROR([Cannot find the socket library, needed to build this package.] )] ) AC_SEARCH_LIBS( nanosleep, rt, , [AC_MSG_ERROR([Cannot find the rt library, needed to build this package.] )] ) AC_SEARCH_LIBS( pthread_create, pthread, , [AC_MSG_ERROR([Cannot find the pthread library, needed to build this package.] )] ) AC_SEARCH_LIBS( setupterm, [ncurses curses], , [AC_MSG_ERROR([Could not find a curses implementation, needed to build fish. If this is Linux, try running 'sudo apt-get install libncurses5-dev' or 'sudo yum install ncurses-devel'])] ) AC_SEARCH_LIBS( [nan], [m], [AC_DEFINE( [HAVE_NAN], [1], [Define to 1 if you have the nan function])] ) + +if test x$local_gettext != xno; then + AC_SEARCH_LIBS( gettext, intl,,) +fi + LIBS_SHARED=$LIBS -LIBS=$LIBS_COMMON # # Check for libraries needed by fish. # -LIBS_COMMON=$LIBS LIBS="$LIBS_SHARED" -if test x$local_gettext != xno; then - AC_SEARCH_LIBS( gettext, intl,,) -fi - # Check for libiconv_open if we can't find iconv_open. Silly OS X does # weird macro magic for the sole purpose of amusing me. AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] ) LIBS_FISH=$LIBS -LIBS=$LIBS_COMMON # # Check for libraries needed by fish_indent. # -LIBS_COMMON=$LIBS LIBS="$LIBS_SHARED" -if test x$local_gettext != xno; then - AC_SEARCH_LIBS( gettext, intl,,) -fi LIBS_FISH_INDENT=$LIBS -LIBS=$LIBS_COMMON # # Check for libraries needed by fish_pager. # -LIBS_COMMON=$LIBS LIBS="$LIBS_SHARED" -if test x$local_gettext != xno; then - AC_SEARCH_LIBS( gettext, intl,,) -fi AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] ) LIBS_FISH_PAGER=$LIBS -LIBS=$LIBS_COMMON # # Check for libraries needed by fishd. # -LIBS_COMMON=$LIBS LIBS="$LIBS_SHARED" -if test x$local_gettext != xno; then - AC_SEARCH_LIBS( gettext, intl,,) -fi AC_SEARCH_LIBS( iconv_open, iconv, , [AC_SEARCH_LIBS( libiconv_open, iconv, , [AC_MSG_ERROR([Could not find an iconv implementation, needed to build fish])] )] ) LIBS_FISHD=$LIBS -LIBS=$LIBS_COMMON # # Check for libraries needed by mimedb. # -LIBS_COMMON=$LIBS LIBS="$LIBS_SHARED" -if test x$local_gettext != xno; then - AC_SEARCH_LIBS( gettext, intl,,) -fi LIBS_MIMEDB=$LIBS -LIBS=$LIBS_COMMON # @@ -929,7 +873,7 @@ case $target_os in esac # Tell the world what we know -AC_CONFIG_FILES([Makefile fish.spec]) +AC_CONFIG_FILES([Makefile]) AC_OUTPUT if test ! x$local_found_posix_switch = xyes; then diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in index f82f309aa..09cdeccca 100644 --- a/doc_src/index.hdr.in +++ b/doc_src/index.hdr.in @@ -1139,6 +1139,7 @@ Here are some of the commands available in the editor: - Alt-P adds the string '| less;' to the end of the job under the cursor. The result is that the output of the command will be paged. - Alt-C capitalizes the current word. - Alt-U makes the current word uppercase. +- F1 shows the manual page for the current command, if one exists. You can change these key bindings using the bind builtin command. diff --git a/doc_src/source.txt b/doc_src/source.txt index c49e24912..786577dc4 100644 --- a/doc_src/source.txt +++ b/doc_src/source.txt @@ -20,6 +20,10 @@ The return status of \c source is the return status of the last job to execute. If something goes wrong while opening or reading the file, \c source exits with a non-zero status. +\c . (a single period) is an alias for the \c source command. The use of \c . +is deprecated in favour of \c source, and \c . will be removed in a future +version of fish. + \subsection source-example Example source ~/.config/fish/config.fish causes fish to re-read its initialization file. diff --git a/doc_src/tutorial.hdr b/doc_src/tutorial.hdr index d5cd69482..da9ad6d3f 100644 --- a/doc_src/tutorial.hdr +++ b/doc_src/tutorial.hdr @@ -721,7 +721,7 @@ function fish_prompt end -

See the documentation for funced and funcsave for ways to create these files automatically. +

See the documentation for funced and funcsave for ways to create these files automatically.

Universal Variables

@@ -740,7 +740,7 @@ vim

Ready for more?

-

If you want to learn more about fish, there is lots of detailed documentation, an official mailing list, the IRC channel #fish on irc.oftc.net, and the github page. +

If you want to learn more about fish, there is lots of detailed documentation, an official mailing list, the IRC channel #fish on irc.oftc.net, and the github page. \endhtmlonly diff --git a/env_universal.cpp b/env_universal.cpp index c7d060ad7..a9e7462a6 100644 --- a/env_universal.cpp +++ b/env_universal.cpp @@ -123,7 +123,7 @@ static int try_get_socket_once(void) free(dir); - debug(3, L"Connect to socket %s at fd %2", name.c_str(), s); + debug(3, L"Connect to socket %s at fd %d", name.c_str(), s); struct sockaddr_un local = {}; local.sun_family = AF_UNIX; @@ -132,6 +132,12 @@ static int try_get_socket_once(void) if (connect(s, (struct sockaddr *)&local, sizeof local) == -1) { close(s); + + /* If it fails on first try, it's probably no serious error, but fishd hasn't been launched yet. + This happens (at least) on the first concurrent session. */ + if (get_socket_count > 1) + wperror(L"connect"); + return -1; } diff --git a/env_universal_common.cpp b/env_universal_common.cpp index f600e70a9..dbf79c1a6 100644 --- a/env_universal_common.cpp +++ b/env_universal_common.cpp @@ -398,6 +398,9 @@ start_conversion: { debug(0, L"%d %d", in_len, out_len); debug(0, L"Error while converting from to string"); + + /* Terminate the output string. */ + free(out); return 0; } @@ -598,16 +601,13 @@ static void parse_message(wchar_t *msg, tmp = wcschr(name, L':'); if (tmp) { - wchar_t *val; const wcstring key(name, tmp - name); - val = tmp+1; - val = unescape(val, 0); - - if (val != NULL) - env_universal_common_set(key.c_str(), val, exportv); - - free(val); + wcstring val; + if (unescape_string(tmp + 1, &val, 0)) + { + env_universal_common_set(key.c_str(), val.c_str(), exportv); + } } else { diff --git a/exec.cpp b/exec.cpp index daad09f7f..b894ce690 100644 --- a/exec.cpp +++ b/exec.cpp @@ -188,7 +188,7 @@ void print_open_fds(void) { if (open_fds.at(i)) { - fprintf(stderr, "fd %lu\n", i); + fprintf(stderr, "fd %lu\n", (unsigned long) i); } } } @@ -551,7 +551,7 @@ static bool can_use_posix_spawn_for_job(const job_t *job, const process_t *proce return false; } } - + /* Now see if we have a redirection involving a file. The only one we allow is /dev/null, which we assume will not fail. */ bool result = true; if (chain_contains_redirection_to_real_file(job->block_io_chain()) || chain_contains_redirection_to_real_file(process->io_chain())) @@ -790,11 +790,11 @@ void exec_job(parser_t &parser, job_t *j) echo alpha | cat < beta.txt Should cat output alpha or beta? bash and ksh output 'beta', tcsh gets it right and complains about ambiguity, and zsh outputs both (!). No shells appear to output 'alpha', so we match bash here. That would mean putting the pipe first, so that it gets trumped by the file redirection. - + However, eval does this: - + echo "begin; $argv "\n" ;end eval2_inner <&3 3<&-" | source 3<&0 - + which depends on the redirection being evaluated before the pipe. So the write end of the pipe comes first, the read pipe of the pipe comes last. See issue #966. */ @@ -811,7 +811,7 @@ void exec_job(parser_t &parser, job_t *j) /* The explicit IO redirections associated with the process */ process_net_io_chain.append(p->io_chain()); - + /* Read pipe goes last */ if (p != j->first_process) { @@ -820,7 +820,7 @@ void exec_job(parser_t &parser, job_t *j) pipe_read->pipe_fd[0] = pipe_current_read; process_net_io_chain.push_back(pipe_read); } - + /* This call is used so the global environment variable array @@ -1241,16 +1241,16 @@ void exec_job(parser_t &parser, job_t *j) forking is expensive, fish tries to avoid it when possible. */ - + bool fork_was_skipped = false; - + const shared_ptr stdout_io = process_net_io_chain.get_io_for_fd(STDOUT_FILENO); const shared_ptr stderr_io = process_net_io_chain.get_io_for_fd(STDERR_FILENO); - + /* If we are outputting to a file, we have to actually do it, even if we have no output, so that we can truncate the file. Does not apply to /dev/null. */ bool must_fork = redirection_is_to_real_file(stdout_io.get()) || redirection_is_to_real_file(stderr_io.get()); if (! must_fork) - { + { if (p->next == NULL) { const bool stdout_is_to_buffer = stdout_io && stdout_io->io_mode == IO_BUFFER; @@ -1299,7 +1299,7 @@ void exec_job(parser_t &parser, job_t *j) } } } - + if (fork_was_skipped) { diff --git a/expand.cpp b/expand.cpp index 45d292491..10e3cbf40 100644 --- a/expand.cpp +++ b/expand.cpp @@ -49,6 +49,7 @@ parameter expansion. #include "signal.h" #include "tokenizer.h" #include "complete.h" +#include "iothread.h" #include "parse_util.h" @@ -560,6 +561,166 @@ std::vector expand_get_all_process_names(void) return result; } +/* Helper function to do a job search. */ +struct find_job_data_t +{ + const wchar_t *proc; /* The process to search for - possibly numeric, possibly a name */ + expand_flags_t flags; + std::vector *completions; +}; + +/* The following function is invoked on the main thread, because the job list is not thread safe. It should search the job list for something matching the given proc, and then return 1 to stop the search, 0 to continue it */ +static int find_job(const struct find_job_data_t *info) +{ + ASSERT_IS_MAIN_THREAD(); + + const wchar_t * const proc = info->proc; + const expand_flags_t flags = info->flags; + std::vector &completions = *info->completions; + + const job_t *j; + int found = 0; + // do the empty param check first, because an empty string passes our 'numeric' check + if (wcslen(proc)==0) + { + /* + This is an empty job expansion: '%' + It expands to the last job backgrounded. + */ + job_iterator_t jobs; + while ((j = jobs.next())) + { + if (!j->command_is_empty()) + { + append_completion(completions, to_string(j->pgid)); + break; + } + } + /* + You don't *really* want to flip a coin between killing + the last process backgrounded and all processes, do you? + Let's not try other match methods with the solo '%' syntax. + */ + found = 1; + } + else if (iswnumeric(proc)) + { + /* + This is a numeric job string, like '%2' + */ + + if (flags & ACCEPT_INCOMPLETE) + { + job_iterator_t jobs; + while ((j = jobs.next())) + { + wchar_t jid[16]; + if (j->command_is_empty()) + continue; + + swprintf(jid, 16, L"%d", j->job_id); + + if (wcsncmp(proc, jid, wcslen(proc))==0) + { + wcstring desc_buff = format_string(COMPLETE_JOB_DESC_VAL, j->command_wcstr()); + append_completion(completions, + jid+wcslen(proc), + desc_buff, + 0); + } + } + } + else + { + int jid; + wchar_t *end; + + errno = 0; + jid = fish_wcstoi(proc, &end, 10); + if (jid > 0 && !errno && !*end) + { + j = job_get(jid); + if ((j != 0) && (j->command_wcstr() != 0) && (!j->command_is_empty())) + { + append_completion(completions, to_string(j->pgid)); + } + } + } + /* + Stop here so you can't match a random process name + when you're just trying to use job control. + */ + found = 1; + } + + if (! found) + { + job_iterator_t jobs; + while ((j = jobs.next())) + { + + if (j->command_is_empty()) + continue; + + size_t offset; + if (match_pid(j->command(), proc, flags, &offset)) + { + if (flags & ACCEPT_INCOMPLETE) + { + append_completion(completions, + j->command_wcstr() + offset + wcslen(proc), + COMPLETE_JOB_DESC, + 0); + } + else + { + append_completion(completions, to_string(j->pgid)); + found = 1; + } + } + } + + if (! found) + { + jobs.reset(); + while ((j = jobs.next())) + { + process_t *p; + if (j->command_is_empty()) + continue; + for (p=j->first_process; p; p=p->next) + { + if (p->actual_cmd.empty()) + continue; + + size_t offset; + if (match_pid(p->actual_cmd, proc, flags, &offset)) + { + if (flags & ACCEPT_INCOMPLETE) + { + append_completion(completions, + wcstring(p->actual_cmd, offset + wcslen(proc)), + COMPLETE_CHILD_PROCESS_DESC, + 0); + } + else + { + append_completion(completions, + to_string(p->pid), + L"", + 0); + found = 1; + } + } + } + } + } + } + + return found; +} + + /** Searches for a job with the specified job id, or a job or process which has the string \c proc as a prefix of its commandline. @@ -582,146 +743,8 @@ static int find_process(const wchar_t *proc, if (!(flags & EXPAND_SKIP_JOBS)) { - ASSERT_IS_MAIN_THREAD(); - const job_t *j; - - // do the empty param check first, because an empty string passes our 'numeric' check - if (wcslen(proc)==0) - { - /* - This is an empty job expansion: '%' - It expands to the last job backgrounded. - */ - job_iterator_t jobs; - while ((j = jobs.next())) - { - if (!j->command_is_empty()) - { - append_completion(out, to_string(j->pgid)); - break; - } - } - /* - You don't *really* want to flip a coin between killing - the last process backgrounded and all processes, do you? - Let's not try other match methods with the solo '%' syntax. - */ - found = 1; - } - else if (iswnumeric(proc)) - { - /* - This is a numeric job string, like '%2' - */ - - if (flags & ACCEPT_INCOMPLETE) - { - job_iterator_t jobs; - while ((j = jobs.next())) - { - wchar_t jid[16]; - if (j->command_is_empty()) - continue; - - swprintf(jid, 16, L"%d", j->job_id); - - if (wcsncmp(proc, jid, wcslen(proc))==0) - { - wcstring desc_buff = format_string(COMPLETE_JOB_DESC_VAL, j->command_wcstr()); - append_completion(out, - jid+wcslen(proc), - desc_buff, - 0); - } - } - } - else - { - int jid; - wchar_t *end; - - errno = 0; - jid = fish_wcstoi(proc, &end, 10); - if (jid > 0 && !errno && !*end) - { - j = job_get(jid); - if ((j != 0) && (j->command_wcstr() != 0) && (!j->command_is_empty())) - { - append_completion(out, to_string(j->pgid)); - } - } - } - /* - Stop here so you can't match a random process name - when you're just trying to use job control. - */ - found = 1; - } - if (found) - return 1; - - job_iterator_t jobs; - while ((j = jobs.next())) - { - - if (j->command_is_empty()) - continue; - - size_t offset; - if (match_pid(j->command(), proc, flags, &offset)) - { - if (flags & ACCEPT_INCOMPLETE) - { - append_completion(out, - j->command_wcstr() + offset + wcslen(proc), - COMPLETE_JOB_DESC, - 0); - } - else - { - append_completion(out, to_string(j->pgid)); - found = 1; - } - } - } - - if (found) - { - return 1; - } - - jobs.reset(); - while ((j = jobs.next())) - { - process_t *p; - if (j->command_is_empty()) - continue; - for (p=j->first_process; p; p=p->next) - { - if (p->actual_cmd.empty()) - continue; - - size_t offset; - if (match_pid(p->actual_cmd, proc, flags, &offset)) - { - if (flags & ACCEPT_INCOMPLETE) - { - append_completion(out, - wcstring(p->actual_cmd, offset + wcslen(proc)), - COMPLETE_CHILD_PROCESS_DESC, - 0); - } - else - { - append_completion(out, - to_string(p->pid), - L"", - 0); - found = 1; - } - } - } - } + const struct find_job_data_t data = {proc, flags, &out}; + found = iothread_perform_on_main(find_job, &data); if (found) { @@ -828,7 +851,7 @@ static int expand_pid(const wcstring &instr_with_sep, } -void expand_variable_error(parser_t &parser, const wchar_t *token, size_t token_pos, int error_pos) +void expand_variable_error(parser_t &parser, const wcstring &token, size_t token_pos, int error_pos) { size_t stop_pos = token_pos+1; @@ -836,7 +859,7 @@ void expand_variable_error(parser_t &parser, const wchar_t *token, size_t token_ { case BRACKET_BEGIN: { - wchar_t *cpy = wcsdup(token); + wchar_t *cpy = wcsdup(token.c_str()); *(cpy+token_pos)=0; wchar_t *name = &cpy[stop_pos+1]; wchar_t *end = wcschr(name, BRACKET_END); @@ -1465,26 +1488,6 @@ static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector< return 1; } -/** - Wrapper around unescape funtion. Issues an error() on failiure. -*/ -__attribute__((unused)) -static wchar_t *expand_unescape(parser_t &parser, const wchar_t * in, int escape_special) -{ - wchar_t *res = unescape(in, escape_special); - if (!res) - parser.error(SYNTAX_ERROR, -1, L"Unexpected end of string"); - return res; -} - -static wcstring expand_unescape_string(const wcstring &in, int escape_special) -{ - wcstring tmp = in; - unescape_string(tmp, escape_special); - /* Need to detect error here */ - return tmp; -} - /* Given that input[0] is HOME_DIRECTORY or tilde (ugh), return the user's name. Return the empty string if it is just a tilde. Also return by reference the index of the first character of the remaining part of the string (e.g. the subsequent slash) */ static wcstring get_home_directory_name(const wcstring &input, size_t *out_tail_idx) { @@ -1669,8 +1672,8 @@ int expand_string(const wcstring &input, std::vector &output, expa expand_string to expand incomplete strings from the commandline. */ - int unescape_flags = UNESCAPE_SPECIAL | UNESCAPE_INCOMPLETE; - wcstring next = expand_unescape_string(in->at(i).completion, unescape_flags); + wcstring next; + unescape_string(in->at(i).completion, &next, UNESCAPE_SPECIAL | UNESCAPE_INCOMPLETE); if (EXPAND_SKIP_VARIABLES & flags) { @@ -1752,15 +1755,15 @@ int expand_string(const wcstring &input, std::vector &output, expa remove_internal_separator(next_str, (EXPAND_SKIP_WILDCARDS & flags) ? true : false); const wchar_t *next = next_str.c_str(); - + const bool has_wildcard = wildcard_has(next, 1); - + if (has_wildcard && (flags & EXECUTABLES_ONLY)) { // Don't do wildcard expansion for executables. See #785. So do nothing here. } else if (((flags & ACCEPT_INCOMPLETE) && (!(flags & EXPAND_SKIP_WILDCARDS))) || - has_wildcard) + has_wildcard) { const wchar_t *start, *rest; diff --git a/expand.h b/expand.h index 51e149dfe..4893d2b92 100644 --- a/expand.h +++ b/expand.h @@ -199,7 +199,7 @@ int expand_is_clean(const wchar_t *in); \param token_pos The position where the expansion begins \param error_pos The position on the line to report to the error function. */ -void expand_variable_error(parser_t &parser, const wchar_t *token, size_t token_pos, int error_pos); +void expand_variable_error(parser_t &parser, const wcstring &token, size_t token_pos, int error_pos); /** Testing function for getting all process names. diff --git a/fallback.cpp b/fallback.cpp index 5e4b3e1b2..d26907e2b 100644 --- a/fallback.cpp +++ b/fallback.cpp @@ -98,8 +98,6 @@ char *tparm_solaris_kludge(char *str, ...) || (enter_reverse_mode && ! strcmp(str, enter_reverse_mode)) || (enter_shadow_mode && ! strcmp(str, enter_shadow_mode)) || (exit_shadow_mode && ! strcmp(str, exit_shadow_mode)) - || (enter_standout_mode && ! strcmp(str, enter_standout_mode)) - || (exit_standout_mode && ! strcmp(str, exit_standout_mode)) || (enter_secure_mode && ! strcmp(str, enter_secure_mode)) || (enter_bold_mode && ! strcmp(str, enter_bold_mode))) { @@ -1508,7 +1506,7 @@ static int mk_wcswidth(const wchar_t *pwcs, size_t n) { if (pwcs[i] == L'\0') break; - + int w = mk_wcwidth(pwcs[i]); if (w < 0) { diff --git a/fish.cpp b/fish.cpp index 24499c755..ca5d50e90 100644 --- a/fish.cpp +++ b/fish.cpp @@ -189,7 +189,8 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0) paths.bin = base_path + L"/bin"; struct stat buf; - if (0 == wstat(paths.data, &buf) && 0 == wstat(paths.sysconf, &buf)) + if (0 == wstat(paths.data, &buf) && 0 == wstat(paths.sysconf, &buf) && + 0 == wstat(paths.doc, &buf)) { done = true; } @@ -202,7 +203,7 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0) /* Fall back to what got compiled in. */ paths.data = L"" DATADIR "/fish"; paths.sysconf = L"" SYSCONFDIR "/fish"; - paths.doc = L"" DATADIR "/doc/fish"; + paths.doc = L"" DOCDIR; paths.bin = L"" BINDIR; done = true; @@ -365,18 +366,15 @@ static int fish_parse_opt(int argc, char **argv, std::vector *out_c is_login |= (strcmp(argv[0], "-fish") == 0); - /* - We are an interactive session if we have not been given an - explicit command to execute, _and_ stdin is a tty. - */ - is_interactive_session &= ! has_cmd; - is_interactive_session &= (my_optind == argc); - is_interactive_session &= isatty(STDIN_FILENO); - - /* - We are also an interactive session if we have are forced- - */ - is_interactive_session |= force_interactive; + /* We are an interactive session if we are either forced, or have not been given an explicit command to execute and stdin is a tty. */ + if (force_interactive) + { + is_interactive_session = true; + } + else if (is_interactive_session) + { + is_interactive_session = ! has_cmd && (my_optind == argc) && isatty(STDIN_FILENO); + } return my_optind; } @@ -389,7 +387,6 @@ int main(int argc, char **argv) set_main_thread(); setup_fork_guards(); - save_term_foreground_process_group(); wsetlocale(LC_ALL, L""); is_interactive_session=1; @@ -410,6 +407,12 @@ int main(int argc, char **argv) no_exec = 0; } + /* Only save (and therefore restore) the fg process group if we are interactive. See #197, #1002 */ + if (is_interactive_session) + { + save_term_foreground_process_group(); + } + const struct config_paths_t paths = determine_config_directory_paths(argv[0]); proc_init(); @@ -511,6 +514,7 @@ int main(int argc, char **argv) proc_fire_event(L"PROCESS_EXIT", EVENT_EXIT, getpid(), res); + restore_term_mode(); restore_term_foreground_process_group(); history_destroy(); proc_destroy(); diff --git a/fish.spec.in b/fish.spec.in deleted file mode 100644 index 0b57e96bd..000000000 --- a/fish.spec.in +++ /dev/null @@ -1,221 +0,0 @@ -Summary: A friendly interactive shell -Name: @PACKAGE_NAME@ - -Version: @PACKAGE_VERSION@ -Release: 0%{?dist} - -License: GPL -Group: System Environment/Shells -URL: http://fishshell.com/ - -Source0: http://ridiculousfish.com/shell/files/%{version}/%{name}-%{version}.tar.bz2 - -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: ncurses-devel gettext groff - - -# Locate correct build time-dependencies for providing X headers -%if "%fedora" >= "5" - -# Modern Fedora version, has modular X.org -BuildRequires: xorg-x11-proto-devel libX11-devel libXt-devel libXext-devel - -%endif - -%if "%fedora" < "5" -%if "%fedora" >= "3" - -# Semi-old Fedora version, has non-modular X.org -BuildRequires: xorg-x11-devel - -%endif -%endif - -%if 0%{?fedora} -%if "%fedora" < "3" - -# Ancient Fedora version, has XFree86 -BuildRequires: XFree86-devel - -%endif -%else - -# The %fedora variable has not been correctly defined, or this is is -# not a Fedora system, try guessing BuildRequires by looking at the -# directory structure -%define xinclude /usr%(if [ -d /usr/X11R6/include ]; then echo /X11R6; fi)/include -BuildRequires: %{xinclude}/X11/StringDefs.h, %{xinclude}/X11/Xlib.h -BuildRequires: %{xinclude}/X11/Intrinsic.h, %{xinclude}/X11/Xatom.h - -%endif - - -%description - -fish is a shell geared towards interactive use. Its features are -focused on user friendliness and discoverability. The language syntax -is simple but incompatible with other shell languages. - - -%prep -%setup -q - - - - -%build -# The docdir argument is to make the name of the cosumantation -# directory 'fish-VERSION', instead of the default, which is simply -# 'fish'. -%configure docdir=%_datadir/doc/%{name}-%{version} -make %{?_smp_mflags} - - - - -%install -rm -rf $RPM_BUILD_ROOT -make install DESTDIR="$RPM_BUILD_ROOT" - -# Find translation files -%find_lang %{name}.\* - - - -%clean -rm -rf $RPM_BUILD_ROOT - - - - -%post -# Add fish to the list of allowed shells in /etc/shells -if ! grep %_bindir/fish %_sysconfdir/shells >/dev/null; then - echo %_bindir/fish >>%_sysconfdir/shells -fi - - - - -%postun -# Remove fish from the list of allowed shells in /etc/shells -if [ "$1" = 0 ]; then - grep -v %_bindir/fish %_sysconfdir/shells >%_sysconfdir/fish.tmp - mv %_sysconfdir/fish.tmp %_sysconfdir/shells -fi - - - - -%files -f %{name}.\*.lang - -%defattr(-,root,root,-) - -# The documentation directory -%doc %_datadir/doc/%{name}-%{version} - -# man files -%_mandir/man1/fish.1* -%_mandir/man1/fish_pager.1* -%_mandir/man1/fish_indent.1* -%_mandir/man1/fishd.1* -%_mandir/man1/mimedb.1* -%_mandir/man1/set_color.1* - -# The program binaries -%attr(0755,root,root) %_bindir/fish -%attr(0755,root,root) %_bindir/fish_indent -%attr(0755,root,root) %_bindir/fish_pager -%attr(0755,root,root) %_bindir/fishd -%attr(0755,root,root) %_bindir/mimedb -%attr(0755,root,root) %_bindir/set_color - -# Configuration files -%config %_sysconfdir/fish/config.fish -%dir %_sysconfdir/fish - -# Non-configuration initialization files -%dir %_datadir/fish -%_datadir/fish/config.fish - -# Program specific tab-completions -%dir %_datadir/fish/completions -%_datadir/fish/completions/*.fish - -# Dynamically loaded shellscript functions -%dir %_datadir/fish/functions -%_datadir/fish/functions/*.fish - -# Documentation for builtins and shellscript functions -%dir %_datadir/fish/man -%_datadir/fish/man/*.1 - - - -%changelog -* Sat Apr 21 2007 Axel Liljencrantz 1.23.0-0 -- Add fish_indent command - -* Thu Feb 8 2007 Axel Liljencrantz 1.22.3-0 -- Tell rpm about the help pages in %_datadir/fish/man/ - -* Sat Oct 14 2006 Axel Liljencrantz 1.22.0-0 -- Update names of various configuration files - -* Fri Aug 4 2006 Axel Liljencrantz 1.21.10-4 -- Add better translation finding code from fedora spec to main spec. Thank you to Michael Schwendt. -- Add missing dependency libXext-devel. -- Remove one nesting level from dependency checking code. - -* Tue Aug 1 2006 Axel Liljencrantz 1.21.10-1 -- Improved the dependency check for X headers. Thank you to Michael Schwendt for pointers on how to do this - -* Mon Jul 31 2006 Axel Liljencrantz 1.21.10-1 -- Fixed spelling and punctuation as a per patch from Paul Howarth -- Fixed dependencies as per patch from Paul Howarth - -* Tue Nov 29 2005 Axel Liljencrantz 1.17.0-0 -- 1.17.0 - -* Sat Sep 24 2005 Axel Liljencrantz 1.14.0-0 -- 1.14.0 - -* Mon Sep 12 2005 Axel Liljencrantz 1.13.4-0 -- 1.13.4 - -* Wed Sep 07 2005 Axel Liljencrantz 1.13.3-0 -- 1.13.3 - -* Tue Sep 06 2005 Axel Liljencrantz 1.13.2-0 -- 1.13.2 - -* Fri Aug 30 2005 Axel Liljencrantz 1.13.1-0 -- 1.13.1 - -* Sun Aug 28 2005 Axel Liljencrantz 1.13.0-0 -- 1.13.0 - -* Sat Aug 13 2005 Axel Liljencrantz 1.13.0-0 -- Add completions subdirectory - -* Thu Jul 28 2005 Axel Liljencrantz 1.12.1-0 -- 1.12.1 - -* Fri Jul 15 2005 Axel Liljencrantz 1.12.0-1 -- 1.12.0 - -* Thu Jun 30 2005 Michael Schwendt 1.11.1-9 -- Set CFLAGS the proper way - -* Thu Jun 30 2005 Axel Liljencrantz 1.11.1-8 -- Fix revision number in changelog - -* Wed Jun 29 2005 Axel Liljencrantz 1.11.1-7 -- Send post-script output to /dev/null - -* Wed Jun 29 2005 Axel Liljencrantz 1.11.1-6 -- Add changelog section to spec file -- Add macros to source tags -- Add smp_mflags to 'make all' -- Fix typo in post install scriptlet test -- Set CFLAGS from spec file diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index 9f1ad217b..adb43ad0b 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -1190,6 +1190,7 @@ "DATADIR=L\\\"/usr/local/share\\\"", "SYSCONFDIR=L\\\"/usr/local/etc\\\"", "BINDIR=L\\\"/usr/local/bin\\\"", + "DOCDIR=L\\\"/usr/local/share/doc\\\"", "FISH_BUILD_VERSION=\\\"2.1.0\\\"", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1342,6 +1343,7 @@ "DATADIR=L\\\"/usr/local/share\\\"", "SYSCONFDIR=L\\\"/usr/local/etc\\\"", "BINDIR=L\\\"/usr/local/bin\\\"", + "DOCDIR=L\\\"/usr/local/share/doc\\\"", "FISH_BUILD_VERSION=\\\"2.1.0\\\"", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; @@ -1370,6 +1372,7 @@ "DATADIR=L\\\"/usr/local/share\\\"", "SYSCONFDIR=L\\\"/usr/local/etc\\\"", "BINDIR=L\\\"/usr/local/bin\\\"", + "DOCDIR=L\\\"/usr/local/share/doc\\\"", "FISH_BUILD_VERSION=\\\"2.1.0\\\"", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; diff --git a/fish_indent.cpp b/fish_indent.cpp index 3b54d008d..c4d6d81cd 100644 --- a/fish_indent.cpp +++ b/fish_indent.cpp @@ -106,8 +106,8 @@ static int indent(wcstring &out, const wcstring &in, int flags) int next_indent = indent; is_command = 0; - wcstring unesc = last; - unescape_string(unesc, UNESCAPE_SPECIAL); + wcstring unesc; + unescape_string(last, &unesc, UNESCAPE_SPECIAL); if (parser_keywords_is_block(unesc)) { diff --git a/fish_pager.cpp b/fish_pager.cpp index 9cde933e2..14135d4c7 100644 --- a/fish_pager.cpp +++ b/fish_pager.cpp @@ -1146,7 +1146,7 @@ static void read_array(FILE* file, wcstring_list_t &comp) { buffer.push_back(0); wcstring wcs = str2wcstring(&buffer.at(0)); - if (unescape_string(wcs, false)) + if (unescape_string_in_place(&wcs, false)) { comp.push_back(wcs); } diff --git a/fish_tests.cpp b/fish_tests.cpp index 8b79ef3ac..e7047c4bc 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -65,8 +65,7 @@ /** The number of tests to run */ -//#define ESCAPE_TEST_COUNT 1000000 -#define ESCAPE_TEST_COUNT 10000 +#define ESCAPE_TEST_COUNT 100000 /** The average length of strings to unescape */ @@ -118,45 +117,81 @@ static void err(const wchar_t *blah, ...) wprintf(L"\n"); } +/* Test sane escapes */ +static void test_unescape_sane() +{ + const struct test_t {const wchar_t * input; const wchar_t * expected;} tests[] = + { + {L"abcd", L"abcd"}, + {L"'abcd'", L"abcd"}, + {L"'abcd\\n'", L"abcd\\n"}, + {L"\"abcd\\n\"", L"abcd\\n"}, + {L"\"abcd\\n\"", L"abcd\\n"}, + {L"\\143", L"c"}, + {L"'\\143'", L"\\143"}, + {L"\\n", L"\n"} // \n normally becomes newline + }; + wcstring output; + for (size_t i=0; i < sizeof tests / sizeof *tests; i++) + { + bool ret = unescape_string(tests[i].input, &output, UNESCAPE_DEFAULT); + if (! ret) + { + err(L"Failed to unescape '%ls'\n", tests[i].input); + } + else if (output != tests[i].expected) + { + err(L"In unescaping '%ls', expected '%ls' but got '%ls'\n", tests[i].input, tests[i].expected, output.c_str()); + } + } + + // test for overflow + if (unescape_string(L"echo \\UFFFFFF", &output, UNESCAPE_DEFAULT)) + { + err(L"Should not have been able to unescape \\UFFFFFF\n"); + } + if (unescape_string(L"echo \\U110000", &output, UNESCAPE_DEFAULT)) + { + err(L"Should not have been able to unescape \\U110000\n"); + } + if (! unescape_string(L"echo \\U10FFFF", &output, UNESCAPE_DEFAULT)) + { + err(L"Should have been able to unescape \\U10FFFF\n"); + } + + +} + /** Test the escaping/unescaping code by escaping/unescaping random strings and verifying that the original string comes back. */ -static void test_escape() + +static void test_escape_crazy() { - int i; - wcstring sb; - say(L"Testing escaping and unescaping"); - - for (i=0; i", escaped_string.c_str()); } - - - if (wcscmp(o, u)) + else if (unescaped_string != random_string) { - err(L"Escaping cycle of string %ls produced different string %ls", o, u); - - + err(L"Escaped and then unescaped string '%ls', but got back a different string '%ls'", random_string.c_str(), unescaped_string.c_str()); } - free((void *)e); - free((void *)u); - } } @@ -398,7 +433,7 @@ static void test_fork(void) size_t i, max = 100; for (i=0; i < 100; i++) { - printf("%lu / %lu\n", i+1, max); + printf("%lu / %lu\n", (unsigned long)(i+1), (unsigned long) max); /* Do something horrible to try to trigger an error */ #define THREAD_COUNT 8 #define FORK_COUNT 10 @@ -454,6 +489,50 @@ static void test_fork(void) #undef FORK_COUNT } +// Little function that runs in the main thread +static int test_iothread_main_call(int *addr) +{ + *addr += 1; + return *addr; +} + +// Little function that runs in a background thread, bouncing to the main +static int test_iothread_thread_call(int *addr) +{ + int before = *addr; + iothread_perform_on_main(test_iothread_main_call, addr); + int after = *addr; + + // Must have incremented it at least once + if (before >= after) + { + err(L"Failed to increment from background thread"); + } + return after; +} + +static void test_iothread(void) +{ + say(L"Testing iothreads"); + int *int_ptr = new int(0); + int iterations = 1000; + for (int i=0; i < iterations; i++) + { + iothread_perform(test_iothread_thread_call, (void (*)(int *, int))NULL, int_ptr); + } + + // Now wait until we're done + iothread_drain_all(); + + // Should have incremented it once per thread + if (*int_ptr != iterations) + { + say(L"Expected int to be %d, but instead it was %d", iterations, *int_ptr); + } + + delete int_ptr; +} + /** Test the parser */ @@ -532,7 +611,7 @@ static void test_utils() { say(L"Testing utils"); const wchar_t *a = L"echo (echo (echo hi"; - + const wchar_t *begin = NULL, *end = NULL; parse_util_cmdsubst_extent(a, 0, &begin, &end); if (begin != a || end != begin + wcslen(begin)) err(L"parse_util_cmdsubst_extent failed on line %ld", (long)__LINE__); @@ -542,7 +621,7 @@ static void test_utils() if (begin != a || end != begin + wcslen(begin)) err(L"parse_util_cmdsubst_extent failed on line %ld", (long)__LINE__); parse_util_cmdsubst_extent(a, 3, &begin, &end); if (begin != a || end != begin + wcslen(begin)) err(L"parse_util_cmdsubst_extent failed on line %ld", (long)__LINE__); - + parse_util_cmdsubst_extent(a, 8, &begin, &end); if (begin != a + wcslen(L"echo (")) err(L"parse_util_cmdsubst_extent failed on line %ld", (long)__LINE__); @@ -788,7 +867,7 @@ static void test_path() { err(L"Bug in canonical PATH code"); } - + if (paths_are_equivalent(L"/foo/bar/baz", L"foo/bar/baz")) err(L"Bug in canonical PATH code on line %ld", (long)__LINE__); if (! paths_are_equivalent(L"///foo///bar/baz", L"/foo/bar////baz//")) err(L"Bug in canonical PATH code on line %ld", (long)__LINE__); if (! paths_are_equivalent(L"/foo/bar/baz", L"/foo/bar/baz")) err(L"Bug in canonical PATH code on line %ld", (long)__LINE__); @@ -1279,7 +1358,7 @@ void perf_complete() str[0]=c; reader_set_buffer(str, 0); - complete(str, out, COMPLETION_REQUEST_DEFAULT, NULL); + complete(str, out, COMPLETION_REQUEST_DEFAULT); matches += out.size(); out.clear(); @@ -1299,7 +1378,7 @@ void perf_complete() reader_set_buffer(str, 0); - complete(str, out, COMPLETION_REQUEST_DEFAULT, NULL); + complete(str, out, COMPLETION_REQUEST_DEFAULT); matches += out.size(); out.clear(); @@ -1836,12 +1915,14 @@ int main(int argc, char **argv) reader_init(); env_init(); + test_unescape_sane(); + test_escape_crazy(); test_format(); - test_escape(); test_convert(); test_convert_nulls(); test_tok(); test_fork(); + test_iothread(); test_parser(); test_utils(); test_escape_sequences(); diff --git a/fishd.cpp b/fishd.cpp index edb79c22f..5e2a36483 100644 --- a/fishd.cpp +++ b/fishd.cpp @@ -694,7 +694,7 @@ static void daemonize() } /* - Put ourself in out own processing group + Put ourself in our own process group */ setsid(); diff --git a/highlight.cpp b/highlight.cpp index fd5ffb790..fd7aa481e 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -710,7 +710,7 @@ static bool autosuggest_parse_command(const wcstring &str, wcstring *out_command { /* Command. First check that the command actually exists. */ wcstring local_cmd = tok_last(&tok); - bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES); + bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS); if (! expanded || has_expand_reserved(cmd.c_str())) { /* We can't expand this cmd, ignore it */ @@ -826,8 +826,8 @@ bool autosuggest_suggest_special(const wcstring &str, const wcstring &working_di outSuggestion.clear(); /* Unescape the parameter */ - wcstring unescaped_dir = escaped_dir; - bool unescaped = unescape_string(unescaped_dir, UNESCAPE_INCOMPLETE); + wcstring unescaped_dir; + bool unescaped = unescape_string(escaped_dir, &unescaped_dir, UNESCAPE_INCOMPLETE); /* Determine the quote type we got from the input directory. */ wchar_t quote = L'\0'; @@ -1404,12 +1404,13 @@ void highlight_shell(const wcstring &buff, std::vector &color, size_t pos, if (tok_begin && tok_end) { wcstring token(tok_begin, tok_end-tok_begin); - const wcstring_list_t working_directory_list(1, working_directory); - if (unescape_string(token, 1)) + if (unescape_string_in_place(&token, UNESCAPE_SPECIAL)) { /* Big hack: is_potential_path expects a tilde, but unescape_string gives us HOME_DIRECTORY. Put it back. */ if (! token.empty() && token.at(0) == HOME_DIRECTORY) token.at(0) = L'~'; + + const wcstring_list_t working_directory_list(1, working_directory); if (is_potential_path(token, working_directory_list, PATH_EXPAND_TILDE)) { for (ptrdiff_t i=tok_begin-cbuff; i < (tok_end-cbuff); i++) diff --git a/history.cpp b/history.cpp index f167f6e40..f8183f5d8 100644 --- a/history.cpp +++ b/history.cpp @@ -286,7 +286,7 @@ static void append_yaml_to_buffer(const wcstring &wcmd, time_t timestamp, const buffer->append("- cmd: ", cmd.c_str(), "\n"); char timestamp_str[96]; - snprintf(timestamp_str, sizeof timestamp_str, "%ld", timestamp); + snprintf(timestamp_str, sizeof timestamp_str, "%ld", (long) timestamp); buffer->append(" when: ", timestamp_str, "\n"); if (! required_paths.empty()) @@ -413,6 +413,13 @@ static size_t offset_of_next_item_fish_2_0(const char *begin, size_t mmap_length bool has_timestamp = false; time_t timestamp; const char *interior_line; + + /* + * Ensure the loop is processed at least once. Otherwise, + * timestamp is unitialized. + */ + bool processed_once = false; + for (interior_line = next_line(line_start, end - line_start); interior_line != NULL && ! has_timestamp; interior_line = next_line(interior_line, end - interior_line)) @@ -427,8 +434,12 @@ static size_t offset_of_next_item_fish_2_0(const char *begin, size_t mmap_length /* Try parsing a timestamp from this line. If we succeed, the loop will break. */ has_timestamp = parse_timestamp(interior_line, ×tamp); + + processed_once = true; } + assert(processed_once); + /* Skip this item if the timestamp is past our cutoff. */ if (has_timestamp && timestamp > cutoff_timestamp) { @@ -629,7 +640,7 @@ void history_t::get_string_representation(wcstring &result, const wcstring &sepa scoped_lock locker(lock); bool first = true; - + std::set seen; /* Append new items. Note that in principle we could use const_reverse_iterator, but we do not because reverse_iterator is not convertible to const_reverse_iterator ( http://github.com/fish-shell/fish-shell/issues/431 ) */ @@ -638,7 +649,7 @@ void history_t::get_string_representation(wcstring &result, const wcstring &sepa /* Skip duplicates */ if (! seen.insert(iter->str()).second) continue; - + if (! first) result.append(separator); result.append(iter->str()); @@ -651,11 +662,11 @@ void history_t::get_string_representation(wcstring &result, const wcstring &sepa { size_t offset = *iter; const history_item_t item = history_t::decode_item(mmap_start + offset, mmap_length - offset, mmap_type); - + /* Skip duplicates */ if (! seen.insert(item.str()).second) continue; - + if (! first) result.append(separator); result.append(item.str()); @@ -1731,8 +1742,9 @@ void history_t::add_with_file_detection(const wcstring &str) const wchar_t *token_cstr = tok_last(&tokenizer); if (token_cstr) { - wcstring potential_path = token_cstr; - if (unescape_string(potential_path, false) && string_could_be_path(potential_path)) + wcstring potential_path; + bool unescaped = unescape_string(token_cstr, &potential_path, UNESCAPE_DEFAULT); + if (unescaped && string_could_be_path(potential_path)) { potential_paths.push_back(potential_path); diff --git a/input.cpp b/input.cpp index b587fcbac..51f658afc 100644 --- a/input.cpp +++ b/input.cpp @@ -60,6 +60,8 @@ #include "intern.h" #include +#define DEFAULT_TERM L"ansi" + /** Struct representing a keybinding. Returned by input_get_mappings. */ @@ -346,13 +348,29 @@ int input_init() input_common_init(&interrupt_handler); + const env_var_t term = env_get_string(L"TERM"); int errret; if (setupterm(0, STDOUT_FILENO, &errret) == ERR) { debug(0, _(L"Could not set up terminal")); - exit_without_destructors(1); + if (errret == 0) + { + debug(0, _(L"Check that your terminal type, '%ls', is supported on this system"), + term.c_str()); + debug(0, _(L"Attempting to use '%ls' instead"), DEFAULT_TERM); + env_set(L"TERM", DEFAULT_TERM, ENV_GLOBAL | ENV_EXPORT); + const std::string default_term = wcs2string(DEFAULT_TERM); + if (setupterm(const_cast(default_term.c_str()), STDOUT_FILENO, &errret) == ERR) + { + debug(0, _(L"Could not set up terminal")); + exit_without_destructors(1); + } + } + else + { + exit_without_destructors(1); + } } - const env_var_t term = env_get_string(L"TERM"); assert(! term.missing()); output_set_term(term); diff --git a/io.cpp b/io.cpp index 1ee36e72d..3395942c2 100644 --- a/io.cpp +++ b/io.cpp @@ -71,7 +71,7 @@ void io_pipe_t::print() const void io_buffer_t::print() const { fprintf(stderr, "buffer %p (input: %s, size %lu)\n", out_buffer_ptr(), - is_input ? "yes" : "no", out_buffer_size()); + is_input ? "yes" : "no", (unsigned long) out_buffer_size()); } void io_buffer_t::read() diff --git a/iothread.cpp b/iothread.cpp index 54117dc04..736467925 100644 --- a/iothread.cpp +++ b/iothread.cpp @@ -22,6 +22,11 @@ #define IO_MAX_THREADS 64 #endif +/* A special "thread index" that means service main thread requests */ +#define IO_SERVICE_MAIN_THREAD_REQUEST_QUEUE 99 + +static void iothread_service_main_thread_requests(void); + static int s_active_thread_count; typedef unsigned char ThreadIndex_t; @@ -32,16 +37,22 @@ static struct WorkerThread_t pthread_t thread; } threads[IO_MAX_THREADS]; -struct ThreadedRequest_t +struct SpawnRequest_t { - int sequenceNumber; - int (*handler)(void *); void (*completionCallback)(void *, int); void *context; int handlerResult; }; +struct MainThreadRequest_t +{ + int (*handler)(void *); + void *context; + volatile int handlerResult; + volatile bool done; +}; + static struct WorkerThread_t *next_vacant_thread_slot(void) { for (ThreadIndex_t i=0; i < IO_MAX_THREADS; i++) @@ -51,9 +62,17 @@ static struct WorkerThread_t *next_vacant_thread_slot(void) return NULL; } -static pthread_mutex_t s_request_queue_lock; -static std::queue s_request_queue; -static int s_last_sequence_number; +/* Spawn support */ +static pthread_mutex_t s_spawn_queue_lock; +static std::queue s_request_queue; + +/* "Do on main thread" support */ +static pthread_mutex_t s_main_thread_performer_lock; // protects the main thread requests +static pthread_cond_t s_main_thread_performer_condition; //protects the main thread requests +static pthread_mutex_t s_main_thread_request_queue_lock; // protects the queue +static std::queue s_main_thread_request_queue; + +/* Notifying pipes */ static int s_read_pipe, s_write_pipe; static void iothread_init(void) @@ -63,8 +82,11 @@ static void iothread_init(void) { inited = true; - /* Initialize the queue lock */ - VOMIT_ON_FAILURE(pthread_mutex_init(&s_request_queue_lock, NULL)); + /* Initialize some locks */ + VOMIT_ON_FAILURE(pthread_mutex_init(&s_spawn_queue_lock, NULL)); + VOMIT_ON_FAILURE(pthread_mutex_init(&s_main_thread_request_queue_lock, NULL)); + VOMIT_ON_FAILURE(pthread_mutex_init(&s_main_thread_performer_lock, NULL)); + VOMIT_ON_FAILURE(pthread_cond_init(&s_main_thread_performer_condition, NULL)); /* Initialize the completion pipes */ int pipes[2] = {0, 0}; @@ -84,16 +106,16 @@ static void iothread_init(void) } } -static void add_to_queue(struct ThreadedRequest_t *req) +static void add_to_queue(struct SpawnRequest_t *req) { - ASSERT_IS_LOCKED(s_request_queue_lock); + ASSERT_IS_LOCKED(s_spawn_queue_lock); s_request_queue.push(req); } -static ThreadedRequest_t *dequeue_request(void) +static SpawnRequest_t *dequeue_spawn_request(void) { - ThreadedRequest_t *result = NULL; - scoped_lock lock(s_request_queue_lock); + SpawnRequest_t *result = NULL; + scoped_lock lock(s_spawn_queue_lock); if (! s_request_queue.empty()) { result = s_request_queue.front(); @@ -109,7 +131,7 @@ static void *iothread_worker(void *threadPtr) struct WorkerThread_t *thread = (struct WorkerThread_t *)threadPtr; /* Grab a request off of the queue */ - struct ThreadedRequest_t *req = dequeue_request(); + struct SpawnRequest_t *req = dequeue_spawn_request(); /* Run the handler and store the result */ if (req) @@ -127,7 +149,7 @@ static void *iothread_worker(void *threadPtr) /* Spawn another thread if there's work to be done. */ static void iothread_spawn_if_needed(void) { - ASSERT_IS_LOCKED(s_request_queue_lock); + ASSERT_IS_LOCKED(s_spawn_queue_lock); if (! s_request_queue.empty() && s_active_thread_count < IO_MAX_THREADS) { struct WorkerThread_t *thread = next_vacant_thread_slot(); @@ -168,14 +190,13 @@ int iothread_perform_base(int (*handler)(void *), void (*completionCallback)(voi iothread_init(); /* Create and initialize a request. */ - struct ThreadedRequest_t *req = new ThreadedRequest_t(); + struct SpawnRequest_t *req = new SpawnRequest_t(); req->handler = handler; req->completionCallback = completionCallback; req->context = context; - req->sequenceNumber = ++s_last_sequence_number; /* Take our lock */ - scoped_lock lock(s_request_queue_lock); + scoped_lock lock(s_spawn_queue_lock); /* Add to the queue */ add_to_queue(req); @@ -196,31 +217,38 @@ void iothread_service_completion(void) ASSERT_IS_MAIN_THREAD(); ThreadIndex_t threadIdx = (ThreadIndex_t)-1; VOMIT_ON_FAILURE(1 != read_loop(iothread_port(), &threadIdx, sizeof threadIdx)); - assert(threadIdx < IO_MAX_THREADS); - struct WorkerThread_t *thread = &threads[threadIdx]; - assert(thread->thread != 0); - - struct ThreadedRequest_t *req = NULL; - VOMIT_ON_FAILURE(pthread_join(thread->thread, (void **)&req)); - - /* Free up this thread */ - thread->thread = 0; - assert(s_active_thread_count > 0); - s_active_thread_count -= 1; - - /* Handle the request */ - if (req) + if (threadIdx == IO_SERVICE_MAIN_THREAD_REQUEST_QUEUE) { - if (req->completionCallback) - req->completionCallback(req->context, req->handlerResult); - delete req; + iothread_service_main_thread_requests(); } + else + { + assert(threadIdx < IO_MAX_THREADS); - /* Maybe spawn another thread, if there's more work to be done. */ - VOMIT_ON_FAILURE(pthread_mutex_lock(&s_request_queue_lock)); - iothread_spawn_if_needed(); - VOMIT_ON_FAILURE(pthread_mutex_unlock(&s_request_queue_lock)); + struct WorkerThread_t *thread = &threads[threadIdx]; + assert(thread->thread != 0); + + struct SpawnRequest_t *req = NULL; + VOMIT_ON_FAILURE(pthread_join(thread->thread, (void **)&req)); + + /* Free up this thread */ + thread->thread = 0; + assert(s_active_thread_count > 0); + s_active_thread_count -= 1; + + /* Handle the request */ + if (req) + { + if (req->completionCallback) + req->completionCallback(req->context, req->handlerResult); + delete req; + } + + /* Maybe spawn another thread, if there's more work to be done. */ + scoped_lock locker(s_spawn_queue_lock); + iothread_spawn_if_needed(); + } } void iothread_drain_all(void) @@ -243,3 +271,72 @@ void iothread_drain_all(void) printf("(Waited %.02f msec for %d thread(s) to drain)\n", 1000 * (after - now), thread_count); #endif } + +/* "Do on main thread" support */ + +static void iothread_service_main_thread_requests(void) +{ + ASSERT_IS_MAIN_THREAD(); + + // Move the queue to a local variable + std::queue request_queue; + { + scoped_lock queue_lock(s_main_thread_request_queue_lock); + std::swap(request_queue, s_main_thread_request_queue); + } + + if (! request_queue.empty()) + { + // Perform each of the functions + // Note we are NOT responsible for deleting these. They are stack allocated in their respective threads! + scoped_lock cond_lock(s_main_thread_performer_lock); + while (! request_queue.empty()) + { + MainThreadRequest_t *req = request_queue.front(); + request_queue.pop(); + req->handlerResult = req->handler(req->context); + req->done = true; + } + + // Ok, we've handled everybody. Announce the good news, and allow ourselves to be unlocked + VOMIT_ON_FAILURE(pthread_cond_broadcast(&s_main_thread_performer_condition)); + } +} + +int iothread_perform_on_main_base(int (*handler)(void *), void *context) +{ + // If this is the main thread, just do it + if (is_main_thread()) + { + return handler(context); + } + + // Make a new request. Note we are synchronous, so this can be stack allocated! + MainThreadRequest_t req; + req.handler = handler; + req.context = context; + req.handlerResult = 0; + req.done = false; + + // Append it + { + scoped_lock queue_lock(s_main_thread_request_queue_lock); + s_main_thread_request_queue.push(&req); + } + + // Tell the pipe + const ThreadIndex_t idx = IO_SERVICE_MAIN_THREAD_REQUEST_QUEUE; + VOMIT_ON_FAILURE(! write_loop(s_write_pipe, (const char *)&idx, sizeof idx)); + + // Wait on the condition, until we're done + scoped_lock perform_lock(s_main_thread_performer_lock); + while (! req.done) + { + // It would be nice to support checking for cancellation here, but the clients need a deterministic way to clean up to avoid leaks + VOMIT_ON_FAILURE(pthread_cond_wait(&s_main_thread_performer_condition, &s_main_thread_performer_lock)); + } + + // Ok, the request must now be done + assert(req.done); + return req.handlerResult; +} diff --git a/iothread.h b/iothread.h index 88c4a430c..8ac3bd9d8 100644 --- a/iothread.h +++ b/iothread.h @@ -28,11 +28,22 @@ void iothread_service_completion(void); /** Waits for all iothreads to terminate. */ void iothread_drain_all(void); -/** Helper template */ +/** Performs a function on the main thread, blocking until it completes */ +int iothread_perform_on_main_base(int (*handler)(void *), void *context); + +/** Helper templates */ template int iothread_perform(int (*handler)(T *), void (*completionCallback)(T *, int), T *context) { return iothread_perform_base((int (*)(void *))handler, (void (*)(void *, int))completionCallback, static_cast(context)); } +/** Helper templates */ +template +int iothread_perform_on_main(int (*handler)(T *), T *context) +{ + return iothread_perform_on_main_base((int (*)(void *))handler, (void *)(context)); +} + + #endif diff --git a/parse_util.cpp b/parse_util.cpp index 5d8a1b1d0..3cf407d15 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -245,10 +245,10 @@ void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wc const wchar_t * const cursor = buff + cursor_pos; CHECK(buff,); - + const size_t bufflen = wcslen(buff); assert(cursor_pos <= bufflen); - + /* ap and bp are the beginning and end of the tightest command substitition found so far */ const wchar_t *ap = buff, *bp = buff + bufflen; const wchar_t *pos = buff; @@ -265,7 +265,7 @@ void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wc { end = const_cast(buff) + bufflen; } - + if (begin < cursor && end >= cursor) { /* This command substitution surrounds the cursor, so it's a tighter fit */ @@ -290,7 +290,7 @@ void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wc assert(pos <= buff + bufflen); } } - + if (a != NULL) *a = ap; if (b != NULL) *b = bp; } @@ -383,7 +383,7 @@ static void job_or_process_extent(const wchar_t *buff, break; } - + default: { break; diff --git a/parser.cpp b/parser.cpp index 72b46c9f8..328e331a9 100644 --- a/parser.cpp +++ b/parser.cpp @@ -2013,7 +2013,7 @@ int parser_t::parse_job(process_t *p, { const wchar_t *cmd = args.at(0).completion.c_str(); - + /* We couldn't find the specified command. @@ -2036,20 +2036,20 @@ int parser_t::parse_job(process_t *p, if (equals_ptr != NULL) { /* Try to figure out if this is a pure variable assignment (foo=bar), or if this appears to be running a command (foo=bar ruby...) */ - + const wcstring name_str = wcstring(cmd, equals_ptr - cmd); //variable name, up to the = const wcstring val_str = wcstring(equals_ptr + 1); //variable value, past the = - + wcstring next_str; if (tok_peek_next(tok, &next_str) == TOK_STRING && ! next_str.empty()) { wcstring ellipsis_str = wcstring(1, ellipsis_char); if (ellipsis_str == L"$") ellipsis_str = L"..."; - + /* Looks like a command */ debug(0, - _( L"Unknown command '%ls'. Did you mean to run %ls with a modified environment? Try 'env %ls=%ls %ls%ls'. See the help section on the set command by typing 'help set'."), + _(L"Unknown command '%ls'. Did you mean to run %ls with a modified environment? Try 'env %ls=%ls %ls%ls'. See the help section on the set command by typing 'help set'."), cmd, next_str.c_str(), name_str.c_str(), @@ -2728,8 +2728,6 @@ const wchar_t *parser_get_block_command(int type) */ int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wchar_t *prefix, int offset) { - wchar_t *unesc; - wchar_t *pos; int err=0; wchar_t *paran_begin, *paran_end; @@ -2791,8 +2789,8 @@ int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wcha } } - unesc = unescape(arg_cpy, 1); - if (!unesc) + wcstring unesc; + if (! unescape_string(arg_cpy, &unesc, UNESCAPE_SPECIAL)) { if (out) { @@ -2805,26 +2803,25 @@ int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wcha } else { - /* - Check for invalid variable expansions - */ - for (pos = unesc; *pos; pos++) + /* Check for invalid variable expansions */ + const size_t unesc_size = unesc.size(); + for (size_t idx = 0; idx < unesc_size; idx++) { - switch (*pos) + switch (unesc.at(idx)) { case VARIABLE_EXPAND: case VARIABLE_EXPAND_SINGLE: { - wchar_t n = *(pos+1); + wchar_t next_char = (idx + 1 < unesc_size ? unesc.at(idx + 1) : L'\0'); - if (n != VARIABLE_EXPAND && - n != VARIABLE_EXPAND_SINGLE && - !wcsvarchr(n)) + if (next_char != VARIABLE_EXPAND && + next_char != VARIABLE_EXPAND_SINGLE && + ! wcsvarchr(next_char)) { err=1; if (out) { - expand_variable_error(*this, unesc, pos-unesc, offset); + expand_variable_error(*this, unesc, idx, offset); print_errors(*out, prefix); } } @@ -2837,7 +2834,6 @@ int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wcha free(arg_cpy); - free(unesc); return err; } diff --git a/path.cpp b/path.cpp index 4649e8051..a2912f7b5 100644 --- a/path.cpp +++ b/path.cpp @@ -400,7 +400,7 @@ void path_make_canonical(wcstring &path) path.at(trailing++) = c; } prev_was_slash = is_slash; - } + } assert(trailing <= len); if (trailing < len) path.resize(trailing); @@ -410,32 +410,32 @@ bool paths_are_equivalent(const wcstring &p1, const wcstring &p2) { if (p1 == p2) return true; - + size_t len1 = p1.size(), len2 = p2.size(); - + // Ignore trailing slashes after the first character while (len1 > 1 && p1.at(len1 - 1) == L'/') len1--; while (len2 > 1 && p2.at(len2 - 1) == L'/') len2--; - + // Start walking size_t idx1 = 0, idx2 = 0; while (idx1 < len1 && idx2 < len2) { wchar_t c1 = p1.at(idx1), c2 = p2.at(idx2); - + // If the characters are different, the strings are not equivalent if (c1 != c2) break; - + idx1++; idx2++; - + // If the character was a slash, walk forwards until we hit the end of the string, or a non-slash // Note the first condition is invariant within the loop while (c1 == L'/' && idx1 < len1 && p1.at(idx1) == L'/') idx1++; while (c2 == L'/' && idx2 < len2 && p2.at(idx2) == L'/') idx2++; } - + // We matched if we consumed all of the characters in both strings return idx1 == len1 && idx2 == len2; } diff --git a/po/de.po b/po/de.po index 75d1a4a29..2d6979b33 100644 --- a/po/de.po +++ b/po/de.po @@ -2,24 +2,25 @@ # This file is distributed under the same license as the PACKAGE package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # Hermann J. Beckers , 2006. +# Benjamin Weis , 2013 # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-16 20:57+0100\n" -"PO-Revision-Date: 2006-02-12 13:33GMT\n" -"Last-Translator: Hermann J. Beckers \n" +"PO-Revision-Date: 2013-11-01 18:36+0100\n" +"Last-Translator: Benjamin\n" "Language-Team: deutsch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.3\n" +"X-Generator: Lokalize 1.5\n" #: builtin.c:80 #, c-format msgid "Send job %d, '%ls' to foreground\n" -msgstr "Sende Job %d, '%ls' in den Vordergrund\n" +msgstr "Job %d, '%ls' in den Vordergrund schicken\n" #: builtin.c:370 #, c-format @@ -34,7 +35,7 @@ msgstr "%ls: Keine Bl #: builtin.c:830 builtin.h:28 #, c-format msgid "%ls: Invalid combination of options\n" -msgstr "%ls: Kombination der Optionen ungültig\n" +msgstr "%ls: Ungültige Kombination der Optionen\n" #: builtin.c:854 #, c-format @@ -72,7 +73,7 @@ msgstr "%ls: Kann aufrufenden Job zur Ereignisbehandlung nicht finden\n" #: builtin.c:1191 #, c-format msgid "%ls: Invalid process id %ls\n" -msgstr "%ls: Ungültige Prozess-ID %ls\n" +msgstr "%ls: Ungültige Prozesskennung %ls\n" #: builtin.c:1228 #, c-format @@ -124,8 +125,10 @@ msgstr "%ls: Konnte Startverzeichnis nicht finden\n" #: builtin.c:1928 #, c-format -msgid "%ls: '%ls' is not a directory or you do not have permission to enter it\n" -msgstr "%ls: '%ls' ist kein Verzeichnis oder Sie haben keine Rechte zum Wechseln\n" +msgid "" +"%ls: '%ls' is not a directory or you do not have permission to enter it\n" +msgstr "" +"%ls: '%ls' ist kein Verzeichnis oder Sie haben keine Rechte zum Wechseln\n" #: builtin.c:1940 #, c-format @@ -135,7 +138,7 @@ msgstr "%ls: '%ls' ist kein Verzeichnis\n" #: builtin.c:1955 #, c-format msgid "%ls: Could not set PWD variable\n" -msgstr "%ls: Konnte PWD-Variable nicht setzen\n" +msgstr "%ls: Konnte PWD-Variable nicht festlegen\n" #: builtin.c:2110 #, c-format @@ -261,7 +264,7 @@ msgstr "%ls: Nicht innerhalb einer Funktion\n" #: builtin.c:3147 #, c-format msgid "%ls: 'case' command while not in switch block\n" -msgstr "%ls: 'case'-Befehl ausserhalb eines switch-Blocks\n" +msgstr "%ls: 'case'-Befehl außerhalb eines switch-Blocks\n" #: builtin.c:3345 #, c-format @@ -270,7 +273,7 @@ msgstr "unbekannter interner Befehl '%ls'" #: builtin.c:3367 msgid "Temporarily block delivery of events" -msgstr "Blockiere zeitweise Ereignis-Weitergabe" +msgstr "Ereignisweitergabe vorübergehend blockieren" #: builtin.c:3368 msgid "Run a builtin command instead of a function" @@ -294,7 +297,7 @@ msgstr "Neue Funktion definieren" #: builtin.c:3373 msgid "List or remove functions" -msgstr "Funktionen anzeigen oder entfernen" +msgstr "Funktionen auflisten oder entfernen" #: builtin.c:3374 msgid "End a block of commands" @@ -330,11 +333,11 @@ msgstr "Job in Hintergrund schicken" #: builtin.c:3382 msgid "Print currently running jobs" -msgstr "Derzeit laufende Jobs anzeigen" +msgstr "Derzeit laufende Jobs ausgeben" #: builtin.c:3383 msgid "Read a line of input into variables" -msgstr "Eine Eingabe-Zeile in Variablen einlesen" +msgstr "Eine Eingabezeile in Variablen einlesen" #: builtin.c:3384 msgid "Stop the innermost loop" @@ -350,7 +353,7 @@ msgstr "Derzeit ausgewertete Funktion stoppen" #: builtin.c:3387 msgid "Set or get the commandline" -msgstr "Setzen oder Abrufen der Befehlszeile" +msgstr "Festlegen oder Abrufen der Befehlszeile" #: builtin.c:3388 builtin.c:3389 msgid "Conditionally execute a block of commands" @@ -382,7 +385,7 @@ msgstr "Befehl im aktuellen Prozess ausf #: builtin.c:3396 msgid "Negate exit status of job" -msgstr "Exit-Status des Jobs negieren" +msgstr "Exit-Status des Jobs verneinen" #: builtin.c:3397 msgid "Execute command if previous command failed" @@ -394,20 +397,20 @@ msgstr "Befehl ausf #: builtin.c:3399 msgid "Create a block of code" -msgstr "Code-Block erstellen" +msgstr "Codeblock erstellen" #: builtin.c:3400 msgid "Return status information about fish" -msgstr "Status-Information über Fish zurückgeben" +msgstr "Statusinformation über Fish zurückgeben" #: builtin.c:3401 msgid "Set or get the shells resource usage limits" -msgstr "Die Ressourcen-Grenzen der Shell setzen/abrufen" +msgstr "Die Ressourcengrenzen der Shell festlegen/abrufen" #: builtin_set.c:96 #, c-format msgid "%ls: Invalid index starting at '%ls'\n" -msgstr "%ls: Ungüligter Indexstart bei '%ls'\n" +msgstr "%ls: Ungültiger Indexstart bei '%ls'\n" #: builtin_set.c:488 #, c-format @@ -429,7 +432,7 @@ msgstr "" #: complete.c:52 msgid "User home" -msgstr "Anwender-Startverzeichnis" +msgstr "Benutzer-Startverzeichnis" #: complete.c:57 msgid "Variable: " @@ -441,7 +444,7 @@ msgstr "Programm" #: complete.c:66 msgid "Executable link" -msgstr "Programm-Link" +msgstr "Programmlink" #: complete.c:71 msgid "File" @@ -499,7 +502,7 @@ msgstr "Mehrere Treffer f #: env.c:195 msgid "Could not get user information" -msgstr "Kann Anwender-Information nicht abrufen" +msgstr "Kann Benutzerinformation nicht abrufen" #: env.c:291 msgid "Changing language to english" @@ -512,11 +515,11 @@ msgstr "Kein Eintrag im Befehlsverlauf bei Index %d\n" #: env.c:1024 msgid "Tried to pop empty environment stack." -msgstr "" +msgstr "Versuchte, einen leeren Umgebungsstack zu poppen." #: event.c:490 msgid "Signal list overflow. Signals have been ignored." -msgstr "Überlauf Signal-Liste. Signale wurden ignoriert." +msgstr "Signallistenüberlauf. Signale wurden ignoriert." #: exec.c:52 #, c-format @@ -559,13 +562,18 @@ msgstr "Unbekannter Typ %d bei Eingabeumleitung " #: exec.c:1249 #, c-format -msgid "Sent null command to subshell. This is a fish bug. If it can be reproduced, please send a bug report to %s." -msgstr "Sendete Null-Befehl an Untershell. Dies ist ein fish-Bug. Wenn er reproduziert werden kann, senden Sie einen Fehlerbericht an %s." +msgid "" +"Sent null command to subshell. This is a fish bug. If it can be reproduced, " +"please send a bug report to %s." +msgstr "" +"Sendete Null-Befehl an Untershell. Dies ist ein fish-Bug. Wenn er " +"reproduziert werden kann, senden Sie einen Fehlerbericht an %s." #: exec.c:1297 #, c-format msgid "Subshell '%ls' returned illegal string, discarded one entry" -msgstr "Subshell '%ls' gab ungültige Zeichenkette zurück, ein Eintrag verworfen" +msgstr "" +"Subshell '%ls' gab ungültige Zeichenkette zurück, ein Eintrag verworfen" #: input.c:409 msgid "Invalid Control sequence" @@ -578,7 +586,7 @@ msgstr "Konnte Sequenz '%ls' nicht auswerten" #: input.c:687 msgid "Invalid sequence - no dash after control\n" -msgstr "Ungültige Sequenz - kein Strich nach Steuerung\n" +msgstr "Ungültige Sequenz - kein Bindestrich nach Steuerung\n" #: input.c:717 msgid "Invalid sequence - Control-nothing?\n" @@ -586,7 +594,7 @@ msgstr "Ung #: input.c:732 msgid "Invalid sequence - no dash after meta\n" -msgstr "Ungültige Sequenz - kein Strich nach Alt\n" +msgstr "Ungültige Sequenz - kein Bindestrich nach Alt\n" #: input.c:737 msgid "Invalid sequence - Meta-nothing?" @@ -612,7 +620,7 @@ msgstr "Erwartete ein ':'" #: input.c:957 #, c-format msgid "I don't know what '%ls' means" -msgstr "Ich weiss nicht, was '%ls' bedeutet" +msgstr "Ich weiß nicht, was '%ls' bedeutet" #: input.c:961 #, c-format @@ -621,7 +629,7 @@ msgstr "Zeilenende erwartet, erhielt '%ls'" #: input.c:966 msgid "Syntax: set KEY VALUE" -msgstr "Syntax: set Schlüssel Wert" +msgstr "Syntax: set SCHLÜSSEL WERT" #: input.c:1032 msgid "Unable to parse key binding" @@ -630,7 +638,7 @@ msgstr "Konnte Tastenk #: input.c:1058 #, c-format msgid "I don't know what %ls means" -msgstr "Ich weiss nicht, was '%ls' bedeutet" +msgstr "Ich weiß nicht, was '%ls' bedeutet" #: input.c:1084 #, c-format @@ -643,13 +651,16 @@ msgstr "Konnte Terminal nicht einrichten" #: io.c:73 #, c-format -msgid "An error occured while reading output from code block on file descriptor %d" +msgid "" +"An error occured while reading output from code block on file descriptor %d" msgstr "Fehler beim Lesen der Ausgabe des Codeblocks auf Dateideskriptor %d" #: parser.c:56 #, c-format msgid "If this error can be reproduced, please send a bug report to %s." -msgstr "Wenn dieser Fehler reproduziert werden kann, senden Sie bitte einen Fehlerbereicht an %s." +msgstr "" +"Wenn dieser Fehler reproduziert werden kann, senden Sie bitte einen " +"Fehlerbereicht an %s." #: parser.c:61 msgid "This command can not be used in a pipeline" @@ -662,19 +673,23 @@ msgstr "Tokenizer-Fehler: '%ls'" #: parser.c:72 msgid "Short circut command requires additional command" -msgstr "" +msgstr "Ein kurzer Kreisbefehl erfordert einen zusätzlichen Befehl" #: parser.c:77 msgid "Maximum recursion depth reached. Accidental infinite loop?" -msgstr "Maximale Rekursionstiefe erreicht. Zufällige Endlos-Schleife?" +msgstr "Maximale Rekursionstiefe erreicht. Zufällige Endlosschleife?" #: parser.c:82 -msgid "Could not locate end of block. The 'end' command is missing, misspelled or a ';' is missing." -msgstr "Konnte Blockende nicht finden, Der 'end'-Befehl fehlt, ist falsch geschriebne oder ein ':' fehlt." +msgid "" +"Could not locate end of block. The 'end' command is missing, misspelled or a " +"';' is missing." +msgstr "" +"Konnte Blockende nicht finden, Der 'end'-Befehl fehlt, ist falsch geschrieben" +"oder ein ':' fehlt." #: parser.c:87 msgid "Maximum number of nested blocks reached." -msgstr "Maximal-Anzahl geschachtelter Blöcke erreicht." +msgstr "Maximalanzahl geschachtelter Blöcke erreicht." #: parser.c:92 #, c-format @@ -683,13 +698,25 @@ msgstr "Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'" #: parser.c:97 #, c-format -msgid "Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; or COMMAND'? For more information on the 'or' builtin command, see the help section for 'or' by typing 'help or'." -msgstr "Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'. Meinten Sie 'Befehl; or Befehl'? Zu weiteren Informationen über den eingebauten Befehl 'or' schauen Sie in der Hilfe zu 'or' nach oder geben Sie 'help or' ein." +msgid "" +"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; or " +"COMMAND'? For more information on the 'or' builtin command, see the help " +"section for 'or' by typing 'help or'." +msgstr "" +"Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'. Meinten Sie " +"'Befehl; or Befehl'? Zu weiteren Informationen über den eingebauten Befehl " +"'or' schauen Sie in der Hilfe zu 'or' nach oder geben Sie 'help or' ein." #: parser.c:102 #, c-format -msgid "Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; and COMMAND'? For more information on the 'and' builtin command, see the help section for 'and' by typing 'help and'." -msgstr "Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'. Meinten Sie 'Befehl; and Befehl'? Zu weiteren Informationen über den eingebauten Befehl 'and' schauen Sie in der Hilfe zu 'and' nach oder geben Sie 'help and' ein." +msgid "" +"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; and " +"COMMAND'? For more information on the 'and' builtin command, see the help " +"section for 'and' by typing 'help and'." +msgstr "" +"Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'. Meinten Sie " +"'Befehl; and Befehl'? Zu weiteren Informationen über den eingebauten Befehl " +"'and' schauen Sie in der Hilfe zu 'and' nach oder geben Sie 'help and' ein." #: parser.c:107 #, c-format @@ -699,7 +726,9 @@ msgstr "Ung #: parser.c:112 #, c-format msgid "Warning: No match for wildcard '%ls'. The command will not be executed." -msgstr "Warnung: Kein Treffer für Jokerzeichen '%ls'. Der Befehl wird nicht ausgeführt." +msgstr "" +"Warnung: Kein Treffer für Jokerzeichen '%ls'. Der Befehl wird nicht " +"ausgeführt." #: parser.c:117 msgid "'case' builtin not inside of switch block" @@ -707,7 +736,7 @@ msgstr "eingebauter Befehl 'case' nicht innerhalb eines switch-Blocks" #: parser.c:122 msgid "Loop control command while not inside of loop" -msgstr "Schleifensteuerungs-Befehl 'while' nicht innerhalb einer Schleife" +msgstr "Schleifensteuerungsbefehl 'while' nicht innerhalb einer Schleife" #: parser.c:127 msgid "'else' builtin not inside of if block" @@ -715,12 +744,18 @@ msgstr "eingebauter Befehl 'else' nicht innerhalb eines if-Blocks" #: parser.c:132 msgid "'end' command outside of block" -msgstr "'end'-Befehl ausserhalb eines Blocks" +msgstr "'end'-Befehl außerhalb eines Blocks" #: parser.c:137 #, c-format -msgid "Unknown command '%ls'. Did you mean 'set VARIABLE VALUE'? For information on setting variable values, see the help section on the set command by typing 'help set'." -msgstr "Unbekannter Befehl '%ls'. Meinten Sie 'set VARIABLE WERT'? Zu Informationen zum Setzen von Variablen-Werten schauen Sie in der Hilfe zum set-Befehl nach oder geben Sie 'help set' ein." +msgid "" +"Unknown command '%ls'. Did you mean 'set VARIABLE VALUE'? For information on " +"setting variable values, see the help section on the set command by typing " +"'help set'." +msgstr "" +"Unbekannter Befehl '%ls'. Meinten Sie 'set VARIABLE WERT'? Zu Informationen " +"zum Festlegen von Variablenwerten schauen Sie in der Hilfe zum set-Befehl " +"nach oder geben Sie 'help set' ein." #: parser.c:142 #, c-format @@ -728,12 +763,16 @@ msgid "Expected redirection specification, got token of type '%ls'" msgstr "Erwartete Umleitungsspezifikation, erhielt Zeichen vom Typ '%ls'" #: parser.c:147 -msgid "Encountered redirection when expecting a command name. Fish does not allow a redirection operation before a command." -msgstr "Umleitung anstelle eines Befehlsnamens. Fish erlaubt keine Umleitung vor einem Befehl." +msgid "" +"Encountered redirection when expecting a command name. Fish does not allow a " +"redirection operation before a command." +msgstr "" +"Umleitung anstelle eines Befehlsnamens. Fish erlaubt keine Umleitung vor " +"einem Befehl." #: parser.c:152 msgid "Tried to evaluate null pointer." -msgstr "Versuchte, einen Null-Zeiger auszuwerten." +msgstr "Versuchte, einen Nullzeiger auszuwerten." #: parser.c:157 #, c-format @@ -764,11 +803,11 @@ msgstr "'if'-Bedingungsblock" #: parser.c:192 msgid "function definition block" -msgstr "Funktionsdefinitons-Block" +msgstr "Funktionsdefinitonsblock" #: parser.c:198 msgid "function invocation block" -msgstr "Funktionsausführungs-Block" +msgstr "Funktionsausführungsblock" #: parser.c:204 msgid "'switch' block" @@ -784,7 +823,7 @@ msgstr "globaler Root-Block" #: parser.c:222 msgid "command substitution block" -msgstr "Befehlsersetzungs-Block" +msgstr "Befehlsersetzungsblock" #: parser.c:228 msgid "'begin' unconditional block" @@ -797,7 +836,7 @@ msgstr "unbekannter/ung #: parser.c:876 #, c-format msgid "Could not write profiling information to file '%s'" -msgstr "Konnte Profilierungs-Informationen nicht in Datei '%s' schreiben" +msgstr "Konnte Profilierungsinformationen nicht in Datei '%s' schreiben" #: parser.c:882 msgid "Time\tSum\tCommand\n" @@ -811,11 +850,11 @@ msgstr "%ls (Zeile %d): " #: parser.c:1222 #, c-format msgid "Could not expand string '%ls'" -msgstr "Konnte Zeichenkette '%ls' nicht expandieren" +msgstr "Konnte Zeichenkette '%ls' nicht erweitern" #: parser.c:1324 msgid "Invalid IO redirection" -msgstr "Ungültige I/O-Umleitung" +msgstr "Ungültige E/A-Umleitung" #: parser.c:1367 #, c-format @@ -833,7 +872,7 @@ msgstr "Unpassendes Blockende. Programm wird beendet." #: proc.c:149 msgid "Job inconsistency" -msgstr "Job-Inkonsistenz" +msgstr "Jobinkonsistenz" #: proc.c:501 #, c-format @@ -847,8 +886,10 @@ msgstr "%ls: Job %d, '%ls' durch Signal %ls (%ls) beendet" #: proc.c:585 #, c-format -msgid "%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "%ls: Prozess %d, '%ls' aus job %d, '%ls' durch Signal %ls (%ls) beendet" +msgid "" +"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "" +"%ls: Prozess %d, '%ls' aus job %d, '%ls' durch Signal %ls (%ls) beendet" #: proc.c:616 msgid "ended" @@ -860,11 +901,11 @@ msgstr "Fehler w #: proc.c:1018 proc.c:1028 proc.c:1038 msgid "Could not return shell to foreground" -msgstr "Konnte Shell nicht wieder in Vordergrund setzen" +msgstr "Konnte Shell nicht wieder in Vordergrund zurückholen" #: proc.c:1061 msgid "Job command" -msgstr "Job-Befehl" +msgstr "Jobbefehl" #: proc.c:1064 proc.c:1091 msgid "Process list pointer" @@ -903,11 +944,11 @@ msgstr "Job '%ls', Prozess '%ls' hat inkonsistenten Status 'completed'=%d" #: reader.c:299 msgid "Could not set terminal mode for new job" -msgstr "Konnte Terminalmodus für neuen Job nicht setzen" +msgstr "Konnte Terminalmodus für neuen Job nicht festlegen" #: reader.c:320 msgid "Could not set terminal mode for shell" -msgstr "Konnte Terminalmodus für neue Shell nicht setzen" +msgstr "Konnte Terminalmodus für neue Shell nicht festlegen" #: reader.c:1602 msgid "Couldn't put the shell in its own process group" @@ -919,7 +960,7 @@ msgstr "Konnte Terminalsteuerung nicht #: reader.c:1644 msgid "Could not set exit function" -msgstr "Konnte Ende-Funktion nicht setzen" +msgstr "Konnte Ende-Funktion nicht festlegen" #: reader.c:2376 msgid "Pop null reader block" @@ -940,12 +981,12 @@ msgstr "Fehler beim Lesen der Befehle" #: reader.c:3123 msgid "Error while closing input stream" -msgstr "Fehler beim Schliessen des Eingabestroms" +msgstr "Fehler beim Schließen des Eingabestroms" #: reader.c:3151 #, c-format msgid "Could not convert input. Read %d bytes." -msgstr "Konnnte Eingabe nicht konvertieren. %d Bytes gelesen." +msgstr "Konnte Eingabe nicht konvertieren. %d Bytes gelesen." #: reader.c:3157 msgid "Could not read input stream" @@ -975,11 +1016,11 @@ msgstr "Terminal getrennt" #: signal.c:61 msgid "Quit request from job control (^C)" -msgstr "Quit-Anforderung über Job-Steuerung (^C)" +msgstr "Quit-Anforderung über Jobsteuerung (^C)" #: signal.c:67 msgid "Quit request from job control with core dump (^\\)" -msgstr "Quit-Anforderung über Job-Steuerung mit Speicherauszug (^\\)" +msgstr "Quit-Anforderung über Jobsteuerung mit Speicherauszug (^\\)" #: signal.c:73 msgid "Illegal instruction" @@ -987,7 +1028,7 @@ msgstr "Illegale Instruktion" #: signal.c:79 msgid "Trace or breakpoint trap" -msgstr "" +msgstr "Verfolgungs- oder Haltepunkt erreicht" #: signal.c:85 msgid "Abort" @@ -999,7 +1040,7 @@ msgstr "Fehler: nicht ausgerichtete Adresse" #: signal.c:97 msgid "Floating point exception" -msgstr "Fliesskomma-Ausnahmefehler" +msgstr "Fließkomma-Ausnahmefehler" #: signal.c:103 msgid "Forced quit" @@ -1007,11 +1048,11 @@ msgstr "Erzwungene Beendigung" #: signal.c:109 msgid "User defined signal 1" -msgstr "Anwender-definiertes Signal 1" +msgstr "Benutzerdefiniertes Signal 1" #: signal.c:114 msgid "User defined signal 2" -msgstr "Anwender-definiertes Signal 2" +msgstr "Benutzerdefiniertes Signal 2" #: signal.c:120 msgid "Address boundary error" @@ -1031,7 +1072,7 @@ msgstr "H #: signal.c:144 msgid "Child process status changed" -msgstr "Kindprozess-Status geändert" +msgstr "Kindprozessstatus geändert" #: signal.c:150 msgid "Continue previously stopped process" @@ -1055,15 +1096,15 @@ msgstr "Stopp durch Terminalausgabe" #: signal.c:180 msgid "Urgent socket condition" -msgstr "" +msgstr "Vorrangige Socket-Bedingung" #: signal.c:186 msgid "CPU time limit exceeded" -msgstr "CPU-Zeit-Begrenzung überschritten" +msgstr "CPU-Zeitbegrenzung überschritten" #: signal.c:192 msgid "File size limit exceeded" -msgstr "Dateigrössen-Begrenzung überschritten" +msgstr "Dateigrößenbegrenzung überschritten" #: signal.c:198 msgid "Virtual timer expired" @@ -1071,11 +1112,11 @@ msgstr "Virtueller Zeitgeber abgelaufen" #: signal.c:204 msgid "Profiling timer expired" -msgstr "Profilierungs-Zeitgeber abgelaufen" +msgstr "Profilierungszeitgeber abgelaufen" #: signal.c:210 msgid "Window size change" -msgstr "Änderung der Fenstergrösse" +msgstr "Änderung der Fenstergröße" #: signal.c:216 msgid "I/O on asynchronous file descriptor is possible" @@ -1185,7 +1226,7 @@ msgid "" "%ls: Variable scope can only be one of universal, global and local\n" "%ls\n" msgstr "" -"%ls: Variablen-Bereich kann nur universell, global oder lokal sein\n" +"%ls: Variablenbereich kann nur universell, global oder lokal sein\n" "%ls\n" #: builtin.h:43 @@ -1204,8 +1245,12 @@ msgstr "%ls: Unbekannte Option '%ls'\n" #: builtin.h:50 #, c-format -msgid "%ls: Invalid character '%lc' in variable name. Only alphanumerical characters and underscores are valid in a variable name.\n" -msgstr "%ls: Ungültiges Zeichen '%lc' im Variablenname. Nur alfanumerische Zeichen und Unterstriche sind in einem Variablennamen gültig.\n" +msgid "" +"%ls: Invalid character '%lc' in variable name. Only alphanumerical characters " +"and underscores are valid in a variable name.\n" +msgstr "" +"%ls: Ungültiges Zeichen '%lc' im Variablenname. Nur alphanumerische Zeichen " +"und Unterstriche sind in einem Variablennamen gültig.\n" #: builtin.h:52 #, c-format @@ -1272,7 +1317,7 @@ msgstr "Paket" #: init/fish_complete.fish.in:292 init/fish_complete.fish:292 msgid "Start service" -msgstr "Starte Dienst" +msgstr "Dienst starten" #: init/fish_complete.fish.in:293 init/fish_complete.fish:293 msgid "Stop service" @@ -1280,7 +1325,7 @@ msgstr "Dienst anhalten" #: init/fish_complete.fish.in:294 init/fish_complete.fish:294 msgid "Print service state" -msgstr "Dienststatus anzeigen" +msgstr "Dienststatus ausgeben" #: init/fish_complete.fish.in:295 init/fish_complete.fish:295 msgid "Stop and then start service" @@ -1300,7 +1345,7 @@ msgstr "fish" #: init/fish_interactive.fish.in:13 init/fish_interactive.fish:13 msgid "Welcome to fish, the friendly interactive shell\\n" -msgstr "Willkommen zu fish, der Freundlichen Interaktiven Shell\\n" +msgstr "Willkommen zu fish, der freundlichen interaktiven Shell\\n" #: init/fish_interactive.fish.in:14 init/fish_interactive.fish:14 msgid "Type %shelp%s for instructions on how to use fish\\n" @@ -1316,7 +1361,7 @@ msgstr "Auf Wiedersehen\\n" #: init/fish_interactive.fish.in:28 init/fish_interactive.fish:28 msgid "Write out the prompt" -msgstr "Prompt anzeigen" +msgstr "Prompt ausgeben" #: init/fish_function.fish:58 msgid "%s: Key not specified\\n" @@ -1328,16 +1373,27 @@ msgstr "Konnte keinen Webbrowser finden.\\n" #: init/fish_function.fish:131 #, sh-format -msgid "Please set the variable $BROWSER to a suitable browser and try again\\n\\n" -msgstr "Setzen Sie bitte die Variable $BROWSER auf einen passenden Browser und versuchen Sie es erneut\\n\\n" +msgid "" +"Please set the variable $BROWSER to a suitable browser and try again\\n\\n" +msgstr "" +"Legen Sie bitte die Variable $BROWSER auf einen passenden Browser fest" +"und versuchen Sie es erneut\\n\\n" #: init/fish_function.fish:273 -msgid "vared: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of %s\\n" -msgstr "vared: %s ist eine Feldvariable. Benutzen Sie %svared%s %s[n] zum Editieren den n. Elementes von %s\\n" +msgid "" +"vared: %s is an array variable. Use %svared%s %s[n] to edit the n:th element " +"of %s\\n" +msgstr "" +"vared: %s ist eine Feldvariable. Benutzen Sie %svared%s %s[n] zum Editieren " +"den n. Elementes von %s\\n" #: init/fish_function.fish:277 -msgid "vared: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s VARIABLE\\n" -msgstr "vared: Erwartete genau ein Argument, erhielt %s.\\n\\nSynopsis:\\n\\t%svared%s VARIABLE\\n" +msgid "" +"vared: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " +"VARIABLE\\n" +msgstr "" +"vared: Erwartete genau ein Argument, erhielt %s.\\n\\nSynopsis:\\n\\t%svared%" +"s VARIABLE\\n" #: init/fish_function.fish:386 msgid "Hit end of history...\\n" @@ -1345,7 +1401,8 @@ msgstr "Ende des Befehlsverlaufs errreicht ...\\n" #: init/fish_function.fish:422 msgid "The number of positions to skip must be a non-negative integer\\n" -msgstr "Anzahl zu überspringender Positionen muss eine positive Ganzzahl sein\\n" +msgstr "" +"Anzahl zu überspringender Positionen muss eine positive Ganzzahl sein\\n" #: init/fish_function.fish:775 msgid "%s is a function with definition\\n" @@ -1377,7 +1434,7 @@ msgstr "%s: Konnte '%s' nicht finden" #: init/fish_function.fish:845 msgid "%s: Invalid mask '%s'\\n" -msgstr "%s: Ungültige Mmaske '%s'\\n" +msgstr "%s: Ungültige Maske '%s'\\n" #: init/fish_function.fish:1032 msgid "%s: Too many arguments\\n" @@ -1431,15 +1488,15 @@ msgstr "Version anzeigen und beenden" #: init/completions/apm.fish:3 msgid "Print APM info" -msgstr "APM-Informationen anzeigen" +msgstr "APM-Informationen ausgeben" #: init/completions/apm.fish:4 msgid "Print time remaining" -msgstr "Verbleibende Zeit anzeigen" +msgstr "Verbleibende Zeit ausgeben" #: init/completions/apm.fish:5 msgid "Monitor status info" -msgstr "Status-Information beobachten" +msgstr "Statusinformation beobachten" #: init/completions/apm.fish:6 msgid "Request APM standby mode" @@ -1475,7 +1532,7 @@ msgstr "Debug-Informationen ausgeben" #: init/completions/umount.fish:17 init/completions/valgrind.fish:28 #: init/completions/wget.fish:13 init/completions/zip.fish:14 msgid "Verbose mode" -msgstr "Gesprächiger Modus" +msgstr "Ausführlicher Modus" #: init/completions/apropos.fish:14 msgid "Keyword as regex" @@ -1499,7 +1556,7 @@ msgstr "Man-Pfad angeben" #: init/completions/apropos.fish:19 msgid "Specify a configuration file" -msgstr "eine Konfigurationsdatei angeben" +msgstr "Eine Konfigurationsdatei angeben" #: init/completions/apt-build.fish:4 msgid "Update list of packages" @@ -1519,7 +1576,7 @@ msgstr "Ein neues Paket erstellen und installieren" #: init/completions/apt-build.fish:8 msgid "Download and extract a source" -msgstr "Eine Quelle abrufen und extrahieren" +msgstr "Eine Quelle herunterladen und extrahieren" #: init/completions/apt-build.fish:9 msgid "Info on a package" @@ -1547,11 +1604,11 @@ msgstr "Quelle aktualisieren und erneut erstellen" #: init/completions/apt-build.fish:15 msgid "Update the repository" -msgstr "Paket-Depot aktualisieren" +msgstr "Paketdepot aktualisieren" #: init/completions/apt-build.fish:16 msgid "Do not use gcc wrapper" -msgstr "Nicht die gcc-Ummantelung nutzen" +msgstr "Nicht die gcc-Ummantelung benutzen" #: init/completions/apt-build.fish:17 msgid "Remove build-dep" @@ -1559,7 +1616,7 @@ msgstr "Erstellungsabh #: init/completions/apt-build.fish:18 msgid "Do not download source" -msgstr "Quelle nicht abrufen" +msgstr "Quelle nicht herunterladen" #: init/completions/apt-build.fish:19 msgid "Specify build-dir" @@ -1583,7 +1640,7 @@ msgstr "-Patch anwenden" #: init/completions/apt-build.fish:24 msgid "Prefix to strip on patch" -msgstr "" +msgstr "Präfix zum Entfernen des Patch" #: init/completions/apt-build.fish:25 init/completions/apt-listbugs.fish:21 #: init/completions/yum.fish:50 @@ -1608,15 +1665,15 @@ msgstr "Apt-Zwischenspeicher erstellen" #: init/completions/apt-cache.fish:4 msgid "Show package info" -msgstr "Paket-Information zeigen" +msgstr "Paketinformation anzeigen" #: init/completions/apt-cache.fish:5 msgid "Show cache statistics" -msgstr "Zwischenspeicherstatistik zeigen" +msgstr "Zwischenspeicherstatistik anzeigen" #: init/completions/apt-cache.fish:6 msgid "Show source package" -msgstr "Quellpaket zeigen" +msgstr "Quellpaket anzeigen" #: init/completions/apt-cache.fish:7 msgid "Show packages in cache" @@ -1624,15 +1681,15 @@ msgstr "Pakete im Zwischenspeicher anzeigen" #: init/completions/apt-cache.fish:8 msgid "Print available list" -msgstr "Verfügbare Liste anzeigen" +msgstr "Verfügbare Liste ausgeben" #: init/completions/apt-cache.fish:9 msgid "List unmet dependencies in cache" -msgstr "Nicht aufgelöste Abhängigkeiten im Zwischenspeicher zeigen" +msgstr "Nicht aufgelöste Abhängigkeiten im Zwischenspeicher auflisten" #: init/completions/apt-cache.fish:10 msgid "Display package record" -msgstr "Paket-Satz zeigen" +msgstr "Paketsatz anzeigen" #: init/completions/apt-cache.fish:11 msgid "Search packagename by REGEX" @@ -1648,15 +1705,15 @@ msgstr "Nur Paketname suchen" #: init/completions/apt-cache.fish:14 msgid "List dependencies for the package" -msgstr "Abhängigkeiten für dieses Paket anzeigen" +msgstr "Abhängigkeiten für dieses Paket auflisten" #: init/completions/apt-cache.fish:15 msgid "List reverse dependencies for the package" -msgstr "Umgekehrte Abhängigkeiten für das Paket anzeigen" +msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" #: init/completions/apt-cache.fish:16 msgid "Print package name by prefix" -msgstr "" +msgstr "Paketname nach Präfix ausgeben" #: init/completions/apt-cache.fish:17 msgid "Generate dotty output for packages" @@ -1668,11 +1725,11 @@ msgstr "Einstellungsdatei pr #: init/completions/apt-cache.fish:19 msgid "Select file to store package cache" -msgstr "Datei zum Speichern des Paketzwischenspeichers wählen" +msgstr "Datei zum Speichern des Paketzwischenspeichers auswählen" #: init/completions/apt-cache.fish:20 msgid "Select file to store source cache" -msgstr "Datei zum Speichern des Quellenzwischenspeichers wählen" +msgstr "Datei zum Speichern des Quellenzwischenspeichers auswählen" #: init/completions/apt-cache.fish:21 init/completions/apt-ftparchive.fish:10 #: init/completions/apt-get.fish:39 init/completions/configure.fish:3 @@ -1685,27 +1742,27 @@ msgstr "Stiller Modus" #: init/completions/apt-cache.fish:22 msgid "Print important dependencies" -msgstr "Wichtige Abhängigkeiten anzeigen" +msgstr "Wichtige Abhängigkeiten ausgeben" #: init/completions/apt-cache.fish:23 msgid "Print full records" -msgstr "Vollständige Datensätze anzeigen" +msgstr "Vollständige Datensätze ausgeben" #: init/completions/apt-cache.fish:24 msgid "Auto-gen package cache" -msgstr "" +msgstr "Paketcache automatisch generieren" #: init/completions/apt-cache.fish:25 msgid "Print all names" -msgstr "Alle Namen anzeigen" +msgstr "Alle Namen ausgeben" #: init/completions/apt-cache.fish:26 msgid "Dep and rdep recursive" -msgstr "" +msgstr "Dep und rdep rekursiv" #: init/completions/apt-cache.fish:27 msgid "Limit to installed" -msgstr "" +msgstr "Auf Installierte begrenzen" #: init/completions/apt-cache.fish:29 init/completions/apt-cdrom.fish:12 #: init/completions/apt-config.fish:6 @@ -1746,7 +1803,7 @@ msgstr "Schnelle Kopie" #: init/completions/apt-cdrom.fish:9 msgid "Thorough package scan" -msgstr "Gründlicher Paket-Scan" +msgstr "Gründlicher Paketscan" #: init/completions/apt-cdrom.fish:10 msgid "No changes" @@ -1762,7 +1819,7 @@ msgstr "Inhalt der Konfigurationsdatei ausgeben" #: init/completions/apt-extracttemplates.fish:4 msgid "Set temp dir" -msgstr "temp-Verzeichnis setzen" +msgstr "temp-Verzeichnis festlegen" #: init/completions/apt-extracttemplates.fish:5 msgid "Specifiy config file" @@ -1778,7 +1835,7 @@ msgstr "Paket entsprechend Muster suchen" #: init/completions/apt-file.fish:5 msgid "List contents of a package matching pattern" -msgstr "Inhalte eines Paketes anzeigen, das dem Muster entspricht" +msgstr "Inhalte eines Paketes auflisten, das dem Muster entspricht" #: init/completions/apt-file.fish:6 msgid "Remove all gz files from cache" @@ -1786,15 +1843,15 @@ msgstr "Alle gz-Dateien aus dem Zwischenspeicher entfernen" #: init/completions/apt-file.fish:7 msgid "Set cache dir" -msgstr "Verzeichnis für Zwischenspeicher setzen" +msgstr "Verzeichnis für Zwischenspeicher festlegen" #: init/completions/apt-file.fish:9 msgid "Use cdrom-mount-point" -msgstr "CDROM-Einhängepunkt verwenden" +msgstr "CDROM-Einhängepunkt benutzen" #: init/completions/apt-file.fish:10 init/completions/apt-file.fish:16 msgid "Do not expand pattern" -msgstr "Muster nicht erweitern" +msgstr "Erweitern Sie das Muster nicht" #: init/completions/apt-file.fish:11 msgid "Pattern is regexp" @@ -1802,7 +1859,7 @@ msgstr "Muster ist ein regul #: init/completions/apt-file.fish:13 msgid "Set arch" -msgstr "Architektur setzen" +msgstr "Architektur festlegen" #: init/completions/apt-file.fish:14 msgid "Set sources.list file" @@ -1810,7 +1867,7 @@ msgstr "sources.list-Datei angeben" #: init/completions/apt-file.fish:15 msgid "Only display package name" -msgstr "Nur Paketnamen zeigen" +msgstr "Nur Paketnamen anzeigen" #: init/completions/apt-file.fish:17 msgid "Run in dummy mode" @@ -1822,7 +1879,7 @@ msgstr "Paket aus Quelle generieren" #: init/completions/apt-ftparchive.fish:4 msgid "Generate source index file" -msgstr "Quell-Indexdatei erstellen" +msgstr "Quellindexdatei erstellen" #: init/completions/apt-ftparchive.fish:5 msgid "Generate contents file" @@ -1846,7 +1903,7 @@ msgstr "Eine Bin #: init/completions/apt-ftparchive.fish:11 msgid "Perform delinking" -msgstr "" +msgstr "Trennung ausführen" #: init/completions/apt-ftparchive.fish:12 msgid "Perform contents generation" @@ -1854,11 +1911,11 @@ msgstr "Inhaltsgenerierung durchf #: init/completions/apt-ftparchive.fish:13 msgid "Use source override" -msgstr "" +msgstr "Quell-Override verwenden" #: init/completions/apt-ftparchive.fish:14 msgid "Make caching db readonly" -msgstr "Zwischenspeicher-Datenbank schreibschützen" +msgstr "Zwischenspeicherdatenbank schreibschützen" #: init/completions/apt-ftparchive.fish:16 msgid "Use config file" @@ -1867,7 +1924,7 @@ msgstr "Konfigurationsdatei benutzen" #: init/completions/apt-ftparchive.fish:17 #: init/completions/apt-sortpkgs.fish:6 msgid "Set config options" -msgstr "Konfigurationsoptionen setzen" +msgstr "Konfigurationsoptionen festlegen" #: init/completions/apt-get.fish:3 msgid "Test if apt has yet to be given the subcommand" @@ -1876,6 +1933,7 @@ msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" #: init/completions/apt-get.fish:12 msgid "Test if apt command should have packages as potential completion" msgstr "" +"Testen, ob der apt-Befehl Pakete zur möglichen Fertigstellung haben sollte" #: init/completions/apt-get.fish:24 msgid "Update sources" @@ -1903,7 +1961,7 @@ msgstr "Ein oder mehrere Paket(e) entfernen" #: init/completions/apt-get.fish:30 msgid "Fetch source packages" -msgstr "Quell-Pakete abrufen" +msgstr "Quellpakete abrufen" #: init/completions/apt-get.fish:31 msgid "Install/remove packages for dependencies" @@ -1919,11 +1977,11 @@ msgstr "Lokalen Zwischenspeicher und Pakete bereinigen" #: init/completions/apt-get.fish:34 msgid "Clean packages no longer be downloaded" -msgstr "" +msgstr "Pakete, die nicht länger heruntergeladen werden, bereinigen" #: init/completions/apt-get.fish:35 msgid "Download Only" -msgstr "Nur abrufen" +msgstr "Nur herunterladen" #: init/completions/apt-get.fish:36 msgid "Correct broken dependencies" @@ -1935,7 +1993,7 @@ msgstr "Fehlende Pakete ignorieren" #: init/completions/apt-get.fish:38 msgid "Disable downloading packages" -msgstr "Abruf von Paketen deaktivieren" +msgstr "Herunterladen von Paketen deaktivieren" #: init/completions/apt-get.fish:40 msgid "Perform a simulation" @@ -1955,7 +2013,7 @@ msgstr "Volle Versionen der Pakete anzeigen" #: init/completions/apt-get.fish:44 init/completions/apt-get.fish:45 msgid "Compile source packages" -msgstr "Quell-Pakete kompilieren" +msgstr "Quellpakete kompilieren" #: init/completions/apt-get.fish:46 msgid "Ignore package Holds" @@ -1971,7 +2029,7 @@ msgstr "Ja erzwingen" #: init/completions/apt-get.fish:49 msgid "Print the URIs" -msgstr "URIs anzeigen" +msgstr "URIs ausgeben" #: init/completions/apt-get.fish:51 msgid "Reinstall packages" @@ -1983,7 +2041,7 @@ msgstr "Veraltete Dateien l #: init/completions/apt-get.fish:53 msgid "Control default input to the policy engine" -msgstr "" +msgstr "Standardeingabe zur Regelverwaltung leiten" #: init/completions/apt-get.fish:54 msgid "Only perform operations that are trivial" @@ -1995,19 +2053,19 @@ msgstr "Abbruch, falls irgendwelche Pakete entfernt w #: init/completions/apt-get.fish:56 msgid "Only accept source packages" -msgstr "Nur Quell-Pakete akzeptieren" +msgstr "Nur Quellpakete akzeptieren" #: init/completions/apt-get.fish:57 msgid "Download only diff file" -msgstr "Nur diff-Datei abrufen" +msgstr "Nur diff-Datei herunterladen" #: init/completions/apt-get.fish:58 msgid "Download only tar file" -msgstr "Nur tar-Datei abrufen" +msgstr "Nur tar-Datei herunterladen" #: init/completions/apt-get.fish:59 msgid "Only process arch-dependant build-dependencies" -msgstr "Nur architektur-abhängige Erstellungsabhängigkeiten verarbeiten" +msgstr "Nur Architektur-abhängige Erstellungsabhängigkeiten verarbeiten" #: init/completions/apt-get.fish:60 msgid "Ignore non-authenticated packages" @@ -2019,7 +2077,7 @@ msgstr "Konfigurationsdatei angeben" #: init/completions/apt-get.fish:63 msgid "Set a config option" -msgstr "Konfigurationsoption setzen" +msgstr "Konfigurationsoption festlegen" #: init/completions/apt-key.fish:2 msgid "Add a new key" @@ -2031,11 +2089,11 @@ msgstr "Schl #: init/completions/apt-key.fish:4 msgid "List trusted keys" -msgstr "Vertraute Schlüssel anzeigen" +msgstr "Vertraute Schlüssel auflisten" #: init/completions/apt-listbugs.fish:3 msgid "Set severity" -msgstr "Schwere setzen" +msgstr "Schwere festlegen" #: init/completions/apt-listbugs.fish:4 msgid "Tags you want to see" @@ -2043,7 +2101,7 @@ msgstr "Markierungen, die Sie sehen m #: init/completions/apt-listbugs.fish:5 msgid "Bug-status you want to see" -msgstr "Bug-Status, die Sie sehen möchten" +msgstr "Fehlerstatus, den Sie sehen möchten" #: init/completions/apt-listbugs.fish:6 msgid "Ignore bugs in your system" @@ -2051,19 +2109,19 @@ msgstr "Fehler in Ihrem System ignorieren" #: init/completions/apt-listbugs.fish:7 msgid "Ignore newer bugs than upgrade packages" -msgstr "" +msgstr "Fehler, die neuer sind als Aktualisierungspakete, ignorieren" #: init/completions/apt-listbugs.fish:8 msgid "Bugs for downgrade packages" -msgstr "" +msgstr "Fehler bei Downgrade-Paketen" #: init/completions/apt-listbugs.fish:9 msgid "Bug Tracking system" -msgstr "Bug-Verfolgungssystem" +msgstr "Fehlerverfolgungssystem" #: init/completions/apt-listbugs.fish:10 msgid "Specify port for web interface" -msgstr "Port für Web-Oberfläche angeben" +msgstr "Port für Weboberfläche angeben" #: init/completions/apt-listbugs.fish:11 msgid "Use daily bug report" @@ -2075,15 +2133,15 @@ msgstr "Die rohe index.db verwenden" #: init/completions/apt-listbugs.fish:13 msgid "Specify index dir" -msgstr "Index-Verzeichnis angeben" +msgstr "Indexverzeichnis angeben" #: init/completions/apt-listbugs.fish:14 msgid "Specify Pin-Priority value" -msgstr "" +msgstr "Pin-Prioritätswert angeben" #: init/completions/apt-listbugs.fish:15 msgid "Specify the title of rss" -msgstr "Titel für rss angeben" +msgstr "Geben Sie einen Titel für rss an" #: init/completions/apt-listbugs.fish:16 msgid "Retrieve fresh bugs" @@ -2091,11 +2149,11 @@ msgstr "Neue Bugs abrufen" #: init/completions/apt-listbugs.fish:17 init/completions/scp.fish:32 msgid "Do not display progress bar" -msgstr "Keinen Verlaufsbalken anzeigen" +msgstr "Keinen Fortschrittsbalken anzeigen" #: init/completions/apt-listbugs.fish:18 msgid "Specify local cache dir" -msgstr "Verzeichnis für lokalen Zwischenspeicher" +msgstr "Verzeichnis für lokalen Zwischenspeicher angeben" #: init/completions/apt-listbugs.fish:19 msgid "Specify the expire cache timer" @@ -2111,11 +2169,11 @@ msgstr "F #: init/completions/apt-listbugs.fish:23 msgid "List bugs from packages" -msgstr "Fehler aus Paketen anzeigen" +msgstr "Fehler aus Paketen auflisten" #: init/completions/apt-listbugs.fish:24 msgid "List bugs in rss format" -msgstr "Fehler (bugs) im rss-Format anzeigen" +msgstr "Fehler im rss-Format auflisten" #: init/completions/apt-listchanges.fish:3 msgid "Read filenames from pipe" @@ -2127,7 +2185,7 @@ msgstr "Benutzerschnittstelle ausw #: init/completions/apt-listchanges.fish:6 init/completions/darcs.fish:178 msgid "Specify email address" -msgstr "Email-Adresse angeben" +msgstr "E-Mail-Adresse angeben" #: init/completions/apt-listchanges.fish:7 msgid "Ask confirmation" @@ -2135,19 +2193,19 @@ msgstr "Best #: init/completions/apt-listchanges.fish:8 msgid "Display all changelogs" -msgstr "Alle Änderungsdateien anzeigen" +msgstr "Alle Änderungsprotokolle anzeigen" #: init/completions/apt-listchanges.fish:9 msgid "Avoid changelogs from db in named file" -msgstr "" +msgstr "Änderungsprotokolle aus der Datenbank der benannten Datei vermeiden" #: init/completions/apt-listchanges.fish:10 msgid "Select display" -msgstr "Grafik-Anzeige auswählen" +msgstr "Grafikanzeige auswählen" #: init/completions/apt-listchanges.fish:11 msgid "Insert header" -msgstr "Header einfügen" +msgstr "Kopfzeile einfügen" #: init/completions/apt-listchanges.fish:12 init/completions/ps.fish:36 msgid "Display debug info" @@ -2155,7 +2213,7 @@ msgstr "Debug-Informationen anzeigen" #: init/completions/apt-listchanges.fish:13 msgid "Select an option profile" -msgstr "Options-Profil auswählen" +msgstr "Optionsprofil auswählen" #: init/completions/apt-move.fish:2 msgid "Generate master file" @@ -2197,7 +2255,7 @@ msgstr "Alias f #: init/completions/apt-move.fish:11 msgid "Download package missing from mirror" -msgstr "Fehlende Pakete vom Spiegelserver abrufen" +msgstr "Fehlende Pakete vom Spiegelserver herunterladen" #: init/completions/apt-move.fish:12 msgid "Sync packages installed" @@ -2209,7 +2267,8 @@ msgstr "Die auf der Befehlszeile angegebene Datei verschieben" #: init/completions/apt-move.fish:15 msgid "List packags that may serve as input to mirrorbin or mirrorsource" -msgstr "Pakete anzeigen, die als Quelle für mirrorbin oder mirrorsource dienen können" +msgstr "" +"Pakete auflisten, die als Quelle für mirrorbin oder mirrorsource dienen können" #: init/completions/apt-move.fish:16 msgid "Fetch package from STDIN" @@ -2217,7 +2276,7 @@ msgstr "Paket #: init/completions/apt-move.fish:17 msgid "Fetch source package from STDIN" -msgstr "Quell-Paket über Standardeingabe lesen" +msgstr "Quellpaket über Standardeingabe lesen" #: init/completions/apt-move.fish:18 msgid "Process all packages" @@ -2253,7 +2312,7 @@ msgstr "Zu importierendes Verzeichnis" #: init/completions/apt-proxy-import.fish:8 msgid "Change to user" -msgstr "Wechsel zu Anwender" +msgstr "Wechsel zu Benutzer" #: init/completions/apt-proxy-import.fish:9 msgid "Debug level[default 0]" @@ -2261,7 +2320,7 @@ msgstr "Debug-Grad [Standard 0]" #: init/completions/apt-rdepends.fish:3 msgid "Show bulid dependencies" -msgstr "Erstellungs-Abhängigkeiten anzeigen" +msgstr "Erstellungsabhängigkeiten anzeigen" #: init/completions/apt-rdepends.fish:4 msgid "Generate a dotty graph" @@ -2273,23 +2332,29 @@ msgstr "Status der Abh #: init/completions/apt-rdepends.fish:6 msgid "List packages depending on" -msgstr "Pakete anzeigen, die abhängen von " +msgstr "Pakete auflisten, die abhängen von " #: init/completions/apt-rdepends.fish:7 msgid "Comma-separated list of dependancy types to follow recursively" -msgstr "Komma-getrennte Liste der Abhängigkeitstypen, die rekursiv abgearbeitet werden" +msgstr "" +"Komma-getrennte Liste der Abhängigkeitstypen, die rekursiv abgearbeitet werden" #: init/completions/apt-rdepends.fish:8 msgid "Comma-separated list of dependancy types to show" -msgstr "Komma-getrennte Liste zu zeigender Abhängigkeitstypen" +msgstr "Komma-getrennte Liste anzuzeigender Abhängigkeitstypen" #: init/completions/apt-rdepends.fish:9 -msgid "Comma-separated list of package installation states to follow recursively" -msgstr "Komma-getrennte Liste von Paket-Installations-Status, die rekursiv verarbeitet werden" +msgid "" +"Comma-separated list of package installation states to follow recursively" +msgstr "" +"Komma-getrennte Liste vom Paketinstallationsstatus, die rekursiv " +"verarbeitet werden" #: init/completions/apt-rdepends.fish:10 msgid "Comma-separated list of package installation states to show" -msgstr "Komma-getrennte Liste von Paket-Installations-Status, die angezeigt werden sollen" +msgstr "" +"Komma-getrennte Liste vom Paketinstallationsstatus, die angezeigt werden " +"sollen" #: init/completions/apt-rdepends.fish:11 msgid "Display man page" @@ -2319,15 +2384,15 @@ msgstr "APT-Listenverzeichnis angeben" #: init/completions/apt-show-source.fish:7 msgid "List PKG info" -msgstr "PKG-Information anzeigen" +msgstr "PKG-Information auflisten" #: init/completions/apt-show-source.fish:9 msgid "Print all source packages with version" -msgstr "Alle Quell-Pakete mit Version anzeigen" +msgstr "Alle Quellpakete mit Version ausgeben" #: init/completions/apt-show-versions.fish:3 msgid "Print PKG versions" -msgstr "PKG-Versionen anzeigen" +msgstr "PKG-Versionen ausgeben" #: init/completions/apt-show-versions.fish:4 msgid "Using regex" @@ -2335,19 +2400,19 @@ msgstr "Regul #: init/completions/apt-show-versions.fish:5 msgid "Print only upgradeable packages" -msgstr "Nur aktualisierbare Pakete anzeigen" +msgstr "Nur aktualisierbare Pakete ausgeben" #: init/completions/apt-show-versions.fish:6 msgid "Print all versions" -msgstr "Alle Versionen anzeigen" +msgstr "Alle Versionen ausgeben" #: init/completions/apt-show-versions.fish:7 msgid "Print package name/distro" -msgstr "Paketname/Distribution anzeigen" +msgstr "Paketname/Distribution ausgeben" #: init/completions/apt-show-versions.fish:8 msgid "Print verbose info" -msgstr "Ausführliche Informationen anzeigen" +msgstr "Ausführliche Informationen ausgeben" #: init/completions/apt-show-versions.fish:9 msgid "Init or update cache only" @@ -2375,15 +2440,15 @@ msgstr "Konfigurationsdatei" #: init/completions/apt-spy.fish:6 msgid "Finish after number of servers" -msgstr "Nach Anzahl Server beenden" +msgstr "Nach Anzahl der Server beenden" #: init/completions/apt-spy.fish:7 msgid "File to grab servers" -msgstr "" +msgstr "Datei zum Zugriff auf Server" #: init/completions/apt-spy.fish:8 msgid "File as input" -msgstr "Datei als Eingabe verwenden" +msgstr "Datei als Eingabe" #: init/completions/apt-spy.fish:9 msgid "Mirror-list file" @@ -2403,11 +2468,11 @@ msgstr "Komma-getrennte L #: init/completions/apt-spy.fish:13 msgid "How long in sec to download" -msgstr "Dauer des Abrufs in Sekunden" +msgstr "Dauer des Herunterladens in Sekunden" #: init/completions/apt-spy.fish:14 msgid "Custom URL to get mirror list" -msgstr "Angepasste URL zum Abruf der Spiegel-Liste" +msgstr "Angepasste URL zum Abruf der Spiegelliste" #: init/completions/apt-spy.fish:15 msgid "Write top servers to file" @@ -2419,7 +2484,7 @@ msgstr "Anzahl der Top-Server" #: init/completions/apt-spy.fish:17 msgid "Update mirror list" -msgstr "Spiegel-Liste aktualisieren" +msgstr "Spiegelliste aktualisieren" #: init/completions/apt-spy.fish:18 msgid "Version number" @@ -2427,23 +2492,23 @@ msgstr "Versionsnummer" #: init/completions/apt-src.fish:3 msgid "Update list of source packages" -msgstr "Liste der Quell-Pakete aktualisieren" +msgstr "Liste der Quellpakete aktualisieren" #: init/completions/apt-src.fish:4 msgid "Install source packages" -msgstr "Quell-Pakete installieren" +msgstr "Quellpakete installieren" #: init/completions/apt-src.fish:5 msgid "Upgrade source packages" -msgstr "Quell-Pakete aktualisieren" +msgstr "Quellpakete aktualisieren" #: init/completions/apt-src.fish:6 msgid "Remove source packages" -msgstr "Quell-Pakete entfernen" +msgstr "Quellpakete entfernen" #: init/completions/apt-src.fish:7 init/completions/apt-src.fish:14 msgid "Build source packages" -msgstr "Quell-Pakete erstellen" +msgstr "Quellpakete erstellen" #: init/completions/apt-src.fish:8 msgid "Clean source packages" @@ -2455,7 +2520,7 @@ msgstr "Bekannte Quellb #: init/completions/apt-src.fish:10 msgid "List installed source package\\(s\\)" -msgstr "Installierte(s) Quellpaket(e) anzeigen" +msgstr "Installierte(s) Quellpaket(e) auflisten" #: init/completions/apt-src.fish:11 msgid "Root source tree" @@ -2463,11 +2528,11 @@ msgstr "Ursprung des Quellbaumes" #: init/completions/apt-src.fish:12 msgid "Version of source package" -msgstr "Version des Quell-Paketes" +msgstr "Version des Quellpaketes" #: init/completions/apt-src.fish:13 msgid "Name of the source package" -msgstr "Name des Quell-Paketes" +msgstr "Name des Quellpaketes" #: init/completions/apt-src.fish:15 msgid "Install after build" @@ -2507,7 +2572,7 @@ msgstr "Ausgabe nach /dev/null" #: init/completions/apt-src.fish:24 msgid "Output trace" -msgstr "Ausgabe-Verfolgung" +msgstr "Ausgabeverfolgung" #: init/completions/apt-zip-inst.fish:4 init/completions/apt-zip-list.fish:4 msgid "Removable medium" @@ -2515,7 +2580,7 @@ msgstr "Wechselbares Medium" #: init/completions/apt-zip-inst.fish:5 init/completions/apt-zip-list.fish:5 msgid "Select an action" -msgstr "Eine Aktion wählen" +msgstr "Eine Aktion auswählen" #: init/completions/apt-zip-inst.fish:6 init/completions/apt-zip-list.fish:6 msgid "List of packages to install" @@ -2527,7 +2592,7 @@ msgstr "Kaputte Option bereinigen" #: init/completions/apt-zip-inst.fish:8 init/completions/apt-zip-list.fish:8 msgid "Specify a non-mountpoint dir" -msgstr "Verzeichnis angeben, das kein Einhäng-Verzeichnis ist" +msgstr "Verzeichnis angeben, das kein Einhängeverzeichnis ist" #: init/completions/apt-zip-list.fish:9 msgid "Select a method" @@ -2547,7 +2612,7 @@ msgstr "Numerische Adresse" #: init/completions/arp.fish:4 msgid "Class of hw type" -msgstr "Klasse des Hardware-Typs" +msgstr "Klasse des Hardwaretyps" #: init/completions/arp.fish:5 msgid "Show arp entries" @@ -2559,11 +2624,11 @@ msgstr "Eintrag f #: init/completions/arp.fish:7 msgid "Use hardware address" -msgstr "Hardware-Adresse verwenden" +msgstr "Hardwareadresse verwenden" #: init/completions/arp.fish:8 msgid "Select interface" -msgstr "Schnittstelle wählen" +msgstr "Schnittstelle auswählen" #: init/completions/arp.fish:9 msgid "Manually create ARP address" @@ -2575,11 +2640,11 @@ msgstr "Adresse aus Dateiname entnehmen, Standard /etc/ethers" #: init/completions/atd.fish:2 msgid "Limiting load factor" -msgstr "" +msgstr "Auslastungsbegrenzung" #: init/completions/atd.fish:3 msgid "Minimum interval in seconds" -msgstr "Minimal-Intervall in Sekunden" +msgstr "Minimalintervall in Sekunden" #: init/completions/atd.fish:4 init/completions/make.fish:11 msgid "Debug mode" @@ -2587,15 +2652,15 @@ msgstr "Debug-Modus" #: init/completions/atd.fish:5 msgid "Process at queue only once" -msgstr "at-Queue nur einmal verarbeiten" +msgstr "at-Warteschlange nur einmal verarbeiten" #: init/completions/at.fish:3 init/completions/atq.fish:3 msgid "Use specified queue" -msgstr "Angegebene Queue benutzen" +msgstr "Angegebene Warteschlange benutzen" #: init/completions/at.fish:4 msgid "Send mail to user" -msgstr "Mail an Anwender senden" +msgstr "Mail an Benutzer senden" #: init/completions/at.fish:5 msgid "Read job from file" @@ -2615,7 +2680,7 @@ msgstr "Zeige Zeit" #: init/completions/at.fish:9 msgid "Print the jobs listed" -msgstr "Aufgelistete Jobs anzeigen" +msgstr "Aufgelistete Jobs ausgeben" #: init/completions/bc.fish:3 msgid "Force interactive mode" @@ -2623,7 +2688,7 @@ msgstr "Interaktiven Modus erzwingen" #: init/completions/bc.fish:4 msgid "Define math library" -msgstr "Mathematik-Bibliothek definieren" +msgstr "Mathematikbibliothek definieren" #: init/completions/bc.fish:5 msgid "Give warnings for extensions to POSIX bc" @@ -2631,11 +2696,11 @@ msgstr "Bei Erweiterungen zu POSIX bc Warnungen ausgeben" #: init/completions/bc.fish:6 msgid "Process exactly POSIX bc" -msgstr "" +msgstr "POSIX bc genau verarbeiten" #: init/completions/bc.fish:7 msgid "Do not print the GNU welcome" -msgstr "GNU welcome-Meldung nicht anzeigen" +msgstr "GNU welcome-Meldung nicht ausgeben" #: init/completions/btdownloadheadless.py.fish:4 msgid "Maximum uploads at once" @@ -2643,7 +2708,8 @@ msgstr "Maximale gleichzeitige #: init/completions/btdownloadheadless.py.fish:5 msgid "Number of seconds between keepalives" -msgstr "Anzahl Sekunden zwischen Meldungen zur Aufrechterhaltung der Verbindung" +msgstr "" +"Anzahl Sekunden zwischen Meldungen zur Aufrechterhaltung der Verbindung" #: init/completions/btdownloadheadless.py.fish:6 msgid "Bytes per request" @@ -2655,7 +2721,7 @@ msgstr "Anforderungen per Pipe" #: init/completions/btdownloadheadless.py.fish:8 msgid "Maximum length prefix encoding" -msgstr "" +msgstr "Maximallänge der Präfix-Kodierung" #: init/completions/btdownloadheadless.py.fish:9 msgid "IP to report to the tracker" @@ -2683,19 +2749,19 @@ msgstr "Target f #: init/completions/btdownloadheadless.py.fish:15 msgid "Time to close inactive socket" -msgstr "Zeit zum Schliessen inaktiver Sockets" +msgstr "Zeit zum Schließen inaktiver Sockets" #: init/completions/btdownloadheadless.py.fish:16 msgid "Time between checking timeouts" -msgstr "Zeit zwischen Zeitablauf-Überprüfung" +msgstr "Zeit zwischen der Prüfung von Zeitüberschreitungen" #: init/completions/btdownloadheadless.py.fish:17 msgid "Maximum outgoing slice length" -msgstr "" +msgstr "Maximale ausgehende Slice-Länge" #: init/completions/btdownloadheadless.py.fish:18 msgid "Maximum time to guess rate" -msgstr "" +msgstr "Höchstdauer für die Ratequote" #: init/completions/btdownloadheadless.py.fish:19 msgid "IP to bind to locally" @@ -2707,19 +2773,20 @@ msgstr "Zeit zwischen Bildschirmaktualisierungen" #: init/completions/btdownloadheadless.py.fish:21 msgid "Time to wait between requesting more peers" -msgstr "" +msgstr "Wartezeit zwischen den Anfragen weiterer Peers" #: init/completions/btdownloadheadless.py.fish:22 msgid "Minimum number of peers to not do requesting" -msgstr "" +msgstr "Mindestanzahl an Peers, um keine Anfragen zu stellen" #: init/completions/btdownloadheadless.py.fish:23 msgid "Number of seconds before assuming http timeout" -msgstr "Anzahl Sekunden, bevor ein http-Zeitablauf vermutet wird" +msgstr "Anzahl Sekunden, bevor eine http-Zeitüberschreitung vermutet wird" #: init/completions/btdownloadheadless.py.fish:24 msgid "Number of peers at which to stop initiating new connections" msgstr "" +"Anzahl an Peers bei denen die Initiierung von neuen Verbindungen gestoppt wird" #: init/completions/btdownloadheadless.py.fish:25 msgid "Maximum number of connections to allow" @@ -2731,11 +2798,13 @@ msgstr "Hashes auf der Platte pr #: init/completions/btdownloadheadless.py.fish:27 msgid "Maximum kB/s to upload at" -msgstr "Maximale Upload-Geschwindigkeit in kB/s" +msgstr "Maximale Hochladegeschwindigkeit in kB/s" #: init/completions/btdownloadheadless.py.fish:28 msgid "Seconds to wait for data to come in before assuming choking" msgstr "" +"Sekunden, in denen auf Daten gewartet werden soll, bevor eine Drosselung " +"angenommen wird" #: init/completions/btdownloadheadless.py.fish:29 msgid "Whether to display diagnostic info" @@ -2744,18 +2813,20 @@ msgstr "Sollen diagnostische Informationen angezeigt werden" #: init/completions/btdownloadheadless.py.fish:30 msgid "Number of downloads at which to switch from random to rarest first" msgstr "" +"Anzahl an Herunterladevorgängen bei denen vom Zufälligen zuerst zum " +"Seltensten zuerst umgeschaltet wird" #: init/completions/btdownloadheadless.py.fish:31 msgid "Number of uploads to fill out to with optimistic unchokes" -msgstr "" +msgstr "Anzahl der Hochladevorgänge mit besonders optimistischen Unchokes" #: init/completions/btdownloadheadless.py.fish:32 msgid "Whether to inform the user that hash failures occur" -msgstr "" +msgstr "Sollen die Benutzer informiert werden, wenn Hash-Fehler auftreten" #: init/completions/bunzip2.fish:9 msgid "Decompress to stdout" -msgstr "Auf Standardausgabe entkomprimieren" +msgstr "Auf Standardausgabe dekomprimieren" #: init/completions/bunzip2.fish:10 init/completions/bzip2.fish:11 #: init/completions/gunzip.fish:7 init/completions/gzip.fish:9 @@ -2774,7 +2845,7 @@ msgstr "Speicherbedarf reduzieren" #: init/completions/bunzip2.fish:13 init/completions/bzip2.fish:15 msgid "Print compression ratios" -msgstr "Komprimierungsratio anzeigen" +msgstr "Kompressionsraten ausgeben" #: init/completions/bunzip2.fish:14 init/completions/bzip2.fish:16 #: init/completions/gunzip.fish:10 init/completions/gzip.fish:12 @@ -2819,7 +2890,7 @@ msgstr "Nicht-leere Zeilen nummerieren" #: init/completions/cat.fish:3 msgid "Escape non-printing characters except tab" -msgstr "Nicht druckbare Zeichen ausser Tabulator maskieren" +msgstr "Nicht druckbare Zeichen außer Tabulator maskieren" #: init/completions/cat.fish:4 msgid "Display $ at end of line" @@ -2835,7 +2906,7 @@ msgstr "Nicht mehr als eine leere Zeile" #: init/completions/cat.fish:7 msgid "Escape non-printing characters except newline" -msgstr "Nicht druckbare Zeichen ausser Neuer-Zeile maskieren" +msgstr "Nicht druckbare Zeichen außer Neuer-Zeile maskieren" #: init/completions/cat.fish:8 msgid "Escape tab" @@ -2843,7 +2914,7 @@ msgstr "Tabulator maskieren" #: init/completions/cat.fish:9 msgid "Escape non-printing except newline and tab" -msgstr "Nicht druckbare Zeichen ausser Neuer-Zeile und Tabulator maskieren" +msgstr "Nicht druckbare Zeichen außer Neuer-Zeile und Tabulator maskieren" #: init/completions/chgrp.fish:2 init/completions/chown.fish:1 msgid "Output diagnostic for changed files" @@ -2877,7 +2948,7 @@ msgstr "Informationen zu jeder Datei ausgeben" #: init/completions/chown.fish:11 init/completions/chown.fish:12 #: init/completions/w.fish:6 msgid "Username" -msgstr "Anwendername" +msgstr "Benutzername" #: init/completions/commandline.fish:1 msgid "Add text to the end of the selected area" @@ -2885,11 +2956,11 @@ msgstr "Text am Ende des selektierten Bereichs anf #: init/completions/commandline.fish:2 msgid "Add text at cursor" -msgstr "Text an Cursor-Position hinzufügen" +msgstr "Text an Cursorposition hinzufügen" #: init/completions/commandline.fish:3 msgid "Replace selected part" -msgstr "selektierten Bereich ersetzen" +msgstr "Selektierten Bereich ersetzen" #: init/completions/commandline.fish:5 msgid "Select job under cursor" @@ -2913,7 +2984,7 @@ msgstr "Nur Teil der Befehlszeile vor dem Curser zur #: init/completions/commandline.fish:11 msgid "Inject readline functions to reader" -msgstr "" +msgstr "readline-Funktion zum reader injizieren" #: init/completions/complete.fish:1 msgid "Command to add completion to" @@ -2993,11 +3064,11 @@ msgstr "Konfiguration f #: init/completions/configure.fish:11 msgid "Cross-compile to build programs to run on HOST" -msgstr "Cross-Compilierung zur Programmerstellung für RECHNER" +msgstr "Cross-Kompilierung zur Programmerstellung auf RECHNER" #: init/completions/configure.fish:12 msgid "Configure for building compilers for TARGET" -msgstr "Konfiguration zur Compiler-Erstellung für TARGET" +msgstr "Konfiguration zur Kompilererstellung für ZIEL" #: init/completions/cut.fish:1 msgid "Ouput byte range" @@ -3009,15 +3080,15 @@ msgstr "Zeichenbereich ausgeben" #: init/completions/cut.fish:3 msgid "Select field delimiter" -msgstr "Feldbegrenzer wählen" +msgstr "Feldbegrenzer auswählen" #: init/completions/cut.fish:4 msgid "Select fields" -msgstr "Felder wählen" +msgstr "Felder auswählen" #: init/completions/cut.fish:5 msgid "Dont split mutibyte characters" -msgstr "Multibyte-Zeichen nicht trennen" +msgstr "Multibytezeichen nicht trennen" #: init/completions/cut.fish:6 msgid "Do not print lines without delimiter" @@ -3025,7 +3096,7 @@ msgstr "Zeilen nicht ohne Begrenzer ausgeben" #: init/completions/cut.fish:7 msgid "Select output delimiter" -msgstr "Ausgabebegrenzer setzen" +msgstr "Ausgabebegrenzer festlegen" #: init/completions/cvs.fish:5 msgid "Add a new file/directory to the repository" @@ -3037,7 +3108,7 @@ msgstr "Administrationsoberfl #: init/completions/cvs.fish:7 msgid "Show last revision where each line was modified" -msgstr "Letzte Revision zeigen, bei der jede Zeile verändert wurde" +msgstr "Letzte Revision anzeigen, bei der jede Zeile verändert wurde" #: init/completions/cvs.fish:8 msgid "Checkout sources for editing" @@ -3049,7 +3120,7 @@ msgstr "Dateien in das Paketdepot #: init/completions/cvs.fish:10 msgid "Show differences between revisions" -msgstr "Unterschiede zwischen Revisionen zeigen" +msgstr "Unterschiede zwischen Revisionen anzeigen" #: init/completions/cvs.fish:11 msgid "Get ready to edit a watched file" @@ -3065,11 +3136,11 @@ msgstr "Quellen aus CVS exportieren, #: init/completions/cvs.fish:14 msgid "Show repository access history" -msgstr "Zugriffsverlauf des Paketdepots zeigen" +msgstr "Zugriffsverlauf des Paketdepots anzeigen" #: init/completions/cvs.fish:15 msgid "Import sources into CVS, using vendor branches" -msgstr "" +msgstr "Quellen in CVS importieren, verwende Herstellerzweige" #: init/completions/cvs.fish:16 msgid "Create a CVS repository if it doesnt exist" @@ -3113,7 +3184,7 @@ msgstr "Einen Eintrag aus dem Paketdepot entfernen" #: init/completions/cvs.fish:26 msgid "Print out history information for a module" -msgstr "Verlaufs-Informationen für ein Modul ausgeben" +msgstr "Verlaufsinformationen für ein Modul ausgeben" #: init/completions/cvs.fish:27 msgid "Add a symbolic tag to a module" @@ -3129,11 +3200,12 @@ msgstr "Statusinformationen zu ausgecheckten Dateien anzeigen" #: init/completions/cvs.fish:30 msgid "Add a symbolic tag to checked out version of files" -msgstr "Der Version von ausgecheckten Dateien eine symbolische Markierung hinzufügen" +msgstr "" +"Der Version von ausgecheckten Dateien eine symbolische Markierung hinzufügen" #: init/completions/cvs.fish:31 msgid "Undo an edit command" -msgstr "Edit-Befehl rückgängig machen" +msgstr "Bearbeiten-Befehl rückgängig machen" #: init/completions/cvs.fish:32 msgid "Bring work tree in sync with repository" @@ -3141,7 +3213,7 @@ msgstr "Arbeitsbaum mit Paketdepot synchronisieren" #: init/completions/cvs.fish:34 msgid "Set watches" -msgstr "Datei-Beobachtungen einstellen" +msgstr "Dateibeobachtungen festlegen" #: init/completions/cvs.fish:35 msgid "See who is watching a file" @@ -3181,7 +3253,7 @@ msgstr "tmpdir f #: init/completions/cvs.fish:46 msgid "Use editor for editing log information" -msgstr "Editor zum Editieren der Log-Information verwenden" +msgstr "Editor zum Editieren der Loginformation verwenden" #: init/completions/cvs.fish:48 msgid "Do not use the ~/.cvsrc file" @@ -3201,7 +3273,7 @@ msgstr "S #: init/completions/cvs.fish:52 msgid "Set CVS user variable" -msgstr "user-Variable für CVS setzen" +msgstr "CVS-Benutzervariable festlegen" #: init/completions/darcs.fish:28 msgid "Create new project" @@ -3237,11 +3309,11 @@ msgstr "Patches von einem anderen Paketdepot auf dieses kopieren und anwenden" #: init/completions/darcs.fish:36 msgid "Send by email a bundle of one or more patches" -msgstr "Zusammenfassung eines oder mehrerer Patche per E-Mail versenden" +msgstr "Zusammenfassung eines oder mehrerer Patches per E-Mail versenden" #: init/completions/darcs.fish:37 msgid "Apply patches (from an email bundle) to the repository" -msgstr "Patches (aus einem Email-Paket) auf das Paketdepot anwenden" +msgstr "Patches (aus einem E-Mail-Paket) auf das Paketdepot anwenden" #: init/completions/darcs.fish:38 msgid "Copy and apply patches from this repository to another one" @@ -3257,7 +3329,7 @@ msgstr "Gibt eine Zusammenfassung des Depotverlaufs #: init/completions/darcs.fish:41 msgid "Remove recorded patches without changing the working copy" -msgstr "Aufgezeichnete Patche entfernen, ohne die Arbeitskopie zu ändern" +msgstr "Aufgezeichnete Patche ohne Änderung der Arbeitskopie entfernen" #: init/completions/darcs.fish:42 msgid "Replace a recorded patch with a better version" @@ -3269,15 +3341,19 @@ msgstr "Zur aufgezeichneten Version zur #: init/completions/darcs.fish:44 msgid "Undo the last revert (may fail if changes after the revert)" -msgstr "Letzte Rücknahme rückgängig machen (kann versagen, falls nach der Rücknahme Änderungen vorgenommen wurden)" +msgstr "" +"Letzte Rücknahme rückgängig machen (kann versagen, falls nach der Rücknahme " +"Änderungen vorgenommen wurden)" #: init/completions/darcs.fish:45 msgid "Opposite of pull; unsafe if the patch is not in remote repo" -msgstr "Gegenstück zu pull, unsicher, wenn der Patch nicht im entfernten Paketdepot ist" +msgstr "" +"Gegenstück zu pull, unsicher, wenn der Patch nicht im entfernten Paketdepot " +"ist" #: init/completions/darcs.fish:46 msgid "Record an inverse patch without changing the working copy" -msgstr "" +msgstr "Einen inversen Patch ohne Änderung der Arbeitskopie aufzeichnen" #: init/completions/darcs.fish:47 msgid "Tag the contents of the repository with a version name" @@ -3285,7 +3361,7 @@ msgstr "Inhalte des Paketdepots mit einem Versionsnamen markieren" #: init/completions/darcs.fish:48 msgid "Set a value for a preference (test, predist, ...)" -msgstr "Wert für eine Einstellung setzen (test, predist, ...)" +msgstr "Wert für eine Einstellung (test, predist, ...) festlegen" #: init/completions/darcs.fish:49 msgid "Create a diff between two versions of the repository" @@ -3309,7 +3385,7 @@ msgstr "Alle Konflikte in der Arbeitskopie f #: init/completions/darcs.fish:54 msgid "Create a distribution tarball" -msgstr "Distributions-Tardatei erstellen" +msgstr "Distributions-tarball erstellen" #: init/completions/darcs.fish:55 msgid "Locate the most recent version lacking an error" @@ -3329,7 +3405,7 @@ msgstr "Diesen Befehl deaktivieren" #: init/completions/darcs.fish:63 msgid "Specify the repository directory in which to run" -msgstr "Das Paketdepot-Verzeichnis angeben, in dem gearbeitet wird" +msgstr "Das Paketdepotverzeichnis angeben, in dem gearbeitet wird" #: init/completions/darcs.fish:71 msgid "Name of patch" @@ -3337,7 +3413,7 @@ msgstr "Name des Patch" #: init/completions/darcs.fish:72 init/completions/darcs.fish:171 msgid "Specify author id" -msgstr "Autor-ID angeben" +msgstr "Autorkennung angeben" #: init/completions/darcs.fish:73 msgid "Give patch name and comment in file" @@ -3349,8 +3425,12 @@ msgid "Answer yes to all patches" msgstr "Alle Patches mit ja beantworten" #: init/completions/darcs.fish:75 -msgid "In addition to modifications, look for files that are not boring, and thus are potentially pending addition" +msgid "" +"In addition to modifications, look for files that are not boring, and thus " +"are potentially pending addition" msgstr "" +"Neben Änderungen auch nach interessanten Dateien suchen, die möglicherweise " +"hinzugefügt werden" #: init/completions/darcs.fish:76 msgid "Delete the logfile when done" @@ -3398,7 +3478,7 @@ msgstr "Die Eingabe aus einer Pipe erwarten" #: init/completions/darcs.fish:85 init/completions/darcs.fish:104 #: init/completions/darcs.fish:134 init/completions/darcs.fish:177 msgid "Prompt user interactively" -msgstr "Anwender interaktiv fragen" +msgstr "Benutzer interaktiv fragen" #: init/completions/darcs.fish:86 msgid "Ask for extra dependencies" @@ -3410,7 +3490,7 @@ msgstr "Nicht nach zus #: init/completions/darcs.fish:88 msgid "Edit the long comment by default" -msgstr "Fehlwertmäßig den langen Kommentar editieren" +msgstr "Standardmäßig den langen Kommentar editieren" #: init/completions/darcs.fish:89 msgid "Don't give a long comment" @@ -3426,8 +3506,12 @@ msgid "Don't trust the file modification times" msgstr "Nicht auf die Veränderungszeiten der Dateien vertrauen" #: init/completions/darcs.fish:92 -msgid "Don't look for any files or directories that could be added, and don't add them automatically" -msgstr "Nicht nach Dateien und Verzeichnissen suchen, die hinzugefügt werden sollen und diese nicht automatisch hinzufügen " +msgid "" +"Don't look for any files or directories that could be added, and don't add " +"them automatically" +msgstr "" +"Nicht nach Dateien und Verzeichnissen suchen, die hinzugefügt werden sollen " +"und diese nicht automatisch hinzufügen " #: init/completions/darcs.fish:97 init/completions/darcs.fish:168 msgid "Select patches matching REGEXP" @@ -3473,11 +3557,11 @@ msgstr "Nicht automatisch Abh #: init/completions/darcs.fish:114 init/completions/darcs.fish:189 msgid "Set default repository [DEFAULT]" -msgstr "Standard-Paketdepot [DEFAULT] setzen" +msgstr "Standardpaketdepot [STANDARD] festlegen" #: init/completions/darcs.fish:115 init/completions/darcs.fish:190 msgid "Don't set default repository" -msgstr "Standard-Paketdepot nicht setzen" +msgstr "Standardpaketdepot nicht festlegen" #: init/completions/darcs.fish:116 init/completions/darcs.fish:143 msgid "Make scripts executable" @@ -3489,19 +3573,21 @@ msgstr "Skripte nicht ausf #: init/completions/darcs.fish:123 msgid "Verify that the patch was signed by a key in PUBRING" -msgstr "Überprüfen, das der Patch mit einem Schlüsel aus PUBRING signiert wurde" +msgstr "" +"Überprüfen, das der Patch mit einem Schlüssel aus PUBRING signiert wurde" #: init/completions/darcs.fish:124 msgid "Verify using openSSL with authorized keys from file 'KEYS'" -msgstr "Mittels openSSl mit autorisierten Schlüsseln aus Datei 'KEYS' überprüfen" +msgstr "" +"Mittels openSSL und autorisierten Schlüsseln aus der Datei 'KEYS' überprüfen" #: init/completions/darcs.fish:125 init/completions/darcs.fish:191 msgid "Specify sendmail command" -msgstr "sendmail-Befehl angegeben" +msgstr "sendmail-Befehl angeben" #: init/completions/darcs.fish:126 msgid "Reply to email-based patch using FROM address" -msgstr "Auf Email-basierten Patch mittels FROM-Adresse antworten" +msgstr "Auf E-Mail-basierten Patch mittels FROM-Adresse antworten" #: init/completions/darcs.fish:127 init/completions/darcs.fish:180 msgid "Mail results to additional EMAIL(s). Requires --reply" @@ -3525,7 +3611,7 @@ msgstr "Abbruch bei Patchen, die Konflikte erzeugen (Standard)" #: init/completions/darcs.fish:140 msgid "Forward unsigned messages without extra header" -msgstr "Unsignierte Nachrichten ohne zusätzliche Header-Zeile weiterleiten" +msgstr "Unsignierte Nachrichten ohne zusätzliche Kopfzeile weiterleiten" #: init/completions/darcs.fish:150 msgid "Check the entire repository" @@ -3537,7 +3623,9 @@ msgstr "Patches seit letztem Pr #: init/completions/darcs.fish:161 msgid "Don't refuse to add files differing only in case" -msgstr "Hinzufügen von Dateien, die sich nur in Gross-/Kleinschreibung unterscheiden, nicht verweigern" +msgstr "" +"Hinzufügen von Dateien, die sich nur in Groß-/Kleinschreibung unterscheiden, " +"nicht verweigern" #: init/completions/darcs.fish:172 msgid "Specify output filename" @@ -3545,11 +3633,12 @@ msgstr "Ausgabedateiname angeben" #: init/completions/darcs.fish:173 msgid "Output patch in a darcs-specific format similar to diff -u" -msgstr "Patch in einem darcs-spezifischen Format ausgeben, das diff -u entspricht" +msgstr "" +"Patch in einem darcs-spezifischen Format ausgeben, das diff -u entspricht" #: init/completions/darcs.fish:179 msgid "Specify destination email" -msgstr "Ziel-Email-Adresse angeben" +msgstr "Ziel-E-Mail-Adresse angeben" #: init/completions/darcs.fish:181 msgid "Sign the patch with your gpg key" @@ -3557,11 +3646,12 @@ msgstr "Patch mit Ihrem gpg-Schl #: init/completions/darcs.fish:182 msgid "Sign the patch with a given keyid" -msgstr "Den Patch mit einer angegebenen Schlüssel-ID signieren" +msgstr "Den Patch mit einer angegebenen Schlüsselkennung signieren" #: init/completions/darcs.fish:183 msgid "Sign the patch using openssl with a given private key" -msgstr "Den Patch unter Benutzung von openssl mit einem privaten Schlüssel signieren" +msgstr "" +"Den Patch unter Benutzung von openssl mit einem privaten Schlüssel signieren" #: init/completions/darcs.fish:184 msgid "Do not sign the patch" @@ -3569,7 +3659,7 @@ msgstr "Patch nicht signieren" #: init/completions/darcs.fish:187 msgid "Send to context stored in FILENAME" -msgstr "" +msgstr "Kontext im DATEINAMEN abgespeichert senden" #: init/completions/darcs.fish:188 msgid "Edit the patch bundle description" @@ -3585,7 +3675,7 @@ msgstr "Keinen unber #: init/completions/date.fish:1 msgid "Display date described by string" -msgstr "Datum gemäss Zeichenkette anzeigen" +msgstr "Datum gemäß Zeichenkette anzeigen" #: init/completions/date.fish:2 msgid "Display date for each line in file" @@ -3597,7 +3687,7 @@ msgstr "Ausgabe im ISO 8601-Format" #: init/completions/date.fish:4 init/completions/touch.fish:9 msgid "Set time" -msgstr "Zeit setzen" +msgstr "Zeit festlegen" #: init/completions/date.fish:5 msgid "Output RFC-2822 compliant date string" @@ -3609,7 +3699,7 @@ msgstr "Letzte Ver #: init/completions/date.fish:7 init/completions/date.fish:8 msgid "Print or set Coordinated Universal Time" -msgstr "Koordinierte Universalzeit (CUT) anzeigen oder setzen" +msgstr "Koordinierte Universalzeit (CUT) ausgeben oder festlegen" #: init/completions/df.fish:17 init/completions/du.fish:7 #: init/completions/ls.fish:22 @@ -3618,7 +3708,7 @@ msgstr "Lesbare Gr #: init/completions/df.fish:18 msgid "List inode information" -msgstr "Inode-Information anzeigen" +msgstr "Inode-Information auflisten" #: init/completions/df.fish:19 init/completions/du.fish:9 msgid "Use 1kB block size" @@ -3626,7 +3716,7 @@ msgstr "Blockgr #: init/completions/df.fish:20 msgid "List only local filesystems" -msgstr "Nur lokale Dateisysteme anzeigen" +msgstr "Nur lokale Dateisysteme auflisten" #: init/completions/df.fish:21 msgid "Use Posix format" @@ -3660,7 +3750,7 @@ msgstr "Vor Belegungsabruf sync ausf #: init/completions/df.fish:31 msgid "Print filesystem type" -msgstr "Dateisystemtyp anzeigen" +msgstr "Dateisystemtyp ausgeben" #: init/completions/df.fish:32 msgid "Excluded filesystem type" @@ -3672,11 +3762,11 @@ msgstr "Alle Dateisysteme anzeigen" #: init/completions/df.fish:39 msgid "Show sizes in gigabytes" -msgstr "Grösse in Gigabyte anzeigen" +msgstr "Größe in Gigabyte anzeigen" #: init/completions/df.fish:40 msgid "Show sizes in megabytes" -msgstr "Grösse in Megabyte anzeigen" +msgstr "Größe in Megabyte anzeigen" #: init/completions/df.fish:41 msgid "Print out the previously obtained statistics from the file systems" @@ -3684,19 +3774,19 @@ msgstr "Bisher erhaltene Statistiken #: init/completions/diff.fish:2 msgid "Ignore case differences" -msgstr "Unterschiede bei Gross-/Kleinschreibung ignorieren" +msgstr "Unterschiede bei Groß-/Kleinschreibung ignorieren" #: init/completions/diff.fish:3 msgid "Ignore case when comparing file names" -msgstr "Gross-/Kleinschreibung beim Dateinamen-Vergleich ignorieren" +msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich ignorieren" #: init/completions/diff.fish:4 msgid "Consider case when comparing file names" -msgstr "Gross-/Kleinschreibung beim Dateinamen-Vergleich beachten" +msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich beachten" #: init/completions/diff.fish:5 msgid "Ignore changes due to tab expansion" -msgstr "Änderungen aufgrund von Tab-Ausweitung ignorieren" +msgstr "Änderungen aufgrund von Tabulatorausweitung ignorieren" #: init/completions/diff.fish:6 msgid "Ignore changes in the amount of white space" @@ -3756,7 +3846,7 @@ msgstr "Ausgabe in zwei Spalten" #: init/completions/diff.fish:20 msgid "Output at most NUM print columns" -msgstr "Gebe maximal NUM Druckspalten aus" +msgstr "Gebe maximale NUM Druckspalten aus" #: init/completions/diff.fish:21 msgid "Try to find a smaller set of changes" @@ -3780,11 +3870,11 @@ msgstr "Gr #: init/completions/du.fish:2 msgid "Print file size, not disk usage" -msgstr "Dateigröße statt Plattenbelegung anzeigen" +msgstr "Dateigröße statt Plattenbelegung ausgeben" #: init/completions/du.fish:4 msgid "Use 1B block size" -msgstr "1B-Blockgrösse verwenden" +msgstr "1B-Blockgröße verwenden" #: init/completions/du.fish:5 msgid "Produce grand total" @@ -3844,7 +3934,7 @@ msgstr "Keine Init-Dateien laden" #: init/completions/emacs.fish:5 msgid "Load users init file" -msgstr "Init-Datei des Anwenders laden" +msgstr "Init-Datei des Benutzers laden" #: init/completions/emacs.fish:6 msgid "Use file as terminal" @@ -3876,11 +3966,11 @@ msgstr "Ausf #: init/completions/fish.fish:5 msgid "Output profiling information to specified file" -msgstr "Profilierungs-Information in angegebene Datei ausgeben" +msgstr "Profilierungsinformation in angegebene Datei ausgeben" #: init/completions/function.fish:1 init/completions/functions.fish:5 msgid "Set function description" -msgstr "Funktionsbeschreibung setzen" +msgstr "Funktionsbeschreibung festlegen" #: init/completions/function.fish:4 msgid "Make the function a job exit event handler" @@ -3892,7 +3982,7 @@ msgstr "Funktion zur Ereignisbehandlung bei Prozessende verwenden" #: init/completions/function.fish:6 msgid "Make the function a signal event handler" -msgstr "Funktion zur Signal-Ereignisbehandlung verwenden" +msgstr "Funktion zur Signalereignisbehandlung verwenden" #: init/completions/function.fish:7 msgid "Make the function a variable update event handler" @@ -3904,7 +3994,7 @@ msgstr "Funktion l #: init/completions/functions.fish:3 msgid "Show hidden functions" -msgstr "Versteckte Funktionen zeigen" +msgstr "Versteckte Funktionen anzeigen" #: init/completions/gcc.fish:5 msgid "Language" @@ -3912,7 +4002,7 @@ msgstr "Sprache" #: init/completions/gcc.fish:23 msgid "Pass program exit codes" -msgstr "Rückkehr-Codes des Programmes weiterreichen" +msgstr "Rückkehrcodes des Programms weiterreichen" #: init/completions/gcc.fish:24 msgid "Stop after assembler" @@ -3932,11 +4022,11 @@ msgstr "Ausgabedatei" #: init/completions/gcc.fish:28 msgid "Print commands to stderr" -msgstr "Befehle auf Standardfehlerausgabe anzeigen" +msgstr "Befehle auf Standardfehlerausgabe ausgeben" #: init/completions/gcc.fish:29 msgid "Print quoted commands to stderr, do not run" -msgstr "Maskierte Befehle auf Standardfehlerausgabe anzeigen, nicht ausführen" +msgstr "Maskierte Befehle auf Standardfehlerausgabe ausgeben, nicht ausführen" #: init/completions/gcc.fish:30 msgid "Use pipes" @@ -3964,11 +4054,11 @@ msgstr "Keine eingebauten Funktionen verwenden" #: init/completions/gcc.fish:49 msgid "Assert hosted environment" -msgstr "" +msgstr "Gehostete Umgebung bestätigen" #: init/completions/gcc.fish:50 msgid "Assert freestanding environment" -msgstr "" +msgstr "Freistehende Umgebung bestätigen" #: init/completions/gcc.fish:51 msgid "Use Microsoft extensions" @@ -4008,7 +4098,7 @@ msgstr "Alle Bitfielder sind nicht vorzeichenbehaftet" #: init/completions/gcc.fish:60 init/completions/gcc.fish:65 msgid "String constants are not const" -msgstr "Zeichenketten-Konstanten sind nicht const" +msgstr "Zeichenkettenkonstanten sind nicht const" #: init/completions/gcc.fish:61 msgid "C++ ABI version" @@ -4024,7 +4114,7 @@ msgstr "Durch new zur #: init/completions/gcc.fish:64 msgid "Put globals in the common segment" -msgstr "Global-Werte im Common-Segment einfügen" +msgstr "Globalwerte im Common-Segment einfügen" #: init/completions/gcc.fish:66 msgid "Accept $ in identifiers" @@ -4036,11 +4126,11 @@ msgstr "In Bezeichnern $ nicht akzeptieren" #: init/completions/gcc.fish:68 msgid "Do not omit unneeded temporarys" -msgstr "" +msgstr "Temporäre Dateien nicht auslassen" #: init/completions/gcc.fish:69 msgid "Allow exception violations" -msgstr "Erlaube Ausnahme-Verletzungen" +msgstr "Erlaube Ausnahmeverletzungen" #: init/completions/gcc.fish:70 msgid "Do not extend for-loop scope" @@ -4056,15 +4146,15 @@ msgstr "typeof nicht als Schl #: init/completions/gcc.fish:73 msgid "Do not emit code for implicit templates" -msgstr "" +msgstr "Keinen Code für implizite Vorlagen abgeben" #: init/completions/gcc.fish:74 msgid "Do not emit code for implicit inline templates" -msgstr "" +msgstr "Keinen Code für implizite 'inline'-Vorlagen abgeben" #: init/completions/gcc.fish:75 msgid "Do not emit out-of-line code for inline functions" -msgstr "" +msgstr "Keinen Code für abweichende 'inline'-Funktionen abgeben" #: init/completions/gcc.fish:76 msgid "Disable warnings about MFC" @@ -4088,19 +4178,21 @@ msgstr "Einge Fehler zu Warnungen herabstufen" #: init/completions/gcc.fish:81 msgid "Enable automatic template instantiation at link time" -msgstr "Automatische Template-Instanziierung zur Linkzeit aktivieren" +msgstr "Automatische Vorlageninstanziierung zur Linkzeit aktivieren" #: init/completions/gcc.fish:82 msgid "Disable generation of C++ runtime type information" -msgstr "Genererierung von C++-Laufzeit-Typinformationen deaktivieren" +msgstr "Generierung von C++-Laufzeit-Typinformationen deaktivieren" #: init/completions/gcc.fish:86 msgid "Set maximum template depth to %s" -msgstr "Maximale Mustertiefe auf %s setzen" +msgstr "Maximale Mustertiefe auf %s festlegen" #: init/completions/gcc.fish:89 msgid "Do not emit code for thread-safe initialization of local statics" msgstr "" +"Keinen Code für die threadsichere Initialisierung lokaler statischer Objekte " +"abgeben" #: init/completions/gcc.fish:90 msgid "Use __cxa_atexit for destructors" @@ -4120,7 +4212,7 @@ msgstr "Signatur erstellen" #: init/completions/gpg.fish:49 msgid "Make a clear text signature" -msgstr "Klartext-Signatur erstellen" +msgstr "Klartextsignatur erstellen" #: init/completions/gpg.fish:50 msgid "Make a detached signature" @@ -4132,7 +4224,9 @@ msgstr "Daten verschl #: init/completions/gpg.fish:52 msgid "Encrypt with a symmetric cipher using a passphrase" -msgstr "Verschlüsseln mit einer symmetrischen Chiffre mittels eines Passwortsatzes" +msgstr "" +"Verschlüsseln mit einem symmetrischen Verschlüsselungsverfahren mittels eines " +"Passwortsatzes" #: init/completions/gpg.fish:53 msgid "Store only (make a simple RFC1991 packet)" @@ -4144,11 +4238,15 @@ msgstr "Angegebene Datei oder Standardeingabe entschl #: init/completions/gpg.fish:55 msgid "Assume specified file or stdin is sigfile and verify it" -msgstr "Annehmen das die angegebene Datei oder Standardeingabe eine Signaturdatei ist und überprüfen" +msgstr "" +"Annehmen das die angegebene Datei oder Standardeingabe eine Signaturdatei ist " +"und überprüfen" #: init/completions/gpg.fish:56 msgid "Modify certain other commands to accept multiple files for processing" msgstr "" +"Bestimmte andere Befehle ändern, um mehrere Dateien für die Verarbeitung zu " +"akzeptieren" #: init/completions/gpg.fish:57 msgid "Identical to '--multifile --verify'" @@ -4163,12 +4261,20 @@ msgid "Identical to --multifile --decrypt" msgstr "Entspricht '--multifile --decrypt'" #: init/completions/gpg.fish:61 init/completions/gpg.fish:62 -msgid "List all keys from the public keyrings, or just the ones given on the command line" -msgstr "Alle Schlüssel der öffentlichen Schlüsselringe anzeigen oder nur diejenigen, die auf der Befehlszeile angegeben wurden" +msgid "" +"List all keys from the public keyrings, or just the ones given on the command " +"line" +msgstr "" +"Alle Schlüssel der öffentlichen Schlüsselringe auflisten oder nur diejenigen, " +"die auf der Befehlszeile angegeben wurden" #: init/completions/gpg.fish:63 -msgid "List all keys from the secret keyrings, or just the ones given on the command line" -msgstr "Alle Schlüssel der geheimen Schlüsselringe anzeigen oder nur diejenigen, die auf der Befehlszeilel angegeben wurden" +msgid "" +"List all keys from the secret keyrings, or just the ones given on the command " +"line" +msgstr "" +"Alle Schlüssel der geheimen Schlüsselringe auflisten oder nur diejenigen, die " +"auf der Befehlszeile angegeben wurden" #: init/completions/gpg.fish:64 msgid "Same as --list-keys, but the signatures are listed too" @@ -4176,11 +4282,12 @@ msgstr "Entspricht --list-keys, aber auch die Signaturen werden angezeigt" #: init/completions/gpg.fish:66 msgid "Same as --list-keys, but the signatures are listed and verified" -msgstr "Entspricht --list-keys, die Signaturen werden aber angezeigt und überprüft" +msgstr "" +"Entspricht --list-keys, die Signaturen werden aber angezeigt und überprüft" #: init/completions/gpg.fish:67 msgid "List all keys with their fingerprints" -msgstr "Alle Schlüssel mit ihren Fingerabdrücken anzeigen" +msgstr "Alle Schlüssel mit ihren Fingerabdrücken ausgeben" #: init/completions/gpg.fish:68 msgid "Generate a new key pair" @@ -4188,7 +4295,9 @@ msgstr "Ein neues Schl #: init/completions/gpg.fish:70 msgid "Present a menu which enables you to do all key related tasks" -msgstr "Bietet ein Menu, das Ihnen die Durchführung aller Schlüssel-relevanten Aufgaben ermöglicht" +msgstr "" +"Bietet ein Menü, das Ihnen die Durchführung aller Schlüssel-relevanten " +"Aufgaben ermöglicht" #: init/completions/gpg.fish:72 msgid "Sign a public key with your secret key" @@ -4196,7 +4305,9 @@ msgstr "Einen #: init/completions/gpg.fish:73 msgid "Sign a public key with your secret key but mark it as non exportable" -msgstr "Signiert einen öffentlichen Schlüssel mit Ihrem geheimen Schlüssel, aber markiert ihn als nicht exportierbar" +msgstr "" +"Signiert einen öffentlichen Schlüssel mit Ihrem geheimen Schlüssel, aber " +"markiert ihn als nicht exportierbar" #: init/completions/gpg.fish:75 msgid "Remove key from the public keyring" @@ -4207,8 +4318,11 @@ msgid "Remove key from the secret and public keyring" msgstr "Entferne Schlüssel vom geheimen und öffentlichen Schlüsselring" #: init/completions/gpg.fish:77 -msgid "Same as --delete-key, but if a secret key exists, it will be removed first" -msgstr "Entspricht --delete-key, aber falle ein geheimer Schlüssel existiert, wird dieser zuerst entfernt" +msgid "" +"Same as --delete-key, but if a secret key exists, it will be removed first" +msgstr "" +"Entspricht --delete-key, aber falls ein geheimer Schlüssel existiert, wird " +"dieser zuerst entfernt" #: init/completions/gpg.fish:79 msgid "Generate a revocation certificate for the complete key" @@ -4224,11 +4338,13 @@ msgstr "Alle oder angegebene Schl #: init/completions/gpg.fish:83 msgid "Same as --export but sends the keys to a keyserver" -msgstr "Entspricht --export, aber sendet die Schlüssel an einen Schlüssel-Server" +msgstr "" +"Entspricht --export, aber sendet die Schlüssel an einen Schlüsselserver" #: init/completions/gpg.fish:84 init/completions/gpg.fish:85 msgid "Same as --export, but exports the secret keys instead" -msgstr "Entspricht --export, aber exportiert stattdessen die geheimen Schlüssel" +msgstr "" +"Entspricht --export, aber exportiert stattdessen die geheimen Schlüssel" #: init/completions/gpg.fish:87 init/completions/gpg.fish:88 msgid "Import/merge keys" @@ -4236,47 +4352,63 @@ msgstr "Schl #: init/completions/gpg.fish:90 msgid "Import the keys with the given key IDs from a keyserver" -msgstr "Schlüssel mit den angegebenenn Schlüssel-IDs von einem Schlüssel-Server importieren" +msgstr "" +"Schlüssel mit den angegebenen Schlüsselkennungen von einem Schlüsselserver " +"importieren" #: init/completions/gpg.fish:91 -msgid "Request updates from a keyserver for keys that already exist on the local keyring" -msgstr "Aktualisierungen für Schlüssel von einem Schlüssel-Server abrufen, die bereits in einem lokalen Schlüsselring vorhanden sind" +msgid "" +"Request updates from a keyserver for keys that already exist on the local " +"keyring" +msgstr "" +"Aktualisierungen für Schlüssel von einem Schlüsselserver abrufen, die " +"bereits in einem lokalen Schlüsselring vorhanden sind" #: init/completions/gpg.fish:92 msgid "Search the keyserver for the given names" -msgstr "Schlüssel-Server nach den angegebenen Namen durchsuchen" +msgstr "Schlüsselserver nach den angegebenen Namen durchsuchen" #: init/completions/gpg.fish:93 msgid "Do trust database maintenance" -msgstr "Wartung der Vertrauens-Datenbank durchführen" +msgstr "Wartung der Vertrauensdatenbank durchführen" #: init/completions/gpg.fish:94 msgid "Do trust database maintenance without user interaction" -msgstr "Wartung der Vertrauens-Datenbank ohne Anwender-Beteiligung" +msgstr "Wartung der Vertrauensdatenbank ohne Benutzerbeteiligung durchführen" #: init/completions/gpg.fish:96 msgid "Send the ownertrust values to stdout" -msgstr "Ownertrust-Werte auf Standardausgabe schicken" +msgstr "Eigentümervertrauenswerte auf Standardausgabe schicken" #: init/completions/gpg.fish:97 -msgid "Update the trustdb with the ownertrust values stored in specified files or stdin" -msgstr "trustdb mit den ownertrust-Werten der angegebenen Dateien oder Standardeingabe aktualisieren" +msgid "" +"Update the trustdb with the ownertrust values stored in specified files or " +"stdin" +msgstr "" +"Vertrauensdatenbank mit den Eigentümervertrauenswerten der angegebenen " +"Dateien oder Standardeingabe aktualisieren" #: init/completions/gpg.fish:99 msgid "Create signature caches in the keyring" -msgstr "Signatur-Cache im Schlüsselring erstellen" +msgstr "Signaturcache im Schlüsselring erstellen" #: init/completions/gpg.fish:101 -msgid "Print message digest of specified algorithm for all given files or stdin" -msgstr "Nachrichten-Extrakt des angegbenen Algorithmus für alle angegebenen Dateien oder Standardeingabe ausgeben" +msgid "" +"Print message digest of specified algorithm for all given files or stdin" +msgstr "" +"Nachrichtenextrakt des angegebenen Algorithmus für alle angegebenen Dateien " +"oder Standardeingabe ausgeben" #: init/completions/gpg.fish:102 msgid "Print message digest of all algorithms for all given files or stdin" -msgstr "Nachrichten-Extrakt aller Algorithmen für alle angegebenen Dateien oder Standardeingabe ausgeben" +msgstr "" +"Nachrichtenextrakt aller Algorithmen für alle angegebenen Dateien oder " +"Standardeingabe ausgeben" #: init/completions/gpg.fish:104 msgid "Emit specified number of random bytes of the given quality level" -msgstr "Angegebene Anzahl zufälliger Bytes des gegebenen Qualitätsgrades ausgeben" +msgstr "" +"Angegebene Anzahl zufälliger Bytes des gegebenen Qualitätsgrades ausgeben" #: init/completions/gpg.fish:106 msgid "Display version and supported algorithms, and exit" @@ -4295,8 +4427,11 @@ msgid "Write output to specified file" msgstr "Schreibe Ausgabe in die angegebene Datei" #: init/completions/gpg.fish:118 -msgid "Sets a limit on the number of bytes that will be generated when processing a file" -msgstr "Begrenzt die Anzahl Bytes, die beim Verarbeiten einer Datei generiert werden" +msgid "" +"Sets a limit on the number of bytes that will be generated when processing a " +"file" +msgstr "" +"Begrenzt die Anzahl Bytes, die beim Verarbeiten einer Datei generiert werden" #: init/completions/gpg.fish:120 msgid "Use specified key as the key to sign with" @@ -4308,19 +4443,21 @@ msgstr "Angegebenen Schl #: init/completions/gpg.fish:123 msgid "Encrypt for specified user id" -msgstr "für angegebene Anwender-ID verschlüsseln" +msgstr "Für angegebene Benutzerkennung verschlüsseln" #: init/completions/gpg.fish:124 msgid "Encrypt for specified user id, but hide the keyid of the key" -msgstr "für angegebene Anwender-ID verschlüsseln, Schlüssel-ID des Schlüssels aber verbergen" +msgstr "" +"Für angegebene Benutzerkennung verschlüsseln, aber" +"die Schlüsselkennung des Schlüssels verbergen" #: init/completions/gpg.fish:125 msgid "Use specified user id as default recipient" -msgstr "Angegebene Anwender-ID als Standard-Empfänger benutzen" +msgstr "Angegebene Benutzerkennung als Standardempfänger benutzen" #: init/completions/gpg.fish:126 msgid "Use the default key as default recipient" -msgstr "Standard-Schlüssel als Standard-Empfänger benutzen" +msgstr "Standardschlüssel als Standardempfänger benutzen" #: init/completions/gpg.fish:127 msgid "Reset --default-recipient and --default-recipient-self" @@ -4337,15 +4474,24 @@ msgstr "Komprimierungsgrad" #: init/completions/gpg.fish:135 msgid "Use a different decompression method for BZIP2 compressed files" -msgstr "Eine andere Dekomprimierungsmethode für BZIP2-komprimierte Dateien verwenden" +msgstr "" +"Eine andere Dekomprimierungsmethode für BZIP2-komprimierte Dateien verwenden" #: init/completions/gpg.fish:137 -msgid "Treat input files as text and store them in the OpenPGP canonical text form with standard 'CRLF' line endings" -msgstr "Behandle Eingabedateien als Text und speichere sie in der anerkannten OpenPGP-Textform mit Standard-Zeilenendungen CRLF" +msgid "" +"Treat input files as text and store them in the OpenPGP canonical text form " +"with standard 'CRLF' line endings" +msgstr "" +"Behandle Eingabedateien als Text und speichere sie in der anerkannten " +"OpenPGP-Textform mit Standardzeilenendungen CRLF" #: init/completions/gpg.fish:138 -msgid "Don't treat input files as text and store them in the OpenPGP canonical text form with standard 'CRLF' line endings" -msgstr "Behandle Eingabedateien nicht als Text und speichere sie in der anerkannten OpenPGP-Textform mit Standard-Zeilenendungen CRLF" +msgid "" +"Don't treat input files as text and store them in the OpenPGP canonical text " +"form with standard 'CRLF' line endings" +msgstr "" +"Behandle Eingabedateien nicht als Text und speichere sie in der anerkannten " +"OpenPGP-Textform mit Standardzeilenendungen CRLF" #: init/completions/gpg.fish:140 msgid "Don't make any changes (this is not completely implemented)" @@ -4370,31 +4516,44 @@ msgstr "Niemals Ausgaben aufs Terminal schreiben" #: init/completions/gpg.fish:148 msgid "Assume yes on most questions" -msgstr "Ja als Standard-Antwort annehmen" +msgstr "Ja als Standardantwort annehmen" #: init/completions/gpg.fish:149 msgid "Assume no on most questions" -msgstr "Nein als Standard-Antwort annehmen" +msgstr "Nein als Standardantwort annehmen" #: init/completions/gpg.fish:151 msgid "Prompt for a certification level when making a key signature" -msgstr "Nach einem Zertifizierungs-Grad fragen, wenn eine Schlüssel-Signatur erstellt wird" +msgstr "" +"Nach einem Zertifizierungsgrad fragen, wenn eine Schlüsselsignatur erstellt " +"wird" #: init/completions/gpg.fish:152 msgid "Don't prompt for a certification level when making a key signature" -msgstr "Nicht nach einem Zertifizierungs-Grad fragen, wenn eine Schlüssel-Signatur erstellt wird" +msgstr "" +"Nicht nach einem Zertifizierungsgrad fragen, wenn eine Schlüsselsignatur " +"erstellt wird" #: init/completions/gpg.fish:153 -msgid "The default certification level to use for the level check when signing a key" -msgstr "Standard-Zertifizierungsgrad für die Prüfung beim Signieren eines Schlüssels" +msgid "" +"The default certification level to use for the level check when signing a key" +msgstr "" +"Standardzertifizierungsgrad für die Prüfung beim Signieren eines Schlüssels" #: init/completions/gpg.fish:154 -msgid "Disregard any signatures with a certification level below specified level when building the trust database" -msgstr "Beim Erstellen der Vertrauens-Datenbank alle Signaturen verwerfen, deren Zertifizierungs-Grad unter dem angegebenen liegt" +msgid "" +"Disregard any signatures with a certification level below specified level " +"when building the trust database" +msgstr "" +"Beim Erstellen der Vertrauensdatenbank alle Signaturen verwerfen, deren " +"Zertifizierungsgrad unter dem angegebenen liegt" #: init/completions/gpg.fish:156 -msgid "Assume that the specified key is as trustworthy as one of your own secret keys" -msgstr "Voraussetzen, das der angegebene Schlüssel so vertrauenswürdig ist wie einer Ihrer eigenen geheimen Schlüssel" +msgid "" +"Assume that the specified key is as trustworthy as one of your own secret keys" +msgstr "" +"Voraussetzen, das der angegebene Schlüssel so vertrauenswürdig ist wie einer " +"Ihrer eigenen geheimen Schlüssel" #: init/completions/gpg.fish:157 msgid "Specify trust model" @@ -4402,15 +4561,15 @@ msgstr "Vertrauensmodell angeben" #: init/completions/gpg.fish:159 msgid "Select how to display key IDs" -msgstr "Auswahl: Wie werden Schlüssel-IDs angezeigt" +msgstr "Wählen Sie aus, wie Schlüsselkennungen angezeigt werden sollen" #: init/completions/gpg.fish:161 msgid "Use specified keyserver" -msgstr "Angegebenen Schlüssel-Server verwenden" +msgstr "Angegebenen Schlüsselserver verwenden" #: init/completions/gpg.fish:162 msgid "Options for the keyserver" -msgstr "Optionen für den Schlüssel-Server" +msgstr "Optionen für den Schlüsselserver" #: init/completions/gpg.fish:164 msgid "Options for importing keys" @@ -4422,7 +4581,7 @@ msgstr "Optionen zum Exportieren von Schl #: init/completions/gpg.fish:166 msgid "Options for listing keys and signatures" -msgstr "Optionen zum Anzeigen von Schlüsseln und Signaturen" +msgstr "Optionen zum Auflisten von Schlüsseln und Signaturen" #: init/completions/gpg.fish:167 msgid "Options for verifying signatures" @@ -4430,23 +4589,31 @@ msgstr "Optionen zum #: init/completions/gpg.fish:169 msgid "The command line that should be run to view a photo ID" -msgstr "Befehlszeile, die zum Betrachten einer Foto-ID benutzt werden soll" +msgstr "Befehlszeile, die zum Betrachten einer Fotokennung benutzt werden soll" #: init/completions/gpg.fish:170 -msgid "Sets a list of directories to search for photo viewers and keyserver helpers" -msgstr "Setzt eine Liste von Verzeichnissen, die nach Bildbetrachtern und Keyserver-Hilfsprogrammen durchsucht werden" +msgid "" +"Sets a list of directories to search for photo viewers and keyserver helpers" +msgstr "" +"Legt eine Liste von Verzeichnissen fest, die nach Bildbetrachtern und " +"Schlüsselserver-Hilfsprogrammen durchsucht werden" #: init/completions/gpg.fish:172 -msgid "Display the keyring name at the head of key listings to show which keyring a given key resides on" -msgstr "Schlüsselringname zu Beginn der Schlüsselliste anzeigen, um zu zeigen, in welchen Schlüsselring sich ein gegebener Schlüssel befindet" +msgid "" +"Display the keyring name at the head of key listings to show which keyring a " +"given key resides on" +msgstr "" +"Schlüsselringname zu Beginn der Schlüsselliste anzeigen, um zu zeigen, in " +"welchem Schlüsselring sich ein gegebener Schlüssel befindet" #: init/completions/gpg.fish:173 msgid "Add specified file to the current list of keyrings" -msgstr "Angegebene Datei zur aktuellen Schlüsselring-Liste hinzufügen" +msgstr "Angegebene Datei zur aktuellen Schlüsselringliste hinzufügen" #: init/completions/gpg.fish:175 msgid "Add specified file to the current list of secret keyrings" -msgstr "Angegebene Datei zur aktuellen Liste geheimer Schlüsselringe hinzufügen" +msgstr "" +"Angegebene Datei zur aktuellen Liste geheimer Schlüsselringe hinzufügen" #: init/completions/gpg.fish:176 msgid "Designate specified file as the primary public keyring" @@ -4454,27 +4621,32 @@ msgstr "Angegebene Datei als prim #: init/completions/gpg.fish:178 msgid "Use specified file instead of the default trustdb" -msgstr "Angegebene Datei anstelle der Standard-trustdb nutzen" +msgstr "Angegebene Datei anstelle der Standardvertrauensdatenbank nutzen" #: init/completions/gpg.fish:179 msgid "Set the home directory" -msgstr "Startverzeichnis setzen" +msgstr "Startverzeichnis festlegen" #: init/completions/gpg.fish:180 msgid "Set the native character set" -msgstr "Standard-Zeichensatz setzen" +msgstr "Standardzeichensatz festlegen" #: init/completions/gpg.fish:182 msgid "Assume that following command line arguments are given in UTF8" -msgstr "Annehmen, das die folgenden Befehlszeilenargumente in UTF8 kodiert sind" +msgstr "" +"Annehmen, das die folgenden Befehlszeilenargumente in UTF8 kodiert sind" #: init/completions/gpg.fish:183 -msgid "Assume that following arguments are encoded in the character set specified by --display-charset" -msgstr "Annehmen, das die folgenden Argumente im durch --display-charset spezifizierten Zeichensatz kodiert sind" +msgid "" +"Assume that following arguments are encoded in the character set specified by " +"--display-charset" +msgstr "" +"Annehmen, das die folgenden Argumente im durch --display-charset " +"bestimmten Zeichensatz kodiert sind" #: init/completions/gpg.fish:184 msgid "Read options from specified file, do not read the default options file" -msgstr "Optionen aus angegebener Datei lesen, Standard-Optionsdatei nicht lesen" +msgstr "Optionen aus angegebener Datei lesen, Standardoptionsdatei nicht lesen" #: init/completions/gpg.fish:185 msgid "Shortcut for '--options /dev/null'" @@ -4486,7 +4658,8 @@ msgstr "Erweiterungsmodul laden" #: init/completions/gpg.fish:188 msgid "Write special status strings to the specified file descriptor" -msgstr "Spezielle Statusmeldungen auf den angegebenen Dateideskriptor schreiben" +msgstr "" +"Spezielle Statusmeldungen auf den angegebenen Dateideskriptor schreiben" #: init/completions/gpg.fish:189 msgid "Write log output to the specified file descriptor" @@ -4498,11 +4671,14 @@ msgstr "Attribut-Unterpakete auf angegebenen Dateideskriptor schreiben" #: init/completions/gpg.fish:192 msgid "Include secret key comment packets when exporting secret keys" -msgstr "Kommentarpakete aus geheimen Schlüsseln bei deren Export einschliessen" +msgstr "" +"Kommentarpakete aus geheimen Schlüsseln bei deren Export mit einschließen" #: init/completions/gpg.fish:193 msgid "Don't include secret key comment packets when exporting secret keys" -msgstr "Kommentarpakete aus geheimen Schlüsseln bei deren Export nicht einschliessen" +msgstr "" +"Kommentarpakete aus geheimen Schlüsseln bei deren Export nicht mit " +"einschließen" #: init/completions/gpg.fish:195 msgid "Use specified string as comment string" @@ -4522,27 +4698,30 @@ msgstr "Version nicht in ASCII-bewehrter Ausgabe einf #: init/completions/gpg.fish:204 msgid "Put the specified name value pair into the signature as notation data" -msgstr "Setze das angegeben Wertepaar als Notationsdaten in die Signatur" +msgstr "Das angegebene Wertepaar als Notationsdaten in die Signatur einfügen" #: init/completions/gpg.fish:205 msgid "Set signature policy" -msgstr "Signaturregeln einrichten" +msgstr "Signaturregeln festlegen" #: init/completions/gpg.fish:206 msgid "Set certificate policy" -msgstr "Zertifikats-Regeln einrichten" +msgstr "Zertifikatsregeln festlegen" #: init/completions/gpg.fish:207 msgid "Set signature and certificate policy" -msgstr "Signatur- und Zertifikats-Regeln einrichten" +msgstr "Signatur- und Zertifikatsregeln festlegen" #: init/completions/gpg.fish:208 msgid "Use specified URL as a preferred keyserver for data signatures" -msgstr "Angegebene URL als bevorzugten Schlüssel-Server für Datensignaturen nutzen" +msgstr "" +"Angegebene URL als bevorzugten Schlüsselserver für Datensignaturen benutzen" #: init/completions/gpg.fish:210 msgid "Use specified string as the filename which is stored inside messages" -msgstr "Angegebene Zeichenkette als in den Nachrichten gespeicherten Dateinamen verwenden" +msgstr "" +"Angegebene Zeichenkette als in den Nachrichten gespeicherten Dateinamen " +"verwenden" #: init/completions/gpg.fish:212 msgid "Set the 'for your eyes only' flag in the message" @@ -4561,12 +4740,20 @@ msgid "Don't create file with name as given in data" msgstr "Datei nicht mit in den Daten enthaltenem Namen erstellen" #: init/completions/gpg.fish:218 -msgid "Number of completely trusted users to introduce a new key signer (defaults to 1)" +msgid "" +"Number of completely trusted users to introduce a new key signer (defaults to " +"1)" msgstr "" +"Anzahl der vollständig vertrauenswürdigen Benutzer, um einen neuen " +"Schlüsselunterzeichner einzuführen (Standard ist 1)" #: init/completions/gpg.fish:219 -msgid "Number of marginally trusted users to introduce a new key signer (defaults to 3)" +msgid "" +"Number of marginally trusted users to introduce a new key signer (defaults to " +"3)" msgstr "" +"Anzahl der beschränkt vertrauenswürdigen Benutzer, um einen neuen " +"Schlüsselunterzeichner einzuführen (Standard ist 3)" #: init/completions/gpg.fish:221 msgid "Maximum depth of a certification chain (default is 5)" @@ -4574,7 +4761,7 @@ msgstr "Maximale Tiefe einer Zertifizierungskette (Standard 5)" #: init/completions/gpg.fish:223 msgid "Use specified cipher algorithm" -msgstr "Benutze angegebenen Chiffrier-Algorithmus" +msgstr "Benutze angegebenen Verschlüsselungsalgorithmus" #: init/completions/gpg.fish:224 msgid "Use specified message digest algorithm" @@ -4582,23 +4769,26 @@ msgstr "Angegebenen Message-Digest-Algorithmus verwenden" #: init/completions/gpg.fish:225 msgid "Use specified compression algorithm" -msgstr "Benutze angegebenen Komprimierungs-Algorithmus" +msgstr "Benutze angegebenen Kompressionsalgorithmus" #: init/completions/gpg.fish:226 msgid "Use specified message digest algorithm when signing a key" -msgstr "Benutze angegebenen Message-Digest-Algorithmus zum Signieren eines Schlüssels" +msgstr "" +"Benutze angegebenen Message-Digest-Algorithmus zum Signieren eines Schlüssels" #: init/completions/gpg.fish:227 msgid "Use specified cipher algorithm to protect secret keys" -msgstr "Benutze angegebenen Chiffrier-Algorithmus zum Schutz geheimer Schlüssel" +msgstr "" +"Benutze angegebenen Verschlüsselungsalgorithmus zum Schutz geheimer Schlüssel" #: init/completions/gpg.fish:228 msgid "Use specified digest algorithm to mangle the passphrases" -msgstr "Benutze angegebenen Digest-Algorithmus zum Verstümmeln der Passwortsätze" +msgstr "" +"Benutze angegebenen Digest-Algorithmus zum Verstümmeln der Passwortsätze" #: init/completions/gpg.fish:229 msgid "Selects how passphrases are mangled" -msgstr "Auswahl, wie Passwort-Sätze verstümmelt werden" +msgstr "Auswahl, wie Passwortsätze verstümmelt werden" #: init/completions/gpg.fish:231 msgid "Integrity protect secret keys by using a SHA-1 checksum" @@ -4606,11 +4796,14 @@ msgstr "Integrit #: init/completions/gpg.fish:233 msgid "Never allow the use of specified cipher algorithm" -msgstr "Niemals die Benutzung des angegebenen Chiffrier-Algorithmus zulassen" +msgstr "" +"Niemals die Benutzung des angegebenen Verschlüsselungsalgorithmus zulassen" #: init/completions/gpg.fish:234 msgid "Never allow the use of specified public key algorithm" -msgstr "Niemals die Benutzung des angegebenen Algorithmus für öffentliche Schlüssel zulassen" +msgstr "" +"Niemals die Benutzung des angegebenen Algorithmus für öffentliche Schlüssel " +"zulassen" #: init/completions/gpg.fish:236 msgid "Do not cache the verification status of key signatures" @@ -4622,7 +4815,8 @@ msgstr "Nicht jede Signatur direkt nach der Erstellung verifizieren" #: init/completions/gpg.fish:239 msgid "Automatically run the --check-trustdb command internally when needed" -msgstr "Den Befehl --check-trustdb automatisch intern starten, falls erforderlich" +msgstr "" +"Den Befehl --check-trustdb automatisch intern starten, falls erforderlich" #: init/completions/gpg.fish:240 msgid "Never automatically run the --check-trustdb" @@ -4630,31 +4824,35 @@ msgstr "--check-trustdb niemals automatisch ausf #: init/completions/gpg.fish:242 msgid "Do not put the recipient keyid into encrypted packets" -msgstr "Empfänger-Schlüssel-ID nicht in verschlüsselte Pakete einfügen" +msgstr "Empfänger-Schlüsselkennung nicht in verschlüsselte Pakete einfügen" #: init/completions/gpg.fish:243 msgid "Put the recipient keyid into encrypted packets" -msgstr "Empfänger-Schlüssel-ID in verschlüsselte Pakete einfügen" +msgstr "Empfänger-Schlüsselkennung in verschlüsselte Pakete einfügen" #: init/completions/gpg.fish:244 -msgid "Change the behavior of cleartext signatures so that they can be used for patch files" -msgstr "Verhalten von Klartext-Signaturen ändern, damit sie für Patch-Dateien genutzt werden können" +msgid "" +"Change the behavior of cleartext signatures so that they can be used for " +"patch files" +msgstr "" +"Verhalten von Klartextsignaturen ändern, damit sie für Patch-Dateien genutzt " +"werden können" #: init/completions/gpg.fish:246 msgid "Mangle From-field of email headers (default)" -msgstr "From-Feld aus Email-Kopfzeilen verstümmeln (Standard)" +msgstr "From-Feld aus E-Mail-Kopfzeilen verstümmeln (Standard)" #: init/completions/gpg.fish:247 msgid "Do not mangle From-field of email headers" -msgstr "From-Feld aus Email-Kopfzeilen nicht verstümmeln" +msgstr "From-Feld aus E-Mail-Kopfzeilen nicht verstümmeln" #: init/completions/gpg.fish:249 msgid "Read passphrase from specified file descriptor" -msgstr "Passwort-Satz aus dem angegebenen Dateideskriptor lesen" +msgstr "Passwortsatz aus dem angegebenen Dateideskriptor lesen" #: init/completions/gpg.fish:250 msgid "Read user input from specified file descriptor" -msgstr "Anwendereingaben aus dem angegebenen Dateideskriptor lesen" +msgstr "Benutzereingaben aus dem angegebenen Dateideskriptor lesen" #: init/completions/gpg.fish:252 msgid "Try to use the GnuPG-Agent" @@ -4686,23 +4884,34 @@ msgstr "Keine v4-Schl #: init/completions/gpg.fish:262 msgid "Force the use of encryption with a modification detection code" -msgstr "Verschlüsselungsbenutzung mit einem Veränderungs-Erkennungscode erzwingen" +msgstr "" +"Benutzung der Verschlüsselung mit einem Veränderungserkennungscode erzwingen" #: init/completions/gpg.fish:263 msgid "Disable the use of the modification detection code" -msgstr "Benutzung des Veränderungs-Erkennungscodes deaktivieren" +msgstr "Benutzung des Veränderungserkennungscodes deaktivieren" #: init/completions/gpg.fish:265 -msgid "Allow the import and use of keys with user IDs which are not self-signed" -msgstr "Import und Benutzung von Anwender-IDs zulassen, die nicht selbst-signiert sind" +msgid "" +"Allow the import and use of keys with user IDs which are not self-signed" +msgstr "" +"Import und Benutzung von Benutzerkennungen zulassen, die nicht selbst " +"signiert sind" #: init/completions/gpg.fish:266 -msgid "Do not allow the import and use of keys with user IDs which are not self-signed" -msgstr "Import und Benutzung von Anwender-IDs nicht zulassen, die nicht selbst-signiert sind" +msgid "" +"Do not allow the import and use of keys with user IDs which are not " +"self-signed" +msgstr "" +"Import und Benutzung von Benutzerkennungen nicht zulassen, die nicht " +"selbst signiert sind" #: init/completions/gpg.fish:268 -msgid "Disable all checks on the form of the user ID while generating a new one" -msgstr "Alle Prüfungen des Anwender-ID-Formats deaktivieren, wenn ein neuer generiert wird" +msgid "" +"Disable all checks on the form of the user ID while generating a new one" +msgstr "" +"Alle Prüfungen des Benutzerkennungsformats deaktivieren, wenn ein neuer " +"generiert wird" #: init/completions/gpg.fish:270 msgid "Do not fail if signature is older than key" @@ -4721,20 +4930,27 @@ msgid "Do not fail on MDC integrity protection failiure" msgstr "Kein Abbruch beim Versagen des MDC-Integritätsschutzes" #: init/completions/gpg.fish:275 -msgid "Lock the databases the first time a lock is requested and do not release the lock until the process terminates" -msgstr "Datenbank sperren, sobald eine Sperre angefordert wird und nicht freigeben, bevor der Prozess beendet wird" +msgid "" +"Lock the databases the first time a lock is requested and do not release the " +"lock until the process terminates" +msgstr "" +"Datenbank sperren, sobald eine Sperre angefordert wird und nicht freigeben, " +"bevor der Prozess beendet wird" #: init/completions/gpg.fish:276 msgid "Release the locks every time a lock is no longer needed" msgstr "Sperren freigeben, sobald eine Sperre nicht mehr benötigt wird" #: init/completions/gpg.fish:278 -msgid "Do not create an internal pool file for quicker generation of random numbers" -msgstr "Keine interne Pooldatei für die schnelle Erstellung von Zufallszahlen erstellen" +msgid "" +"Do not create an internal pool file for quicker generation of random numbers" +msgstr "" +"Keine interne Pooldatei für die schnelle Erstellung von Zufallszahlen " +"erstellen" #: init/completions/gpg.fish:279 msgid "Reset verbose level to 0" -msgstr "Geschwätzigkeits-Wert auf 0 zurücksetzen" +msgstr "Ausführlichkeitswert auf 0 zurücksetzen" #: init/completions/gpg.fish:280 msgid "Suppress the initial copyright message" @@ -4745,8 +4961,12 @@ msgid "Suppress the warning about 'using insecure memory'" msgstr "Warnung über die Verwendung unsicheren Speichers unterdrücken" #: init/completions/gpg.fish:282 -msgid "Suppress the warning about unsafe file and home directory (--homedir) permissions" -msgstr "Warnung über unsichere Datei- und Startverzeichnisberechtigungen (--homedir) unterdrücken" +msgid "" +"Suppress the warning about unsafe file and home directory (--homedir) " +"permissions" +msgstr "" +"Warnung über unsichere Datei- und Startverzeichnisberechtigungen (--homedir) " +"unterdrücken" #: init/completions/gpg.fish:283 msgid "Suppress the warning about missing MDC integrity protection" @@ -4758,15 +4978,17 @@ msgstr "Nicht starten, wenn GnuPG keinen sicheren Speicher benutzen kann" #: init/completions/gpg.fish:287 msgid "Do not refuse to run if GnuPG cannot get secure memory (default)" -msgstr "Starten, obwohl GnuPG nicht im sicheren Speicher laufen kann (Standard)" +msgstr "" +"Starten, obwohl GnuPG nicht im sicheren Speicher laufen kann (Standard)" #: init/completions/gpg.fish:288 msgid "Assume the input data is not in ASCII armored format" -msgstr "Voraussetzen, das die Eingabedaten nicht im ASCII-bewehrten Format vorliegen" +msgstr "" +"Voraussetzen, das die Eingabedaten nicht im ASCII-bewehrten Format vorliegen" #: init/completions/gpg.fish:290 msgid "Do not add the default keyrings to the list of keyrings" -msgstr "Standard-Schlüsselringe nicht der Keyring-Liste hinzufügen" +msgstr "Standardschlüsselringe nicht der Schlüsselringliste hinzufügen" #: init/completions/gpg.fish:292 msgid "Skip the signature verification step" @@ -4774,27 +4996,41 @@ msgstr "Verifizierung der Signatur #: init/completions/gpg.fish:294 msgid "Print key listings delimited by colons" -msgstr "Schlüsselauflistungen mit Doppelpunkt getrennt anzeigen" +msgstr "Schlüsselauflistungen mit Doppelpunkt getrennt ausgeben" #: init/completions/gpg.fish:295 -msgid "Print key listings delimited by colons (like --with-colons) and print the public key data" -msgstr "Begrenzt Schlüsselauflistungen mit Doppelpunkt (wie --with-colons) und gibt die Daten des öffentlichen Schlüssels aus" +msgid "" +"Print key listings delimited by colons (like --with-colons) and print the " +"public key data" +msgstr "" +"Begrenzt Schlüsselauflistungen mit Doppelpunkt (wie --with-colons) und gibt " +"die Daten des öffentlichen Schlüssels aus" #: init/completions/gpg.fish:296 -msgid "Same as the command --fingerprint but changes only the format of the output and may be used together with another command" -msgstr "Entspricht dem Befehl --fingerprint, ändert aber nur das Ausgabeformat und kann mit anderen Befehlen zusammen genutzt werden" +msgid "" +"Same as the command --fingerprint but changes only the format of the output " +"and may be used together with another command" +msgstr "" +"Entspricht dem Befehl --fingerprint, ändert aber nur das Ausgabeformat und " +"kann mit anderen Befehlen zusammen genutzt werden" #: init/completions/gpg.fish:298 msgid "Changes the output of the list commands to work faster" msgstr "Ändert die Ausgabe der List-Befehle für schnellere Abarbeitung" #: init/completions/gpg.fish:299 -msgid "Do not merge primary user ID and primary key in --with-colon listing mode and print all timestamps as UNIX timestamps" -msgstr "Im Anzeigemodus --with-colon primäre Anwender-ID und primären Schlüssel nicht mischen und alle Zeitstempel als UNIX-Zeitstempel ausgeben" +msgid "" +"Do not merge primary user ID and primary key in --with-colon listing mode and " +"print all timestamps as UNIX timestamps" +msgstr "" +"Im Anzeigemodus --with-colon primäre Benutzerkennung und primären Schlüssel " +"nicht mischen und alle Zeitstempel als UNIX-Zeitstempel ausgeben" #: init/completions/gpg.fish:301 -msgid "Changes the behaviour of some commands. This is like --dry-run but different" -msgstr "Ändert das Verhalten einiger Befehle. Ähnlich --dry-run, aber doch anders" +msgid "" +"Changes the behaviour of some commands. This is like --dry-run but different" +msgstr "" +"Ändert das Verhalten einiger Befehle. Ähnlich --dry-run, aber doch anders" #: init/completions/gpg.fish:303 msgid "Display the session key used for one message" @@ -4802,7 +5038,9 @@ msgstr "Zeige den f #: init/completions/gpg.fish:304 msgid "Don't use the public key but the specified session key" -msgstr "Nicht den öffentlichen Schlüssel, sondern den angegebenen Sitzungsschlüssel benutzen" +msgstr "" +"Nicht den öffentlichen Schlüssel, sondern den angegebenen Sitzungsschlüssel " +"benutzen" #: init/completions/gpg.fish:306 init/completions/gpg.fish:309 msgid "Prompt for an expiration time" @@ -4813,16 +5051,30 @@ msgid "Do not prompt for an expiration time" msgstr "Nicht nach einer Ablaufzeit fragen" #: init/completions/gpg.fish:312 -msgid "Don't look at the key ID as stored in the message but try all secret keys in turn to find the right decryption key" -msgstr "Die in der Nachricht gespeicherte Schlüssel-ID nicht beachten, sondern alle geheimen Schlüssel zum Finden des richtigen Entschlüsselungs-Schlüsseln versuchen" +msgid "" +"Don't look at the key ID as stored in the message but try all secret keys in " +"turn to find the right decryption key" +msgstr "" +"Die in der Nachricht gespeicherte Schlüsselkennung nicht beachten, sondern " +"alle geheimen Schlüssel zum Finden des richtigen Entschlüsselungsschlüssels " +"versuchen" #: init/completions/gpg.fish:313 -msgid "Enable a mode in which filenames of the form -&n, where n is a non-negative decimal number, refer to the file descriptor n and not to a file with that name" +msgid "" +"Enable a mode in which filenames of the form -&n, where n is a non-negative " +"decimal number, refer to the file descriptor n and not to a file with that " +"name" msgstr "" +"Einen Modus aktivieren, in dem Dateinamen der Form -&n, wobei n eine nicht " +"negative Dezimalzahl ist, sich auf den Dateideskriptor n beziehen and nicht " +"auf " +"eine Datei mit diesem Namen" #: init/completions/gpg.fish:315 msgid "Sets up a named group, which is similar to aliases in email programs" -msgstr "Richtet eine benannte Gruppe ein, die einem alias in Email-Programmen entspricht" +msgstr "" +"Richtet eine benannte Gruppe ein, die Aliasnamen in E-Mail-Programmen " +"entspricht" #: init/completions/gpg.fish:316 msgid "Remove a given entry from the --group list" @@ -4833,32 +5085,44 @@ msgid "Remove all entries from the --group list" msgstr "Alle Einträge aus der --group-Liste entfernen" #: init/completions/gpg.fish:319 -msgid "Don't change the permissions of a secret keyring back to user read/write only" -msgstr "Berechtigungen eines geheimen Schlüsselrings nicht auf Lesen/Schreiben für den Eigentümer zurücksetzen" +msgid "" +"Don't change the permissions of a secret keyring back to user read/write only" +msgstr "" +"Berechtigungen eines geheimen Schlüsselrings nicht auf Lesen/Schreiben für " +"den Eigentümer zurücksetzen" #: init/completions/gpg.fish:321 msgid "Set the list of personal cipher preferences to the specified string" -msgstr "Setze die Liste der persönlichen Chiffrier-Einstellungen gemäß der angegebenen Zeichenkette" +msgstr "" +"Die Liste der persönlichen Verschlüsselungseinstellungen gemäß der " +"angegebenen Zeichenkette festlegen" #: init/completions/gpg.fish:322 msgid "Set the list of personal digest preferences to the specified string" -msgstr "Setze die Liste der persönlichen Übersichtseinstellungen gemäß der angegebenen Zeichenkette" +msgstr "" +"Die Liste der persönlichen Übersichtseinstellungen gemäß der " +"angegebenen Zeichenkette festlegen" #: init/completions/gpg.fish:323 -msgid "Set the list of personal compression preferences to the specified string" -msgstr "Setze die Liste der persönlichen Komprimierungseinstellungen gemäß der angegebenen Zeichenkette" +msgid "" +"Set the list of personal compression preferences to the specified string" +msgstr "" +"Die Liste der persönlichen Komprimierungseinstellungen gemäß der " +"angegebenen Zeichenkette festlegen" #: init/completions/gpg.fish:324 msgid "Set the list of default preferences to the specified string" -msgstr "Setze die Liste der Standardeinstellungen gemäß der angegebenen Zeichenkette" +msgstr "" +"Die Liste der Standardeinstellungen gemäß der angegebenen Zeichenkette " +"festlegen" #: init/completions/gprof.fish:1 msgid "Print annotated source" -msgstr "Kommentierte Quelle anzeigen" +msgstr "Kommentierte Quelle ausgeben" #: init/completions/gprof.fish:2 msgid "Do not print explanations" -msgstr "Keine Erklärungen anzeigen" +msgstr "Keine Erklärungen ausgeben" #: init/completions/gprof.fish:3 msgid "Print tally" @@ -4882,11 +5146,11 @@ msgstr "Vollst #: init/completions/gprof.fish:8 msgid "Print flat profile" -msgstr "" +msgstr "Flaches Profil ausgeben" #: init/completions/gprof.fish:9 msgid "No flat profile" -msgstr "" +msgstr "Kein flaches Profil" #: init/completions/gprof.fish:10 msgid "Print call graph" @@ -4918,7 +5182,7 @@ msgstr "Traditioneller Modus" #: init/completions/gprof.fish:17 msgid "Set width of output" -msgstr "Ausgabebreite setzen" +msgstr "Ausgabebreite festlegen" #: init/completions/gprof.fish:18 msgid "Anotate every line" @@ -4926,7 +5190,7 @@ msgstr "Kommentiere jede Zeile" #: init/completions/gprof.fish:19 msgid "Set demangling style" -msgstr "Format für Entfernen der Zusatzinformation setzen" +msgstr "Format für Entfernen der Zusatzinformation festlegen" #: init/completions/gprof.fish:20 msgid "Turn of demangling" @@ -4942,7 +5206,7 @@ msgstr "Ignoriere nicht als Funktionen bekannte Symbole" #: init/completions/gprof.fish:24 msgid "Delete arcs from callgraph" -msgstr "" +msgstr "Bögen aus Aufrufgraph löschen" #: init/completions/gprof.fish:25 msgid "Line by line profiling" @@ -4966,19 +5230,19 @@ msgstr "Unbenutzte Funktionen im pauschalen Profil erw #: init/completions/gprof.fish:30 msgid "Specify debugging options" -msgstr "Debug-Optionen angegeben" +msgstr "Debug-Optionen angeben" #: init/completions/gprof.fish:33 msgid "Profile data format" -msgstr "" +msgstr "Profildatenformat" #: init/completions/gprof.fish:34 msgid "Print summary" -msgstr "Zusammenfassung anzeigen" +msgstr "Zusammenfassung ausgeben" #: init/completions/grep.fish:5 msgid "Print NUM lines of trailing context" -msgstr "NUM folgende Kontext-Zeilen anzeigen" +msgstr "NUM folgende Kontext-Zeilen ausgeben" #: init/completions/grep.fish:6 msgid "Process binary file as text" @@ -4986,15 +5250,15 @@ msgstr "Bin #: init/completions/grep.fish:7 msgid "Print NUM lines of leading context" -msgstr "NUM führende Kontext-Zeilen anzeigen" +msgstr "NUM führende Kontext-Zeilen ausgeben" #: init/completions/grep.fish:8 msgid "Print NUM lines of context" -msgstr "NUM Kontext-Zeilen anzeigen" +msgstr "NUM Kontext-Zeilen ausgeben" #: init/completions/grep.fish:9 msgid "Print byte offset of matches" -msgstr "Byte-Offset von Treffern anzeigen" +msgstr "Byte-Offset von Treffern ausgeben" #: init/completions/grep.fish:10 msgid "Assume data type for binary files" @@ -5002,7 +5266,7 @@ msgstr "Datentyp f #: init/completions/grep.fish:13 msgid "Only print number of matches" -msgstr "Nur Anzahl von Treffern anzeigen" +msgstr "Nur Anzahl von Treffern ausgeben" #: init/completions/grep.fish:14 msgid "Action for devices" @@ -5034,11 +5298,11 @@ msgstr "Muster ist ein einfacher regul #: init/completions/grep.fish:21 msgid "Print filename" -msgstr "Dateiname anzeigen" +msgstr "Dateiname ausgeben" #: init/completions/grep.fish:22 msgid "Supress printing filename" -msgstr "Dateinamenanzeige unterdrücken" +msgstr "Dateinamenausgabe unterdrücken" #: init/completions/grep.fish:24 msgid "Skip binary files" @@ -5050,11 +5314,11 @@ msgstr "Gross-/Kleinschreibung ignorieren" #: init/completions/grep.fish:26 msgid "Print first non-matching file" -msgstr "Erste nicht zutreffende Datei anzeigen" +msgstr "Erste nicht zutreffende Datei ausgeben" #: init/completions/grep.fish:27 msgid "Print first matching file" -msgstr "Erste zutreffende Datei anzeigen" +msgstr "Erste zutreffende Datei ausgeben" #: init/completions/grep.fish:28 msgid "Stop reading after NUM matches" @@ -5066,11 +5330,11 @@ msgstr "mmap-Systemaufruf zum Lesen der Eingabe nutzen" #: init/completions/grep.fish:30 msgid "Print linenumber" -msgstr "Zeilennummer anzeigen" +msgstr "Zeilennummer ausgeben" #: init/completions/grep.fish:31 msgid "Show only matching part" -msgstr "Nur zutreffenden Teil zeigen" +msgstr "Nur zutreffenden Teil anzeigen" #: init/completions/grep.fish:32 msgid "Rename stdin" @@ -5130,7 +5394,7 @@ msgstr "Ein Null-Byte nach dem Dateinamen ausgeben" #: init/completions/gunzip.fish:9 init/completions/gzip.fish:11 msgid "List compression information" -msgstr "Komprimierungsinformation anzeigen" +msgstr "Komprimierungsinformation auflisten" #: init/completions/gunzip.fish:11 init/completions/gzip.fish:13 msgid "Do not save/restore filename" @@ -5154,7 +5418,7 @@ msgstr "Suffix" #: init/completions/gunzip.fish:17 init/completions/gzip.fish:19 msgid "Display compression ratios" -msgstr "Komprimierungsverhältnis anzeigen" +msgstr "Kompressionsrate anzeigen" #: init/completions/gzip.fish:21 msgid "Use fast setting" @@ -5190,7 +5454,7 @@ msgstr "Zusammenfassung der Unterschiede zwischen fish und anderen shells" #: init/completions/help.fish:21 msgid "Help on how to set the prompt" -msgstr "Hilfe zum Setzen des Prompts" +msgstr "Hilfe zum Festlegen des Prompts" #: init/completions/help.fish:22 msgid "Help on how to set the titlebar message" @@ -5247,23 +5511,23 @@ msgstr "Hilfe zur Prozess-Expansion %JOB" #: init/completions/id.fish:1 msgid "Print effective group id" -msgstr "Effektive Gruppen-ID anzeigen" +msgstr "Effektive Gruppenkennung ausgeben" #: init/completions/id.fish:2 msgid "Print all group ids" -msgstr "Alle Gruppen-IDs anzeigen" +msgstr "Alle Gruppenkennungen ausgeben" #: init/completions/id.fish:3 msgid "Print name, not number" -msgstr "Name, nicht Nummer, anzeigen" +msgstr "Name statt Nummer ausgeben" #: init/completions/id.fish:4 msgid "Print real ID, not effective" -msgstr "Reale, nicht effektive ID anzeigen" +msgstr "Reale, nicht effektive Kennung ausgeben" #: init/completions/id.fish:5 msgid "Print effective user ID" -msgstr "Effektive Anwender-ID anzeigen" +msgstr "Effektive Benutzerkennung ausgeben" #: init/completions/ifconfig.fish:1 msgid "Stop interface" @@ -5279,23 +5543,23 @@ msgstr "Netzwerkschnittstelle" #: init/completions/jobs.fish:3 msgid "Show the process id of each process in the job" -msgstr "Prozess-ID jeden Prozesses im Job zeigen" +msgstr "Prozesskennung jedes Prozesses im Job anzeigen" #: init/completions/jobs.fish:4 msgid "Show group id of job" -msgstr "Gruppen-ID des Jobs zeigen" +msgstr "Gruppenkennung des Jobs anzeigen" #: init/completions/jobs.fish:5 msgid "Show commandname of each job" -msgstr "Befehlsnamen eines jeden Jobs zeigen" +msgstr "Befehlsnamen eines jeden Jobs anzeigen" #: init/completions/jobs.fish:6 msgid "Only show status for last job to be started" -msgstr "Nur Status für zuletzt gestarteten Job zeigen" +msgstr "Nur Status für zuletzt gestarteten Job anzeigen" #: init/completions/kill.fish:34 msgid "List names of available signals" -msgstr "Namen der verfügbaren Signale anzeigen" +msgstr "Namen der verfügbaren Signale auflisten" #: init/completions/less.fish:2 msgid "Search after end of screen" @@ -5416,7 +5680,7 @@ msgstr "Steuerzeichen anzeigen" #: init/completions/less.fish:34 msgid "Display control chars, guess screen appearance" -msgstr "Steuerzeichen anzeigen, Anzeige erraten" +msgstr "Steuerzeichen anzeigen, Bildschirmdarstellung erraten" #: init/completions/less.fish:35 msgid "Multiple blank lines sqeezed" @@ -5432,7 +5696,7 @@ msgstr "Kennzeichnung bearbeiten" #: init/completions/less.fish:38 msgid "Set tag file" -msgstr "Kennzeichnungsdatei setzen" +msgstr "Kennzeichnungsdatei festlegen" #: init/completions/less.fish:39 msgid "Allow backspace and carriage return" @@ -5452,7 +5716,7 @@ msgstr "Erste ungelesene Zeile bei Verschiebung hervorheben" #: init/completions/less.fish:44 msgid "Set tab stops" -msgstr "Tab-Stopps setzen" +msgstr "Tab-Stopps festlegen" #: init/completions/less.fish:45 msgid "No termcap init" @@ -5472,7 +5736,7 @@ msgstr "Maximale Fenstergr #: init/completions/less.fish:49 msgid "Set quote char" -msgstr "Markierungszeichen setzen" +msgstr "Markierungszeichen festlegen" #: init/completions/less.fish:50 msgid "Lines after EOF are blank" @@ -5501,7 +5765,7 @@ msgstr "Symbolischen Links folgen" #: init/completions/ls.fish:19 msgid "List subdirectory recursively" -msgstr "Unterverzeichnisse rekursiv anzeigen" +msgstr "Unterverzeichnisse rekursiv auflisten" #: init/completions/ls.fish:20 init/completions/ls.fish:95 msgid "Octal escapes for non graphic characters" @@ -5509,11 +5773,11 @@ msgstr "Oktaldarstellung f #: init/completions/ls.fish:21 msgid "List directories, not their content" -msgstr "Verzeichnisse, aber nicht deren Inhalt anzeigen" +msgstr "Verzeichnisse, aber nicht deren Inhalt auflisten" #: init/completions/ls.fish:23 msgid "Print inode number of files" -msgstr "Inode-Nummer der Dateien anzeigen" +msgstr "Inode-Nummer der Dateien ausgeben" #: init/completions/ls.fish:24 msgid "Long format, numeric IDs" @@ -5521,7 +5785,7 @@ msgstr "Langformat, numerische IDs" #: init/completions/ls.fish:26 msgid "Replace non-graphic characters with '?'" -msgstr "nicht darstellbare Zeichen durch '?' ersetzen" +msgstr "Nicht darstellbare Zeichen durch '?' ersetzen" #: init/completions/ls.fish:27 msgid "Reverse sort order" @@ -5529,11 +5793,11 @@ msgstr "Sortierreihenfolge umkehren" #: init/completions/ls.fish:28 msgid "Print size of files" -msgstr "Größe der Dateien anzeigen" +msgstr "Größe der Dateien ausgeben" #: init/completions/ls.fish:30 msgid "List by columns" -msgstr "Nach Spalten anzeigen" +msgstr "Nach Spalten auflisten" #: init/completions/ls.fish:31 msgid "Sort by size" @@ -5553,7 +5817,7 @@ msgstr "Langformat ohne Eigent #: init/completions/ls.fish:35 msgid "Set blocksize to 1kB" -msgstr "Blockgrösse auf 1kB setzen" +msgstr "Blockgröße auf 1kB festlegen" #: init/completions/ls.fish:36 init/completions/ps.fish:25 msgid "Long format" @@ -5569,15 +5833,15 @@ msgstr "Nach Ver #: init/completions/ls.fish:39 msgid "Show access time" -msgstr "Zugriffszeit zeigen" +msgstr "Zugriffszeit anzeigen" #: init/completions/ls.fish:40 msgid "List entries by lines" -msgstr "" +msgstr "Einträge auflisten" #: init/completions/ls.fish:41 msgid "List one file per line" -msgstr "Eine Datei pro Zeile anzeigen" +msgstr "Eine Datei pro Zeile auflisten" #: init/completions/ls.fish:47 msgid "Print author" @@ -5585,7 +5849,7 @@ msgstr "Autor ausgeben" #: init/completions/ls.fish:48 msgid "Set block size" -msgstr "Blockgrösse setzen" +msgstr "Blockgröße festlegen" #: init/completions/ls.fish:49 msgid "Ignore files ending with ~" @@ -5609,7 +5873,7 @@ msgstr "Langformat, volle ISO-Zeit" #: init/completions/ls.fish:54 msgid "Don't print group information" -msgstr "Keine Gruppen-Information ausgeben" +msgstr "Keine Gruppeninformation ausgeben" #: init/completions/ls.fish:58 msgid "Skip entries matching pattern" @@ -5617,7 +5881,7 @@ msgstr "Dem Muster entsprechende Eintr #: init/completions/ls.fish:59 init/completions/ls.fish:103 msgid "Print raw entry names" -msgstr "" +msgstr "Roheinträge ausgeben" #: init/completions/ls.fish:60 msgid "Long format without groups" @@ -5633,7 +5897,7 @@ msgstr "Eintrag in Markierungen einschliessen" #: init/completions/ls.fish:63 msgid "Select quoting style" -msgstr "Markierungsstil wählen" +msgstr "Markierungsstil auswählen" #: init/completions/ls.fish:64 msgid "Sort criteria" @@ -5641,11 +5905,11 @@ msgstr "Sortier-Kriterien" #: init/completions/ls.fish:75 msgid "Show time type" -msgstr "Zeittyp zeigen" +msgstr "Zeittyp anzeigen" #: init/completions/ls.fish:82 msgid "Select time style" -msgstr "Zeitformat wählen" +msgstr "Zeitformat auswählen" #: init/completions/ls.fish:83 msgid "Assume tab stops at each COLS" @@ -5669,7 +5933,7 @@ msgstr "Sortierung nach Erweiterung" #: init/completions/ls.fish:97 msgid "Prevent -A from being automatically set for root" -msgstr "Für root nicht automatisch -A setzen" +msgstr "Für root nicht automatisch -A festlegen" #: init/completions/ls.fish:98 msgid "Don't follow symlinks" @@ -5681,11 +5945,11 @@ msgstr " #: init/completions/ls.fish:100 msgid "Show whiteouts when scanning directories" -msgstr "" +msgstr "Überblendungen beim Scannen von Verzeichnissen anzeigen" #: init/completions/ls.fish:101 msgid "Display each file's MAC label" -msgstr "MAC-Markierung jeder Datei zeigen" +msgstr "MAC-Markierung jeder Datei anzeigen" #: init/completions/ls.fish:102 msgid "Include the file flags in a long (-l) output" @@ -5801,11 +6065,11 @@ msgstr "Dateien #: init/completions/make.fish:27 msgid "Print working directory" -msgstr "Arbeitsverzeichnis anzeigen" +msgstr "Arbeitsverzeichnis ausgeben" #: init/completions/make.fish:28 msgid "Pretend file is modified" -msgstr "" +msgstr "Vorgegebene Datei wurde geändert" #: init/completions/man.fish:32 msgid "Program section" @@ -5878,7 +6142,7 @@ msgstr "Handbuch-Sektionen" #: init/completions/man.fish:50 msgid "Display all matches" -msgstr "Alle Übereinstimmungen zeigen" +msgstr "Alle Übereinstimmungen anzeigen" #: init/completions/man.fish:51 msgid "Always reformat" @@ -5894,15 +6158,15 @@ msgstr "Debug und Ausf #: init/completions/man.fish:54 msgid "Show whatis information" -msgstr "whatis-Information zeigen" +msgstr "whatis-Information anzeigen" #: init/completions/man.fish:55 msgid "Format only" -msgstr "" +msgstr "Nur Format" #: init/completions/man.fish:57 msgid "Show apropos information" -msgstr "apropos-Information zeigen" +msgstr "apropos-Information anzeigen" #: init/completions/man.fish:58 msgid "Search in all man pages" @@ -5910,7 +6174,7 @@ msgstr "In allen Handbuchseiten suchen" #: init/completions/man.fish:59 msgid "Set system" -msgstr "System setzen" +msgstr "System festlegen" #: init/completions/man.fish:60 msgid "Preprocessors" @@ -5922,11 +6186,12 @@ msgstr "Druckformat" #: init/completions/man.fish:62 init/completions/man.fish:63 msgid "Only print locations" -msgstr "Nur Lokationen anzeigen" +msgstr "Nur Lokationen ausgeben" #: init/completions/mimedb.fish:1 msgid "Input is a file, use name and contents to determine mimetype" -msgstr "Eingabe ist eine Datei, Namen und Inhalt zur mime-Typbestimmung benutzen" +msgstr "" +"Eingabe ist eine Datei, Namen und Inhalt zur mime-Typbestimmung benutzen" #: init/completions/mimedb.fish:2 msgid "Input is a file, use name to determine mimetype" @@ -5982,7 +6247,7 @@ msgstr "S #: init/completions/modprobe.fish:16 msgid "Ignore version magic information" -msgstr "" +msgstr "Magische Versionsinformation ignorieren" #: init/completions/modprobe.fish:17 msgid "Ignore module interface version" @@ -5990,7 +6255,7 @@ msgstr "Modulschnittstellenversion ignorieren" #: init/completions/modprobe.fish:18 msgid "List all modules matching the given wildcard" -msgstr "Alle Module anzeigen, die den angegebenen Mustern entsprechen" +msgstr "Alle Module auflisten, die den angegebenen Mustern entsprechen" #: init/completions/modprobe.fish:19 msgid "Insert modules matching the given wildcard" @@ -6006,7 +6271,7 @@ msgstr "Fehlermeldungen per syslog senden" #: init/completions/modprobe.fish:22 msgid "Specify kernel version" -msgstr "Kernelversion angeben" +msgstr "Kernel-Version angeben" #: init/completions/modprobe.fish:23 msgid "List dependencies of module" @@ -6066,7 +6331,7 @@ msgstr "Dateisysteme ausschliessen" #: init/completions/mount.fish:60 msgid "Remount a subtree to a second position" -msgstr "" +msgstr "Teilbaum an einer zweiten Position erneut einhängen" #: init/completions/mount.fish:61 msgid "Move a subtree to a new position" @@ -6082,11 +6347,11 @@ msgstr "Einh #: init/completions/mplayer.fish:27 msgid "Dynamically change postprocessing" -msgstr "" +msgstr "Nachverarbeitung dynamisch ändern" #: init/completions/mplayer.fish:28 msgid "A/V sync speed" -msgstr "" +msgstr "A/V Sync-Geschwindigkeit" #: init/completions/mplayer.fish:29 init/completions/mplayer.fish:31 msgid "Skip frames to maintain A/V sync" @@ -6118,23 +6383,23 @@ msgstr "Audio aus Datei spielen" #: init/completions/mplayer.fish:40 msgid "Set default CD-ROM drive" -msgstr "Standard-CD-ROM-Gerät setzen" +msgstr "Standard-CD-ROM-Gerät festlegen" #: init/completions/mplayer.fish:41 msgid "Set number of audio channels" -msgstr "Anzahl der Audio-Kanäle setzen" +msgstr "Anzahl der Audiokanäle festlegen" #: init/completions/mplayer.fish:42 msgid "Set start chapter" -msgstr "Startkapitel setzen" +msgstr "Startkapitel festlegen" #: init/completions/mplayer.fish:43 msgid "Set default DVD-ROM drive" -msgstr "Standard DVD-ROM-Gerät setzen" +msgstr "Standard DVD-ROM-Gerät festlegen" #: init/completions/mplayer.fish:44 msgid "Set dvd viewing angle" -msgstr "DVD-Betrachtungswinkel setzen" +msgstr "DVD-Betrachtungswinkel festlegen" #: init/completions/mplayer.fish:45 msgid "Force rebuilding index" @@ -6154,7 +6419,7 @@ msgstr "Index aus Datei laden" #: init/completions/mplayer.fish:49 msgid "Force non-interleaved AVI parser" -msgstr "" +msgstr "Nicht verschachtelten AVI-Parser" #: init/completions/mplayer.fish:50 msgid "Rebuild index and save to file" @@ -6162,7 +6427,7 @@ msgstr "Index neu erstellen und in Datei speichern" #: init/completions/mplayer.fish:51 msgid "Seek to give time position" -msgstr "" +msgstr "Zeitposition suchen" #: init/completions/mplayer.fish:52 msgid "TV capture mode" @@ -6222,7 +6487,7 @@ msgstr "Neuere Dateien nicht #: init/completions/nextd.fish:1 init/completions/prevd.fish:1 msgid "Also print directory history" -msgstr "Auch Verzeichnis-Verlauf anzeigen" +msgstr "Auch Verzeichnisverlauf ausgeben" #: init/completions/nice.fish:2 msgid "Increment priority by specified number first" @@ -6230,7 +6495,7 @@ msgstr "Priorit #: init/completions/perl.fish:1 init/completions/ruby.fish:2 msgid "Specify record separator" -msgstr "Satztrenner definieren" +msgstr "Satztrenner angeben" #: init/completions/perl.fish:2 init/completions/ruby.fish:3 msgid "Turn on autosplit mode" @@ -6254,7 +6519,7 @@ msgstr "Befehl ausf #: init/completions/perl.fish:7 init/completions/ruby.fish:9 msgid "Set regexp used to split input" -msgstr "Zur Eingabetrennung benutzten regulären Ausdruck setzen" +msgstr "Zur Eingabetrennung benutzten regulären Ausdruck festlegen" #: init/completions/perl.fish:8 init/completions/ruby.fish:10 msgid "Edit files in-place" @@ -6292,7 +6557,7 @@ msgstr "$PATH nach Skript durchsuchen" #: init/completions/perl.fish:16 init/completions/ruby.fish:18 msgid "Taint checking" -msgstr "" +msgstr "Taintprüfung" #: init/completions/perl.fish:17 msgid "Unsafe mode" @@ -6324,7 +6589,7 @@ msgstr "Funktionstasten f #: init/completions/pine.fish:7 msgid "Expand collections in FOLDER LIST display" -msgstr "" +msgstr "Sammlungen bei der Anzeige der VERZEICHNISLISTE erweitern" #: init/completions/pine.fish:8 msgid "Start with specified current message number" @@ -6336,11 +6601,11 @@ msgstr "Ordner nur zum Lesen #: init/completions/pine.fish:10 msgid "Set configuration file" -msgstr "Konfigurationsdatei setzen" +msgstr "Konfigurationsdatei festlegen" #: init/completions/pine.fish:11 msgid "Set global configuration file" -msgstr "Globale Konfigurationsdatei setzen" +msgstr "Globale Konfigurationsdatei festlegen" #: init/completions/pine.fish:12 msgid "Restricted mode" @@ -6360,7 +6625,7 @@ msgstr "Beispiel-Konfigurationsdatei erstellen" #: init/completions/pine.fish:16 msgid "Set mail sort order" -msgstr "Mail-Sortierordnung setzen" +msgstr "Mail-Sortierordnung festlegen" #: init/completions/pine.fish:26 msgid "Config option" @@ -6388,11 +6653,11 @@ msgstr "Stoppe nach der angegebenen Anzahl von ECHO_REQUEST-Paketen" #: init/completions/ping.fish:7 msgid "Set the SO_DEBUG option on the socket being used" -msgstr "Setze die Option SO_DEBUG für den benutzten Socket" +msgstr "Die Option SO_DEBUG für den benutzten Socket festlegen" #: init/completions/ping.fish:8 msgid "Allocate and set 20 bit flow label on ECHO_REQUEST packets" -msgstr "20-Bit-Fluss-Markierung für ECHO_REQUEST-Pakete zuweisen und setzen" +msgstr "20-Bit-Fluss-Markierung für ECHO_REQUEST-Pakete zuweisen und festlegen" #: init/completions/ping.fish:9 msgid "Flood ping" @@ -6404,7 +6669,7 @@ msgstr "Warte angegebenes Sekundenintervall zwischen dem Senden der Pakete" #: init/completions/ping.fish:11 msgid "Set source address to specified interface address" -msgstr "Setze Quell-Adresse auf angegebene Schnittstellen-Adresse" +msgstr "Quelladresse auf angegebene Schnittstellenadresse festlegen" #: init/completions/ping.fish:12 msgid "Send the specified number of packets without waiting for reply" @@ -6424,15 +6689,19 @@ msgstr "Packet mit leeren Bytes auff #: init/completions/ping.fish:16 msgid "Set Quality of Service -related bits in ICMP datagrams" -msgstr "Setze auf 'Quality of Service'-bezogene Bits in ICMP-Datagrammen" +msgstr "Auf 'Quality of Service'-bezogene Bits in ICMP-Datagrammen festlegen" #: init/completions/ping.fish:18 msgid "Record route" msgstr "Route aufzeichnen" #: init/completions/ping.fish:19 -msgid "Bypass the normal routing tables and send directly to a host on an attached interface" -msgstr "Normale Routing-Tabellen umgehen und direkt zu einem Rechner an einer angeschlossenen Schnittstelle senden" +msgid "" +"Bypass the normal routing tables and send directly to a host on an attached " +"interface" +msgstr "" +"Normale Routing-Tabellen umgehen und direkt zu einem Rechner an einer " +"angeschlossenen Schnittstelle senden" #: init/completions/ping.fish:20 msgid "Specifies the number of data bytes to be sent" @@ -6440,15 +6709,15 @@ msgstr "Gibt die Anzahl zu sendender Bytes an" #: init/completions/ping.fish:21 msgid "Set socket buffer size" -msgstr "Setze Größe des Socketpuffers" +msgstr "Socketpuffergröße festlegen" #: init/completions/ping.fish:22 msgid "Set the IP Time to Live" -msgstr "Setze die IP-Lebensdauer (TTL)" +msgstr "IP-Lebensdauer (TTL) festlegen" #: init/completions/ping.fish:23 msgid "Set special IP timestamp options" -msgstr "Setze spezielle IP-Zeitstempeloptionen" +msgstr "Spezielle IP-Zeitstempeloptionen festlegen" #: init/completions/ping.fish:24 msgid "Select Path MTU Discovery strategy" @@ -6456,11 +6725,15 @@ msgstr "W #: init/completions/ping.fish:25 msgid "Print full user-to-user latency" -msgstr "Volle Anwender-zu-Anwender-Latenz anzeigen" +msgstr "Volle Benutzer-zu-Benutzer-Latenz ausgeben" #: init/completions/ping.fish:28 -msgid "Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received" -msgstr "Zeitdauer in Sekunden angegben, nach der ping ohne Rücksicht auf die Anzahl gesendeter/empfangener Pakete abbricht" +msgid "" +"Specify a timeout, in seconds, before ping exits regardless of how many " +"packets have been sent or received" +msgstr "" +"Zeitdauer in Sekunden angeben, nach der ping ohne Rücksicht auf die Anzahl " +"gesendeter/empfangener Pakete abbricht" #: init/completions/ping.fish:29 msgid "Time to wait for a response, in seconds" @@ -6477,10 +6750,11 @@ msgstr "Selektion umkehren" #: init/completions/ps.fish:5 msgid "Select all processes except session leaders and terminal-less" msgstr "" +"Alle Prozesse mit Ausnahme der Sitzungsführer und terminal-less auswählen" #: init/completions/ps.fish:6 msgid "Select all processes except session leaders" -msgstr "" +msgstr "Alle Prozesse mit Ausnahme der Sitzungsführer auswählen" #: init/completions/ps.fish:8 msgid "Deselect all processes that do not fulfill conditions" @@ -6496,7 +6770,7 @@ msgstr "Auswahl per Gruppe" #: init/completions/ps.fish:13 init/completions/ps.fish:14 msgid "Select by user" -msgstr "Auswahl per Anwender" +msgstr "Auswahl per Benutzer" #: init/completions/ps.fish:15 msgid "Select by group/session" @@ -6512,7 +6786,7 @@ msgstr "Auswahl per Eltern-PID" #: init/completions/ps.fish:18 msgid "Select by session ID" -msgstr "Auswahl per Sitzungs-ID" +msgstr "Auswahl per Sitzungskennung" #: init/completions/ps.fish:19 msgid "Select by tty" @@ -6540,7 +6814,7 @@ msgstr "Job-Format" #: init/completions/ps.fish:27 msgid "Do not show flags" -msgstr "Keine Flags zeigen" +msgstr "Keine Flags anzeigen" #: init/completions/ps.fish:29 msgid "Show hierarchy" @@ -6548,7 +6822,7 @@ msgstr "Hierarchie anzeigen" #: init/completions/ps.fish:30 msgid "Set namelist file" -msgstr "namelist-Datei setzen" +msgstr "namelist-Datei festlegen" #: init/completions/ps.fish:31 msgid "Wide output" @@ -6580,11 +6854,11 @@ msgstr "Optimierungen aktivieren" #: init/completions/python.fish:7 msgid "Division control" -msgstr "" +msgstr "Bereichskontrolle" #: init/completions/python.fish:8 msgid "Disable import of site module" -msgstr "" +msgstr "Import des Seitenmoduls deaktivieren" #: init/completions/python.fish:9 msgid "Warn on mixed tabs and spaces" @@ -6604,7 +6878,7 @@ msgstr "Erste Zeile der Eingabe ignorieren" #: init/completions/read.fish:2 msgid "Set prompt command" -msgstr "Prompt-Befehl setzen" +msgstr "Prompt-Befehl festlegen" #: init/completions/read.fish:3 init/completions/set.fish:62 msgid "Export variable to subprocess" @@ -6619,8 +6893,12 @@ msgid "Make variable scope local" msgstr "Geltungsbereich der Variablen lokal machen" #: init/completions/read.fish:6 init/completions/set.fish:66 -msgid "Make variable scope universal, i.e. share variable with all the users fish processes on this computer" -msgstr "Variablengeltungsbereich allgemeingültig machen, d. h. die Variable ist für alle fish-Prozesse des Anwenders auf diesem Computer verfügbar" +msgid "" +"Make variable scope universal, i.e. share variable with all the users fish " +"processes on this computer" +msgstr "" +"Variablengeltungsbereich allgemeingültig machen, d. h. die Variable ist für " +"alle fish-Prozesse des Benutzers auf diesem Computer verfügbar" #: init/completions/read.fish:7 init/completions/set.fish:63 msgid "Do not export variable to subprocess" @@ -6628,11 +6906,15 @@ msgstr "Variable nicht an Unterprozess exportieren" #: init/completions/renice.fish:2 msgid "Force following parameters to be process ID's (The default)" -msgstr "Erzwinge die Interpretation der folgenden Parameter als Prozess-IDs (Standard)" +msgstr "" +"Erzwinge die Interpretation der folgenden Parameter als Prozesskennungen " +"(Standard)" #: init/completions/renice.fish:3 msgid "Force following parameters to be interpreted as process group ID's" -msgstr "Erzwinge die Interpretation der folgenden Parameter als Prozessgruppen-IDs" +msgstr "" +"Erzwinge die Interpretation der folgenden Parameter als " +"Prozessgruppenkennungen" #: init/completions/renice.fish:4 msgid "Force following parameters to be interpreted as user names" @@ -6684,19 +6966,30 @@ msgstr "root-Verzeichnis f #: init/completions/rpm.fish:22 msgid "Add suggested packages to the transaction set when needed" -msgstr "Füge der Transaktionsmenge die vorgeschlagenen Pakete hinzu, falls nötig" +msgstr "" +"Füge der Transaktionsmenge die vorgeschlagenen Pakete hinzu, falls nötig" #: init/completions/rpm.fish:23 -msgid "Installs or upgrades all the files in the package, even if they aren't needed (missingok) and don't exist" -msgstr "Installiert oder aktualisiert alle Dateien im Paket, selbst wenn sie nicht erforderlich sind (missingok) und nicht existieren" +msgid "" +"Installs or upgrades all the files in the package, even if they aren't needed " +"(missingok) and don't exist" +msgstr "" +"Installiert oder aktualisiert alle Dateien im Paket, selbst wenn sie nicht " +"erforderlich sind (missingok) und nicht existieren" #: init/completions/rpm.fish:24 -msgid "Used with --relocate, permit relocations on all file paths, not just those OLD-PATH's included in the binary package relocation hint(s)" +msgid "" +"Used with --relocate, permit relocations on all file paths, not just those " +"OLD-PATH's included in the binary package relocation hint(s)" msgstr "" +"Benutzt mit --relocate, erlaubt es die Relozierung auf sämtliche Dateipfade " +"und nicht nur auf die ALTENPFADE, die in dem/den " +"Binärpaket-Relozierungshinweis(en) enthalten sind" #: init/completions/rpm.fish:25 msgid "Don't install files whose name begins with specified path" -msgstr "Keine Dateien installieren, deren Name mit dem angegebenen Pfad beginnen" +msgstr "" +"Keine Dateien installieren, deren Name mit dem angegebenen Pfad beginnen" #: init/completions/rpm.fish:26 msgid "Don't install any files which are marked as documentation" @@ -6704,23 +6997,32 @@ msgstr "Keine Dateien installieren, die als Dokumentation markiert sind" #: init/completions/rpm.fish:27 msgid "Same as using --replacepkgs, --replacefiles, and --oldpackage" -msgstr "Entspricht der Benutzung von --replacepkgs, --replacefiles und --oldpackage" +msgstr "" +"Entspricht der Benutzung von --replacepkgs, --replacefiles und --oldpackage" #: init/completions/rpm.fish:28 msgid "Print 50 hash marks as the package archive is unpacked" -msgstr "Zeige 50 Hash-Markierungen beim Auspackens des Paketarchivs" +msgstr "Zeige 50 Hash-Markierungen beim Auspacken des Paketarchivs" #: init/completions/rpm.fish:29 msgid "Don't check for sufficient disk space before installation" msgstr "Vor der Installation nicht auf ausreichenden Plattenplatz prüfen" #: init/completions/rpm.fish:30 -msgid "Allow installation or upgrading even if the architectures of the binary package and host don't match" -msgstr "Installation und Aktualisierung auch dann ermöglichen, wenn die Architekturen des Binärpaketes und des Rechners nicht übereinstimmen" +msgid "" +"Allow installation or upgrading even if the architectures of the binary " +"package and host don't match" +msgstr "" +"Installation und Aktualisierung auch dann ermöglichen, wenn die Architekturen " +"des Binärpaketes und des Rechners nicht übereinstimmen" #: init/completions/rpm.fish:31 -msgid "Allow installation or upgrading even if the operating systems of the binary package and host don't match" -msgstr "Installation und Aktualisierung auch dann ermöglichen, wenn die Betriebssysteme des Binärpaketes und des Rechners nicht übereinstimmen" +msgid "" +"Allow installation or upgrading even if the operating systems of the binary " +"package and host don't match" +msgstr "" +"Installation und Aktualisierung auch dann ermöglichen, wenn die " +"Betriebssysteme des Binärpaketes und des Rechners nicht übereinstimmen" #: init/completions/rpm.fish:32 msgid "Install documentation files (default)" @@ -6732,11 +7034,11 @@ msgstr "Nur die Datenbank, nicht das Dateisystem aktualisieren" #: init/completions/rpm.fish:34 init/completions/rpm.fish:94 msgid "Don't verify package or header digests when reading" -msgstr "Beim Lesen keine Paket- oder Header-Prüfsummen überprüfen" +msgstr "Beim Lesen keine Paket- oder Kopfzeilen-Prüfsummen überprüfen" #: init/completions/rpm.fish:35 init/completions/rpm.fish:97 msgid "Don't verify package or header signatures when reading" -msgstr "Beim Lesen keine Paket- oder Header-Signaturen überprüfen" +msgstr "Beim Lesen keine Paket- oder Kopfzeilen-Signaturen überprüfen" #: init/completions/rpm.fish:36 msgid "Don't do a dependency check" @@ -6788,35 +7090,59 @@ msgstr "Triggerpostun-Skripte nicht ausf #: init/completions/rpm.fish:48 msgid "Allow an upgrade to replace a newer package with an older one" -msgstr "Erlaube einer Aktualisierung das Ersetzen eines neueren Paketes durch ein älteres" +msgstr "" +"Erlaube einer Aktualisierung das Ersetzen eines neueren Paketes durch ein " +"älteres" #: init/completions/rpm.fish:49 -msgid "Print percentages as files are unpacked from the package archive. This is intended to make rpm easy to run from other tools" -msgstr "Prozentwert anzeigen, während Dateien aus dem Paketarchiv ausgepackt werden. Dies soll das Ausführen von rpm aus anderen Programmen heraus erleichtern" +msgid "" +"Print percentages as files are unpacked from the package archive. This is " +"intended to make rpm easy to run from other tools" +msgstr "" +"Prozentwert ausgeben, während Dateien aus dem Paketarchiv ausgepackt werden. " +"Dies soll das Ausführen von rpm aus anderen Programmen heraus erleichtern" #: init/completions/rpm.fish:50 -msgid "For relocatable binary packages, translate all file paths that start with the installation prefix in the package relocation hint(s) to NEWPATH" +msgid "" +"For relocatable binary packages, translate all file paths that start with the " +"installation prefix in the package relocation hint(s) to NEWPATH" msgstr "" +"Für relozierbare Binärpakete alle Dateipfade, die mit dem Installationspräfix " +"im/in den Paket-Relozierungshinweis(en) beginnen, auf den NEUENPFAD " +"konvertieren" #: init/completions/rpm.fish:51 -msgid "Translate all paths that start with first half of following parameter to second half of following parameter" -msgstr "Übersetze alle Pfade, die mit der ersten Hälfte des folgenden Parameters beginnen, mit der zweiten Hälfte des folgenden Parameters" +msgid "" +"Translate all paths that start with first half of following parameter to " +"second half of following parameter" +msgstr "" +"Übersetze alle Pfade, die mit der ersten Hälfte des folgenden Parameters " +"beginnen, mit der zweiten Hälfte des folgenden Parameters" #: init/completions/rpm.fish:52 init/completions/rpm.fish:118 msgid "Re-package the files before erasing" msgstr "Dateien vor dem Löschen umpacken" #: init/completions/rpm.fish:53 -msgid "Install the packages even if they replace files from other, already installed, packages" -msgstr "Installiere diese Pakete, selbst wenn sie Dateien aus anderen, bereits installierten Paketen ersetzen" +msgid "" +"Install the packages even if they replace files from other, already " +"installed, packages" +msgstr "" +"Installiere diese Pakete, selbst wenn sie Dateien aus anderen, bereits " +"installierten Paketen ersetzen" #: init/completions/rpm.fish:54 -msgid "Install the packages even if some of them are already installed on this system" -msgstr "Installiere diese Pakete, selbst wenn einige von ihnen auf diesem System bereits installiert sind" +msgid "" +"Install the packages even if some of them are already installed on this system" +msgstr "" +"Installiere diese Pakete, selbst wenn einige von ihnen auf diesem System " +"bereits installiert sind" #: init/completions/rpm.fish:55 -msgid "Don't install the package, simply check for and report potential conflicts" -msgstr "Paket nicht installieren, nur auf mögliche Konflikte testen und diese anzeigen" +msgid "" +"Don't install the package, simply check for and report potential conflicts" +msgstr "" +"Paket nicht installieren, nur auf mögliche Konflikte testen und diese anzeigen" #: init/completions/rpm.fish:59 msgid "Display change information for the package" @@ -6828,19 +7154,24 @@ msgstr "Zeigt nur Konfigurationsdateien (impliziert -l)" #: init/completions/rpm.fish:61 msgid "List only documentation files (implies -l)" -msgstr "Nur Dokumentationsdateien anzeigen (impliziert -l)" +msgstr "Nur Dokumentationsdateien auflisten (impliziert -l)" #: init/completions/rpm.fish:62 msgid "Dump file information. Must be used with at least one of -l, -c, -d" -msgstr "Gibt Dateiinformationen aus. Muss mit einem von -l, -c, -d benutzt werden" +msgstr "" +"Gibt Dateiinformationen aus. Muss mit einem von -l, -c, -d benutzt werden" #: init/completions/rpm.fish:63 msgid "List all the files in each selected package" msgstr "Zeigt alle Dateien in jedem gewählten Paket an" #: init/completions/rpm.fish:64 -msgid "Display package information, including name, version, and description. Uses --queryformat if specified" -msgstr "Zeit Paketinformation einschließlich Name, Version und Beschreibung. Benutzt --queryformat falls angegeben" +msgid "" +"Display package information, including name, version, and description. Uses " +"--queryformat if specified" +msgstr "" +"Zeit Paketinformation einschließlich Name, Version und Beschreibung. Benutzt " +"--queryformat falls angegeben" #: init/completions/rpm.fish:65 msgid "Orders the package listing by install time" @@ -6848,23 +7179,27 @@ msgstr "Ordnet die angezeigten Paketen entsprechend der Installationszeit" #: init/completions/rpm.fish:66 msgid "List files in package" -msgstr "Dateien im Paket anzeigen" +msgstr "Dateien im Paket auflisten" #: init/completions/rpm.fish:67 msgid "List capabilities this package provides" -msgstr "Eigenschaften anzeigen, die dieses Paket bereitstellt" +msgstr "Eigenschaften auflisten, die dieses Paket bereitstellt" #: init/completions/rpm.fish:68 msgid "List packages on which this package depends" -msgstr "Pakete anzeigen, von denen dieses Paket abhängt" +msgstr "Pakete auflisten, von denen dieses Paket abhängt" #: init/completions/rpm.fish:69 msgid "List the package specific scriptlets" -msgstr "Die Paket-spezifischen Skripte anzeigen" +msgstr "Die Paket-spezifischen Skripte auflisten" #: init/completions/rpm.fish:70 -msgid "Display the states of files in the package. The state of each file is one of normal, not installed, or replaced" -msgstr "Zeigt den Status der Dateien im Paket. Status einer jeden Datei ist entweder normal, nicht installiert oder ersetzt" +msgid "" +"Display the states of files in the package. The state of each file is one of " +"normal, not installed, or replaced" +msgstr "" +"Zeigt den Status der Dateien im Paket. Status einer jeden Datei ist entweder " +"normal, nicht installiert oder ersetzt" #: init/completions/rpm.fish:71 init/completions/rpm.fish:72 msgid "Display the trigger scripts contained in the package" @@ -6879,24 +7214,37 @@ msgid "Query package owning specified file" msgstr "Paket abfragen, zu dem die angegebene Datei gehört" #: init/completions/rpm.fish:80 -msgid "Query package that contains a given file identifier, i.e. the MD5 digest of the file contents" -msgstr "Frage nach Paketen, die einen gegebenen Datei-Identifikator enthalten, z. B. den MD5-Digest der Dateiinhalte" +msgid "" +"Query package that contains a given file identifier, i.e. the MD5 digest of " +"the file contents" +msgstr "" +"Frage nach Paketen, die einen gegebenen Datei-Identifikator enthalten, z. B. " +"den MD5-Digest der Dateiinhalte" #: init/completions/rpm.fish:81 msgid "Query packages with the specified group" msgstr "Pakete mit der angegebenen Gruppe abfragen" #: init/completions/rpm.fish:82 -msgid "Query package that contains a given header identifier, i.e. the SHA1 digest of the immutable header region" -msgstr "Frage nach Paketen, die einen gegebenen Header-Bezeichner enthalten, z. B. den SHA1-Digest des unveränderlichen Header-Bereichs" +msgid "" +"Query package that contains a given header identifier, i.e. the SHA1 digest " +"of the immutable header region" +msgstr "" +"Frage nach Paketen, die einen gegebenen Kopfzeilen-Bezeichner enthalten, z. " +"B. " +"den SHA1-Digest des unveränderlichen Kopfzeilenbereichs" #: init/completions/rpm.fish:83 msgid "Query an (uninstalled) package in specified file" msgstr "Ein (deinstalliertes) Paket in der angegebenen Datei abfragen" #: init/completions/rpm.fish:84 -msgid "Query package that contains a given package identifier, i.e. the MD5 digest of the combined header and payload contents" -msgstr "Paket abfragen, das einen gegebenen Paket-Bezeichner enthält, z. B. die MD5-Prüfsumme des kombinierten Headers und des Nutzdateninhaltes" +msgid "" +"Query package that contains a given package identifier, i.e. the MD5 digest " +"of the combined header and payload contents" +msgstr "" +"Paket abfragen, das einen gegebenen Paket-Bezeichner enthält, z. B. die " +"MD5-Prüfsumme der kombinierten Kopfzeile und des Nutzdateninhaltes" #: init/completions/rpm.fish:85 msgid "Parse and query specified spec-file as if it were a package" @@ -6904,7 +7252,8 @@ msgstr "Angegebene spec-Datei auswerten, als ob es ein Paket w #: init/completions/rpm.fish:86 msgid "Query package(s) that have the specified TID (transaction identifier)" -msgstr "Paket(e) abfragen, die den angegebenen TID (Transaktions-Bezeichner) besitzen" +msgstr "" +"Paket(e) abfragen, die den angegebenen TID (Transaktions-Bezeichner) besitzen" #: init/completions/rpm.fish:87 msgid "Query packages that are triggered by the specified packages" @@ -6915,8 +7264,11 @@ msgid "Query all packages that provide the specified capability" msgstr "Alle Pakete abfragen, die die angegebene Eigenschaft bereitstellen" #: init/completions/rpm.fish:89 -msgid "Query all packages that requires the specified capability for functioning" -msgstr "Alle Pakete abfragen, die die angegebene Eigenschaft für die Funktionsfähigkeit erfordern" +msgid "" +"Query all packages that requires the specified capability for functioning" +msgstr "" +"Alle Pakete abfragen, die die angegebene Eigenschaft für die " +"Funktionsfähigkeit erfordern" #: init/completions/rpm.fish:93 msgid "Don't verify dependencies of packages" @@ -6944,7 +7296,7 @@ msgstr "Gr #: init/completions/rpm.fish:101 msgid "Don't verify user attribute" -msgstr "Anwender-Attribute nicht prüfen" +msgstr "Benutzerattribute nicht überprüfen" #: init/completions/rpm.fish:102 msgid "Don't verify group attribute" @@ -7020,7 +7372,7 @@ msgstr "Datei erfordern" #: init/completions/ruby.fish:20 msgid "Verbose mode without message" -msgstr "Wortreicher Modus ohne Nachricht" +msgstr "Ausführlicher Modus ohne Nachricht" #: init/completions/ruby.fish:24 msgid "Compiler debug mode" @@ -7035,7 +7387,8 @@ msgid "Port" msgstr "Port" #: init/completions/scp.fish:31 -msgid "Preserves modification times, access times, and modes from the original file" +msgid "" +"Preserves modification times, access times, and modes from the original file" msgstr "Erhält Modifizierungs- und Zugriffszeit und Modi der Originaldatei" #: init/completions/scp.fish:33 @@ -7048,7 +7401,7 @@ msgstr "Verschl #: init/completions/screen.fish:1 msgid "Print a list of running screen sessions" -msgstr "Liste laufender screen-Sitzungen anzeigen" +msgstr "Liste laufender screen-Sitzungen ausgeben" #: init/completions/sed.fish:13 msgid "Evaluate expression" @@ -7083,8 +7436,12 @@ msgid "Use minimal IO buffers" msgstr "Minimale IO-Puffer benutzen" #: init/completions/sed.fish:35 -msgid "Delay opening files until a command containing the related 'w' function is applied" -msgstr "Verzögere die Dateiöffnung, bis ein Befehl angewandt wird, der die entsprechende 'w'-Funktion enthält" +msgid "" +"Delay opening files until a command containing the related 'w' function is " +"applied" +msgstr "" +"Verzögere die Dateiöffnung, bis ein Befehl angewandt wird, der die " +"entsprechende 'w'-Funktion enthält" #: init/completions/service.fish:3 msgid "Service name" @@ -7164,7 +7521,7 @@ msgstr "Sort stabilisieren" #: init/completions/sort.fish:14 msgid "Set memory buffer size" -msgstr "Speicherpuffer-Grösse setzen" +msgstr "Speicherpuffergröße festlegen" #: init/completions/sort.fish:15 msgid "Field separator" @@ -7172,7 +7529,7 @@ msgstr "Feldtrenner" #: init/completions/sort.fish:16 msgid "Set temporary directory" -msgstr "Temporäres Verzeichnis setzen" +msgstr "Temporäres Verzeichnis festlegen" #: init/completions/sort.fish:17 msgid "Output only first of equal lines" @@ -7236,7 +7593,8 @@ msgstr "In Hintergrund verzweigen" #: init/completions/ssh.fish:90 msgid "Allow remote host to connect to local forwarded ports" -msgstr "Entfernten Rechnern Verbindung zu lokal weitergeleiteten Ports erlauben" +msgstr "" +"Entfernten Rechnern Verbindung zu lokal weitergeleiteten Ports erlauben" #: init/completions/ssh.fish:91 msgid "Smartcard device" @@ -7332,7 +7690,7 @@ msgstr "Dateien an Archiv anh #: init/completions/tar.fish:8 msgid "List archive" -msgstr "Archiv anzeigen" +msgstr "Archiv auflisten" #: init/completions/tar.fish:9 msgid "Append new files" @@ -7352,7 +7710,7 @@ msgstr "W #: init/completions/tar.fish:16 msgid "Print directory names" -msgstr "Verzeichnis-Namen anzeigen" +msgstr "Verzeichnisnamen ausgeben" #: init/completions/tar.fish:17 msgid "Archive file" @@ -7468,11 +7826,11 @@ msgstr "-T enth #: init/completions/tar.fish:48 msgid "Print total bytes written" -msgstr "Gesamtzahl geschriebener Bytes anzeigen" +msgstr "Gesamtzahl geschriebener Bytes ausgeben" #: init/completions/tar.fish:50 msgid "Set volume name" -msgstr "Volume-Namen setzen" +msgstr "Volume-Namen festlegen" #: init/completions/tar.fish:52 init/completions/tar.fish:53 msgid "Ask for confirmation" @@ -7596,7 +7954,7 @@ msgstr "Datei ist symbolischer Link" #: init/completions/test.fish:27 msgid "File owned by effective group ID" -msgstr "Datei gehört effektiver Gruppen-ID" +msgstr "Datei gehört effektiver Gruppenkennung" #: init/completions/test.fish:28 msgid "File has sticky bit set" @@ -7604,7 +7962,7 @@ msgstr "Sticky-Bit der Datei ist gesetzt" #: init/completions/test.fish:30 msgid "File owned by effective user ID" -msgstr "Datei gehört effektiver Anwender-ID" +msgstr "Datei gehört zu effektiver Benutzerkennung" #: init/completions/test.fish:31 msgid "File is named pipe" @@ -7660,7 +8018,7 @@ msgstr "tats #: init/completions/top.fish:9 msgid "Monitor user" -msgstr "Anwender beobachten" +msgstr "Benutzer beobachten" #: init/completions/top.fish:10 msgid "Monitor PID" @@ -7688,11 +8046,11 @@ msgstr "Datei nicht erstellen" #: init/completions/touch.fish:4 init/completions/touch.fish:8 msgid "Set date" -msgstr "Datum setzen" +msgstr "Datum festlegen" #: init/completions/touch.fish:5 msgid "Set date forward" -msgstr "Datum in Zukunft setzen" +msgstr "Datum in Zukunft festlegen" #: init/completions/touch.fish:6 msgid "Change modification time" @@ -7700,7 +8058,7 @@ msgstr "Modifikationszeit #: init/completions/touch.fish:7 msgid "Use this files times" -msgstr "" +msgstr "Diese Dateizeiten verwenden" #: init/completions/trap.fish:2 msgid "Display names of all signals" @@ -7712,7 +8070,7 @@ msgstr "Alle derzeit definierten Trap-Handler anzeigen" #: init/completions/type.fish:3 msgid "Print all possible definitions of the specified name" -msgstr "Alle möglichen Definitionen des angegebenen Namens anzeigen" +msgstr "Alle möglichen Definitionen des angegebenen Namens ausgeben" #: init/completions/type.fish:4 msgid "Supress function and builtin lookup" @@ -7720,19 +8078,19 @@ msgstr "Unterdr #: init/completions/type.fish:5 msgid "Print command type" -msgstr "Befehlstyp anzeigen" +msgstr "Befehlstyp ausgeben" #: init/completions/type.fish:6 msgid "Print path to command, or nothing if name is not a command" -msgstr "Pfad zu Befehl anzeigen oder nichts, wenn es kein Befehl ist" +msgstr "Pfad zu Befehl ausgeben oder nichts, wenn es kein Befehl ist" #: init/completions/type.fish:7 msgid "Print path to command" -msgstr "Pfad zu Befehl anzeigen" +msgstr "Pfad zu Befehl ausgeben" #: init/completions/ulimit.fish:2 msgid "Set or get all current limits" -msgstr "Setzen/Anzeigen aller aktuellen Begrenzungen" +msgstr "Festlegen/Anzeigen aller aktuellen Begrenzungen" #: init/completions/ulimit.fish:3 msgid "Maximum size of core files created" @@ -7748,11 +8106,11 @@ msgstr "Maximalgr #: init/completions/ulimit.fish:6 msgid "Maximum size that may be locked into memory" -msgstr "" +msgstr "Maximalgröße, die im Speicher gesperrt werden kann" #: init/completions/ulimit.fish:7 msgid "Maximum resident set size" -msgstr "" +msgstr "Maximale Größe des Programms im Arbeitsspeicher" #: init/completions/ulimit.fish:8 msgid "Maximum number of open file descriptors" @@ -7768,7 +8126,8 @@ msgstr "Maximalanzahl CPU-Zeit in Sekunden" #: init/completions/ulimit.fish:11 msgid "Maximum number of processes available to a single user" -msgstr "Maximale Anzahl an Prozessen, die für einen einzelnen Anwender verfügbar sind" +msgstr "" +"Maximale Anzahl an Prozessen, die für einen einzelnen Benutzer verfügbar sind" #: init/completions/ulimit.fish:12 msgid "Maximum amount of virtual memory available to the shell" @@ -7780,15 +8139,19 @@ msgstr "Aush #: init/completions/umount.fish:19 msgid "In case unmounting fails, try to remount read-only" -msgstr "Wenn das Aushängen fehlschläft, erneutes Einhängen im Nur-Lese-Modus versuchen" +msgstr "" +"Wenn das Aushängen fehlschläft, erneutes Einhängen im Nur-Lese-Modus versuchen" #: init/completions/umount.fish:20 -msgid "In case the unmounted device was a loop device, also free this loop device" -msgstr "Falls das ausgehängte Gerät ein Loop-Gerät war, auch das Loop-Gerät freigeben" +msgid "" +"In case the unmounted device was a loop device, also free this loop device" +msgstr "" +"Falls das ausgehängte Gerät ein Loop-Gerät war, auch das Loop-Gerät freigeben" #: init/completions/umount.fish:21 msgid "Don't call the /sbin/umount. helper even if it exists" -msgstr "/sbin/umount.-Hilfsprogramm nicht aufrufen, auch wenn es existiert" +msgstr "" +"/sbin/umount.-Hilfsprogramm nicht aufrufen, auch wenn es existiert" #: init/completions/umount.fish:22 msgid "Unmount all of the file systems described in /etc/mtab" @@ -7796,59 +8159,68 @@ msgstr "Alle in /etc/mtab definierten Dateisysteme aush #: init/completions/umount.fish:23 msgid "Actions should only be taken on file systems of the specified type" -msgstr "Aktionen sollen nur auf Dateisysteme des angegebenen Typs angewendet werden" +msgstr "" +"Aktionen sollen nur auf Dateisysteme des angegebenen Typs angewendet werden" #: init/completions/umount.fish:24 -msgid "Actions should only be taken on file systems with the specified options in /etc/fstab" -msgstr "Aktionen sollen nur auf Dateisysteme mit den angegebenen Optionen in /etc/fstab angewendet werden" +msgid "" +"Actions should only be taken on file systems with the specified options in " +"/etc/fstab" +msgstr "" +"Aktionen sollen nur auf Dateisysteme mit den angegebenen Optionen in " +"/etc/fstab angewendet werden" #: init/completions/umount.fish:25 msgid "Force unmount (in case of an unreachable NFS system)" msgstr "unmount erzwingen (falls ein NFS-System nicht erreichbar ist)" #: init/completions/umount.fish:26 -msgid "Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy" -msgstr "Das Dateisystem jetzt aus der Dateisystemhierarchie aushängen und alle Referenzen zum Dateisystem bereinigen, sobald es nicht mehr benutzt wird." +msgid "" +"Detach the filesystem from the filesystem hierarchy now, and cleanup all " +"references to the filesystem as soon as it is not busy" +msgstr "" +"Das Dateisystem jetzt aus der Dateisystemhierarchie aushängen und alle " +"Referenzen zum Dateisystem bereinigen, sobald es nicht mehr benutzt wird." #: init/completions/uname.fish:1 msgid "Print all information" -msgstr "Alle Informationen anzeigen" +msgstr "Alle Informationen ausgeben" #: init/completions/uname.fish:2 msgid "Print kernel name" -msgstr "Kernel-Name anzeigen" +msgstr "Kernel-Name ausgeben" #: init/completions/uname.fish:3 msgid "Print network node hostname" -msgstr "Rechnernamen des Netzwerkknotens anzeigen" +msgstr "Rechnernamen des Netzwerkknotens ausgeben" #: init/completions/uname.fish:4 msgid "Print kernel release" -msgstr "Kernel-Release anzeigen" +msgstr "Kernel-Release ausgeben" #: init/completions/uname.fish:5 msgid "Print kernel version" -msgstr "Kernel-Version anzeigen" +msgstr "Kernel-Version ausgeben" #: init/completions/uname.fish:6 msgid "Print machine name" -msgstr "Maschinenname anzeigen" +msgstr "Maschinenname ausgeben" #: init/completions/uname.fish:7 msgid "Print processor" -msgstr "Prozessor anzeigen" +msgstr "Prozessor ausgeben" #: init/completions/uname.fish:8 msgid "Print harware platform" -msgstr "Hardware-Plattform anzeigen" +msgstr "Hardware-Plattform ausgeben" #: init/completions/uname.fish:9 msgid "Print operating system" -msgstr "Betriebssystem anzeigen" +msgstr "Betriebssystem ausgeben" #: init/completions/uniq.fish:1 msgid "Print number of occurences" -msgstr "Anzahl Vorkommen anzeigen" +msgstr "Anzahl der Vorkommen ausgeben" #: init/completions/uniq.fish:2 msgid "Only print duplicates" @@ -7872,7 +8244,7 @@ msgstr "Erste N Zeichen nicht vergleichen" #: init/completions/uniq.fish:11 msgid "Only print unique lines" -msgstr "Nur einmalige Zeilen anzeigen" +msgstr "Nur einmalige Zeilen ausgeben" #: init/completions/uniq.fish:12 msgid "Compare only specified number of characters" @@ -7888,7 +8260,7 @@ msgstr "Hilfe- und Debug-Optionen anzeigen" #: init/completions/valgrind.fish:29 msgid "Valgrind-ise children" -msgstr "" +msgstr "Kinder Valgrind-isieren" #: init/completions/valgrind.fish:30 msgid "Track file descriptors" @@ -7908,7 +8280,7 @@ msgstr "Log auf Socket ausgeben" #: init/completions/valgrind.fish:35 msgid "Callers in stack trace" -msgstr "" +msgstr "Aufrufe in der Stackverfolgung" #: init/completions/valgrind.fish:36 msgid "Stop showing errors if too many" @@ -7924,7 +8296,7 @@ msgstr "Fehler aus Datei unterdr #: init/completions/valgrind.fish:39 msgid "Print suppressions for detected errors" -msgstr "Unterdrückungen für entdeckte Fehler anzeigen" +msgstr "Unterdrückungen für entdeckte Fehler ausgeben" #: init/completions/valgrind.fish:40 msgid "Start debugger on error" @@ -7944,19 +8316,27 @@ msgstr "Test auf Speicher-Lecks" #: init/completions/valgrind.fish:47 init/completions/valgrind.fish:56 msgid "Show reachable leaked memory" -msgstr "" +msgstr "Aufgetretenes Speicherleck anzeigen" #: init/completions/valgrind.fish:48 -msgid "Determines how willing Memcheck is to consider different backtraces to be the same" +msgid "" +"Determines how willing Memcheck is to consider different backtraces to be the " +"same" msgstr "" +"Legt fest, wie bereitwillig Memcheck verschiedene Ablaufverfolgungen als " +"gleich erachtet" #: init/completions/valgrind.fish:49 init/completions/valgrind.fish:58 msgid "Set size of freed memory pool" -msgstr "Setze Grösse des freigegebenen Speicher-Pools" +msgstr "Größe des freigegebenen Speicherpools festlegen" #: init/completions/valgrind.fish:57 -msgid "Determines how willing Addrcheck is to consider different backtraces to be the same" +msgid "" +"Determines how willing Addrcheck is to consider different backtraces to be " +"the same" msgstr "" +"Legt fest, wie bereitwillig Addrcheck verschiedene Ablaufverfolgungen als " +"gleich erachtet" #: init/completions/valgrind.fish:63 msgid "Type of L1 instruction cache" @@ -7980,7 +8360,7 @@ msgstr "Anzahl Bytes als Heap-Mehrverbrauch pro Zuordnung " #: init/completions/valgrind.fish:72 msgid "Profile stack usage" -msgstr "" +msgstr "Profilstackauslastung" #: init/completions/valgrind.fish:73 msgid "Depth of call chain" @@ -7992,31 +8372,31 @@ msgstr "Ausgabeformat f #: init/completions/wc.fish:1 msgid "Print byte counts" -msgstr "Anzahl Bytes anzeigen" +msgstr "Anzahl Bytes ausgeben" #: init/completions/wc.fish:2 msgid "Print character counts" -msgstr "Anzahl Buchstaben anzeigen" +msgstr "Anzahl Buchstaben ausgeben" #: init/completions/wc.fish:3 msgid "Print newline counts" -msgstr "Anzahl Zeilenendezeichen anzeigen" +msgstr "Anzahl Zeilenendzeichen ausgeben" #: init/completions/wc.fish:4 msgid "Print length of longest line" -msgstr "Länge der längsten Zeile anzeigen" +msgstr "Länge der längsten Zeile ausgeben" #: init/completions/wc.fish:5 msgid "Print word counts" -msgstr "Wortzählung anzeigen" +msgstr "Wortzählung ausgeben" #: init/completions/w.fish:1 msgid "Dont print header" -msgstr "Header nicht anzeigen" +msgstr "Kopfzeile nicht ausgeben" #: init/completions/w.fish:2 msgid "Ignore username for time calculations" -msgstr "Anwendername fün Zeitberechungen ignorieren" +msgstr "Benutzername für Zeitberechnungen ignorieren" #: init/completions/w.fish:3 msgid "Short format" @@ -8048,7 +8428,7 @@ msgstr "Debug-Ausgabe aktivieren" #: init/completions/wget.fish:14 init/completions/wget.fish:15 msgid "Turn off verbose without being completely quiet" -msgstr "verbose-Modus abschalten, jedoch nicht vollkommen ruhig" +msgstr "Ausführlichen Modus abschalten, jedoch nicht vollkommen ruhig" #: init/completions/wget.fish:16 msgid "Read URLs from file" @@ -8060,7 +8440,7 @@ msgstr "Erzwinge die Behandlung der Eingabe als HTML" #: init/completions/wget.fish:18 msgid "Prepend string to relative links" -msgstr "Zeichenkette vor relative Links setzen" +msgstr "Zeichenkette vor relative Links stellen" #: init/completions/wget.fish:19 msgid "Bind address on local machine" @@ -8068,7 +8448,7 @@ msgstr "Adresse an lokale Maschine binden" #: init/completions/wget.fish:20 msgid "Set number of retries to number" -msgstr "Anzahl Versuche auf Anzahl setzen" +msgstr "Anzahl der Versuche auf Anzahl festlegen" #: init/completions/wget.fish:21 msgid "Concatenate output to file" @@ -8080,11 +8460,11 @@ msgstr "Dateien gleichen Namens niemals #: init/completions/wget.fish:24 msgid "Continue getting a partially-downloaded file" -msgstr "Abruf einer teilweise übertragenen Datei fortsetzen" +msgstr "Herunterladen einer teilweise übertragenen Datei fortsetzen" #: init/completions/wget.fish:25 msgid "Select progress meter type" -msgstr "Typ der Verlaufsanzeige wählen" +msgstr "Fortschrittsanzeigentyp auswählen" #: init/completions/wget.fish:32 msgid "Turn on time-stamping" @@ -8092,31 +8472,31 @@ msgstr "Zeitstempel aktivieren" #: init/completions/wget.fish:33 msgid "Print the headers/responses sent by servers" -msgstr "Von Servern gesendete Kopfzeilen/Antworten anzeigen" +msgstr "Von Servern gesendete Kopfzeilen/Antworten ausgeben" #: init/completions/wget.fish:34 msgid "Do not download the pages, just check that they are there" -msgstr "Seiten nicht abrufen, nur auf Verfügbarkeit testen" +msgstr "Seiten nicht herunterladen, nur auf Verfügbarkeit testen" #: init/completions/wget.fish:35 msgid "Set the network timeout" -msgstr "Zeitablauf für Netzwerk setzen" +msgstr "Zeitüberschreitung für Netzwerk festlegen" #: init/completions/wget.fish:36 msgid "Set the DNS lookup timeout" -msgstr "Zeitablauf für DNS-Abfragen setzen" +msgstr "Zeitüberschreitung für DNS-Abfragen festlegen" #: init/completions/wget.fish:37 msgid "Set the connect timeout" -msgstr "Verbindungszeitablauf setzen" +msgstr "Verbindungszeitüberschreitung festlegen" #: init/completions/wget.fish:38 msgid "Set the read (and write) timeout" -msgstr "Lese- (und Schreib-)Zeitablauf setzen" +msgstr "Lese- (und Schreib-)Zeitüberschreitung festlegen" #: init/completions/wget.fish:39 msgid "Limit the download speed" -msgstr "Abruf-Geschwindigkeit begrenzen" +msgstr "Herunterladegeschwindigkeit begrenzen" #: init/completions/wget.fish:40 msgid "Wait the specified number of seconds between the retrievals" @@ -8136,15 +8516,17 @@ msgstr "Proxy-Unterst #: init/completions/wget.fish:44 msgid "Specify download quota for automatic retrievals" -msgstr "Abruf-Quote für automatische Abrufe festlegen" +msgstr "Herunterladequote für automatische Abrufe festlegen" #: init/completions/wget.fish:45 msgid "Turn off caching of DNS lookups" msgstr "Zwischenspeicherung von DNS-Abfragen abschalten" #: init/completions/wget.fish:46 -msgid "Change which characters found in remote URLs may show up in local file names" -msgstr "Festlegung, welche Zeichen aus URLs in lokalen Dateinamen vorkommen dürfen" +msgid "" +"Change which characters found in remote URLs may show up in local file names" +msgstr "" +"Festlegung, welche Zeichen aus URLs in lokalen Dateinamen vorkommen dürfen" #: init/completions/wget.fish:53 init/completions/wget.fish:54 msgid "Do not create a hierarchy of directories" @@ -8168,7 +8550,7 @@ msgstr "Angegebene Anzahl von Verzeichniskomponenten ignorieren" #: init/completions/wget.fish:60 msgid "Set directory prefix" -msgstr "Verzeichnis-Prefix setzen" +msgstr "Verzeichnis-Präfix festlegen" #: init/completions/wget.fish:61 msgid "Force html files to have html extension" @@ -8176,7 +8558,7 @@ msgstr "html-Erweiterung f #: init/completions/wget.fish:62 msgid "Specify the http username" -msgstr "http-Anwendername angeben" +msgstr "http-Benutzername angeben" #: init/completions/wget.fish:63 msgid "Specify the http password" @@ -8204,15 +8586,15 @@ msgstr "Session-Cookies speichern" #: init/completions/wget.fish:69 msgid "Ignore 'Content-Length' header" -msgstr "Header für 'Content-Length' ignorieren" +msgstr "Kopfzeile für 'Content-Length' ignorieren" #: init/completions/wget.fish:70 msgid "Define an additional-header to be passed to the HTTP servers" -msgstr "Zusätzliche Headerzeile definieren, die an HTTP-Server geschickt wird" +msgstr "Zusätzliche Kopfzeilen definieren, die an HTTP-Server geschickt werden" #: init/completions/wget.fish:71 msgid "Specify the proxy username" -msgstr "Proxy-Anwendername angeben" +msgstr "Proxy-Benutzername angeben" #: init/completions/wget.fish:72 msgid "Specify the proxy password" @@ -8220,7 +8602,7 @@ msgstr "Proxy-Passwort angeben" #: init/completions/wget.fish:73 msgid "Set referer URL" -msgstr "Referer-URL setzen" +msgstr "Referer-URL festlegen" #: init/completions/wget.fish:74 msgid "Save the headers sent by the HTTP server" @@ -8228,11 +8610,15 @@ msgstr "Vom HTTP-Server gesendete Kopfzeilen speichern" #: init/completions/wget.fish:75 msgid "Identify as agent-string" -msgstr "Zeichenkette für User-Agent setzen" +msgstr "Zeichenkette für User-Agent festlegen" #: init/completions/wget.fish:76 init/completions/wget.fish:77 -msgid "Use POST as the method for all HTTP requests and send the specified data in the request body" -msgstr "POST-Methode für alle HTTP-Anforderungen benutzen und die angebenen Daten im Anforderungsteil senden" +msgid "" +"Use POST as the method for all HTTP requests and send the specified data in " +"the request body" +msgstr "" +"POST-Methode für alle HTTP-Anforderungen benutzen und die angebenen Daten im " +"Anforderungsteil senden" #: init/completions/wget.fish:78 msgid "Turn off keep-alive for http downloads" @@ -8264,10 +8650,11 @@ msgstr "Maximale Rekursionstiefe angeben" #: init/completions/wget.fish:91 msgid "Delete every single file downloaded" -msgstr "Jede einzelne abgerufene Datei löschen" +msgstr "Jede einzelne heruntergeladene Datei löschen" #: init/completions/wget.fish:92 -msgid "Convert the links in the document to make them suitable for local viewing" +msgid "" +"Convert the links in the document to make them suitable for local viewing" msgstr "Links im Dokument für die lokale Anzeige konvertieren" #: init/completions/wget.fish:93 @@ -8279,8 +8666,12 @@ msgid "Turn on options suitable for mirroring" msgstr "Optionen aktivieren, die zum Spiegeln geeignet sind" #: init/completions/wget.fish:95 -msgid "Download all the files that are necessary to properly display a given HTML page" -msgstr "Abruf aller zur korrekten Anzeige einer HTML-Seite erforderlichen Dateien" +msgid "" +"Download all the files that are necessary to properly display a given HTML " +"page" +msgstr "" +"Herunterladen aller zur korrekten Anzeige einer HTML-Seite erforderlichen " +"Dateien" #: init/completions/wget.fish:96 msgid "Turn on strict parsing of HTML comments" @@ -8288,11 +8679,15 @@ msgstr "Strenge Auswertung von HTML-Kommentaren aktivieren" #: init/completions/wget.fish:100 msgid "Comma-separated lists of file name suffixes or patterns to accept" -msgstr "Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die akzeptiert werden" +msgstr "" +"Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die akzeptiert " +"werden" #: init/completions/wget.fish:101 msgid "Comma-separated lists of file name suffixes or patterns to reject" -msgstr "Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die zurückgewiesen werden" +msgstr "" +"Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die " +"zurückgewiesen werden" #: init/completions/wget.fish:102 msgid "Set domains to be followed" @@ -8316,7 +8711,7 @@ msgstr "zu ignorierenden HTML-Markierungen" #: init/completions/wget.fish:107 msgid "Enable spanning across hosts" -msgstr "" +msgstr "Spannung Host-übergreifend aktivieren" #: init/completions/wget.fish:108 msgid "Follow relative links only" @@ -8324,11 +8719,15 @@ msgstr "Nur relativen Links folgen" #: init/completions/wget.fish:109 msgid "Specify a comma-separated list of directories you wish to follow" -msgstr "Geben Sie eine Komma-getrennte Liste von Verzeichnissen an, denen gefolgt werden soll" +msgstr "" +"Geben Sie eine Komma-getrennte Liste von Verzeichnissen an, denen gefolgt " +"werden soll" #: init/completions/wget.fish:110 msgid "Specify a comma-separated list of directories you wish to exclude" -msgstr "Geben Sie eine Komma-getrennte Liste von Verzeichnissen an, die ausgeschlossen werden soll" +msgstr "" +"Geben Sie eine Komma-getrennte Liste von Verzeichnissen an, die " +"ausgeschlossen werden soll" #: init/completions/wget.fish:111 init/completions/wget.fish:112 msgid "Do not ever ascend to the parent directory" @@ -8340,23 +8739,23 @@ msgstr "Entspricht -b -d --login -p -r -t -T -u" #: init/completions/who.fish:2 msgid "Print time of last boot" -msgstr "Zeit des letzten Neustarts zeigen" +msgstr "Zeit des letzten Neustarts anzeigen" #: init/completions/who.fish:3 msgid "Print dead processes" -msgstr "Tote Prozesse anzeigen" +msgstr "Tote Prozesse ausgeben" #: init/completions/who.fish:4 msgid "Print line of headings" -msgstr "Überschrift anzeigen" +msgstr "Überschrift ausgeben" #: init/completions/who.fish:5 msgid "Print idle time" -msgstr "inaktiv-Zeit anzeigen" +msgstr "Leerlaufzeit ausgeben" #: init/completions/who.fish:6 msgid "Print login process" -msgstr "Anmeldeprozess anzeigen" +msgstr "Anmeldeprozess ausgeben" #: init/completions/who.fish:7 msgid "Canonicalize hostnames via DNS" @@ -8364,7 +8763,7 @@ msgstr "Rechnernamen per DNS aufl #: init/completions/who.fish:8 msgid "Print hostname and user for stdin" -msgstr "Hostname und Anwender für Standardeingabe anzeigen" +msgstr "Hostname und Benutzer für Standardeingabe ausgeben" #: init/completions/who.fish:9 msgid "Print active processes spawned by init" @@ -8372,7 +8771,7 @@ msgstr "Zeige von init gestartete aktive Prozesse" #: init/completions/who.fish:10 msgid "Print all login names and number of users logged on" -msgstr "Zeige alle Anmelde-Namen und Anzahl angemeldeter Anwender" +msgstr "Alle Anmeldenamen und Anzahl der angemeldeter Benutzer ausgeben" #: init/completions/who.fish:11 msgid "Print current runlevel" @@ -8384,16 +8783,16 @@ msgstr "Zeige Name, Zeile und Zeit" #: init/completions/who.fish:13 msgid "Print last system clock change" -msgstr "" +msgstr "Letzte Systemzeitumstellung ausgeben" #: init/completions/who.fish:14 init/completions/who.fish:15 #: init/completions/who.fish:16 msgid "Print users message status as +, - or ?" -msgstr "Nachrichtenstatus des Anwenders als +, - oder ?" +msgstr "Nachrichtenstatus des Benutzers als +, - oder ?" #: init/completions/who.fish:17 msgid "List users logged in" -msgstr "Angemeldete Anwender anzeigen" +msgstr "Angemeldete Benutzer auflisten" #: init/completions/xprop.fish:3 msgid "Display grammar and exit" @@ -8401,11 +8800,11 @@ msgstr "Grammatik anzeigen und beenden" #: init/completions/xprop.fish:4 msgid "Select window by id" -msgstr "Fenster über ID wählen" +msgstr "Fenster über Kennung auswählen" #: init/completions/xprop.fish:5 msgid "Select window by name" -msgstr "Fenster über Name wählen" +msgstr "Fenster über Name auswählen" #: init/completions/xprop.fish:6 msgid "Display font properties" @@ -8413,11 +8812,11 @@ msgstr "Zeichensatzeigenschaften anzeigen" #: init/completions/xprop.fish:7 msgid "Select root window" -msgstr "Root-Fenster wählen" +msgstr "Root-Fenster auswählen" #: init/completions/xprop.fish:8 msgid "Specify X server" -msgstr "X Server angeben" +msgstr "X-Server angeben" #: init/completions/xprop.fish:9 msgid "Maximum display length" @@ -8429,11 +8828,11 @@ msgstr "Eigenschaftstyp nicht anzeigen" #: init/completions/xprop.fish:11 msgid "Set format file" -msgstr "Formatdatei setzen" +msgstr "Formatdatei festlegen" #: init/completions/xprop.fish:12 msgid "Select a window by clicking on its frame" -msgstr "Fenster durck Klicken auf den Rahmen wählen" +msgstr "Fenster durch Klicken auf den Rahmen auswählen" #: init/completions/xprop.fish:13 msgid "Remove property" @@ -8441,15 +8840,15 @@ msgstr "Eigenschaft entfernen" #: init/completions/xprop.fish:19 msgid "Set property" -msgstr "Eigenschaft setzen" +msgstr "Eigenschaft festlegen" #: init/completions/xprop.fish:25 msgid "Examine property updates forever" -msgstr "" +msgstr "Eigenschaftsaktualisierungen andauernd überprüfen" #: init/completions/xprop.fish:26 msgid "Set format" -msgstr "Format setzen" +msgstr "Format festlegen" #: init/completions/xsel.fish:1 msgid "Append input to selection" @@ -8501,7 +8900,7 @@ msgstr "X Server-Anzeige" #: init/completions/xsel.fish:13 msgid "Timeout for retrieving selection" -msgstr "Zeitablauf für Abruf der Auswahl" +msgstr "Zeitüberschreitung für Abruf der Auswahl" #: init/completions/xsel.fish:14 msgid "Error log" @@ -8517,11 +8916,11 @@ msgstr "Informative Nachrichten ausgeben" #: init/completions/yum.fish:52 msgid "Set debug level" -msgstr "Debug-Grad setzen" +msgstr "Debug-Grad festlegen" #: init/completions/yum.fish:53 msgid "Set error level" -msgstr "Fehler-Grad setzen" +msgstr "Fehler-Grad festlegen" #: init/completions/yum.fish:54 msgid "Be tolerant of errors in commandline" @@ -8529,7 +8928,7 @@ msgstr "Fehler in der Befehlszeile tolerieren" #: init/completions/yum.fish:55 msgid "Set maximum delay between commands" -msgstr "Maximale Verzögerung zwischen Befehlen setzen" +msgstr "Maximale Verzögerung zwischen Befehlen festlegen" #: init/completions/yum.fish:56 msgid "Run commands from cache" @@ -8585,11 +8984,11 @@ msgstr "Nicht komprimieren" #: init/completions/zip.fish:9 msgid "Convert LF to CR LF" -msgstr "LF nach LF/CR wandeln" +msgstr "LF nach LF/CR umwandeln" #: init/completions/zip.fish:10 msgid "Convert CR LF to LF" -msgstr "CR/LF nach LF wandeln" +msgstr "CR/LF nach LF umwandeln" #: init/completions/zip.fish:11 msgid "Compress faster" @@ -8663,3 +9062,4 @@ msgstr "Verschl msgid "Don't compress files with these suffixes" msgstr "Dateien mit diesen Endungen nicht komprimieren" + diff --git a/proc.cpp b/proc.cpp index 1ca700999..a774d3597 100644 --- a/proc.cpp +++ b/proc.cpp @@ -106,6 +106,7 @@ job_iterator_t::job_iterator_t(job_list_t &jobs) : job_list(&jobs) job_iterator_t::job_iterator_t() : job_list(&parser_t::principal_parser().job_list()) { + ASSERT_IS_MAIN_THREAD(); this->reset(); } diff --git a/proc.h b/proc.h index 5e702a91a..b1661b801 100644 --- a/proc.h +++ b/proc.h @@ -373,7 +373,10 @@ class job_t unsigned int flags; /* Returns the block IO redirections associated with the job. These are things like the IO redirections associated with the begin...end statement. */ - const io_chain_t &block_io_chain() const { return this->block_io; } + const io_chain_t &block_io_chain() const + { + return this->block_io; + } /* Fetch all the IO redirections associated with the job */ io_chain_t all_io_redirections() const; diff --git a/reader.cpp b/reader.cpp index 228fa9183..5660ff268 100644 --- a/reader.cpp +++ b/reader.cpp @@ -984,19 +984,27 @@ void reader_init() // PCA disable VDSUSP (typically control-Y), which is a funny job control // function available only on OS X and BSD systems // This lets us use control-Y for yank instead - #ifdef VDSUSP +#ifdef VDSUSP shell_modes.c_cc[VDSUSP] = _POSIX_VDISABLE; - #endif +#endif #endif } void reader_destroy() { - tcsetattr(0, TCSANOW, &terminal_mode_on_startup); pthread_key_delete(generation_count_key); } +void restore_term_mode() +{ + // Restore the term mode if we own the terminal + // It's important we do this before restore_foreground_process_group, otherwise we won't think we own the terminal + if (getpid() == tcgetpgrp(STDIN_FILENO)) + { + tcsetattr(STDIN_FILENO, TCSANOW, &terminal_mode_on_startup); + } +} void reader_exit(int do_exit, int forced) { @@ -1402,12 +1410,8 @@ struct autosuggestion_context_t file_detection_context_t detector; const wcstring working_directory; const env_vars_snapshot_t vars; - wcstring_list_t commands_to_load; const unsigned int generation_count; - // don't reload more than once - bool has_tried_reloading; - autosuggestion_context_t(history_t *history, const wcstring &term, size_t pos) : search_string(term), cursor_pos(pos), @@ -1415,8 +1419,7 @@ struct autosuggestion_context_t detector(history, term), working_directory(env_get_pwd_slash()), vars(env_vars_snapshot_t::highlighting_keys), - generation_count(s_generation_count), - has_tried_reloading(false) + generation_count(s_generation_count) { } @@ -1486,7 +1489,7 @@ struct autosuggestion_context_t /* Try normal completions */ std::vector completions; - complete(search_string, completions, COMPLETION_REQUEST_AUTOSUGGESTION, &this->commands_to_load); + complete(search_string, completions, COMPLETION_REQUEST_AUTOSUGGESTION); if (! completions.empty()) { const completion_t &comp = completions.at(0); @@ -1515,23 +1518,6 @@ static bool can_autosuggest(void) static void autosuggest_completed(autosuggestion_context_t *ctx, int result) { - - /* Extract the commands to load */ - wcstring_list_t commands_to_load; - ctx->commands_to_load.swap(commands_to_load); - - /* If we have autosuggestions to load, load them and try again */ - if (! result && ! commands_to_load.empty() && ! ctx->has_tried_reloading) - { - ctx->has_tried_reloading = true; - for (wcstring_list_t::const_iterator iter = commands_to_load.begin(); iter != commands_to_load.end(); ++iter) - { - complete_load(*iter, false); - } - iothread_perform(threaded_autosuggest, autosuggest_completed, ctx); - return; - } - if (result && can_autosuggest() && ctx->search_string == data->command_line && @@ -1715,7 +1701,7 @@ static const completion_t *cycle_competions(const std::vector &com // note start_idx will be set to -1 initially, so that when it gets incremented we start at 0 const size_t start_idx = *inout_idx; size_t idx = start_idx; - + const completion_t *result = NULL; size_t remaining = comp.size(); while (remaining--) @@ -2332,7 +2318,7 @@ static void handle_token_history(int forward, int reset) } } break; - + default: { break; @@ -3263,7 +3249,7 @@ const wchar_t *reader_readline(void) const wcstring buffcpy = wcstring(cmdsub_begin, token_end); //fprintf(stderr, "Complete (%ls)\n", buffcpy.c_str()); - data->complete_func(buffcpy, comp, COMPLETION_REQUEST_DEFAULT | COMPLETION_REQUEST_DESCRIPTIONS | COMPLETION_REQUEST_FUZZY_MATCH, NULL); + data->complete_func(buffcpy, comp, COMPLETION_REQUEST_DEFAULT | COMPLETION_REQUEST_DESCRIPTIONS | COMPLETION_REQUEST_FUZZY_MATCH); /* Munge our completions */ sort_and_make_unique(comp); @@ -3806,34 +3792,34 @@ const wchar_t *reader_readline(void) } break; } - + case R_UPCASE_WORD: case R_DOWNCASE_WORD: case R_CAPITALIZE_WORD: { // For capitalize_word, whether we've capitalized a character so far bool capitalized_first = false; - + // We apply the operation from the current location to the end of the word size_t pos = data->buff_pos; move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false); for (; pos < data->buff_pos; pos++) { wchar_t chr = data->command_line.at(pos); - + // We always change the case; this decides whether we go uppercase (true) or lowercase (false) bool make_uppercase; if (c == R_CAPITALIZE_WORD) make_uppercase = ! capitalized_first && iswalnum(chr); else make_uppercase = (c == R_UPCASE_WORD); - + // Apply the operation and then record what we did if (make_uppercase) chr = towupper(chr); else chr = towlower(chr); - + data->command_line.at(pos) = chr; capitalized_first = capitalized_first || make_uppercase; } @@ -3842,7 +3828,7 @@ const wchar_t *reader_readline(void) reader_repaint(); break; } - + /* Other, if a normal character, we add it to the command */ default: { diff --git a/reader.h b/reader.h index 28340ad7a..b954c1bea 100644 --- a/reader.h +++ b/reader.h @@ -46,6 +46,9 @@ void reader_init(); */ void reader_destroy(); +/** Restore the term mode at startup */ +void restore_term_mode(); + /** Returns the filename of the file currently read */ @@ -163,7 +166,7 @@ void reader_pop(); - The command to be completed as a null terminated array of wchar_t - An array_list_t in which completions will be inserted. */ -typedef void (*complete_function_t)(const wcstring &, std::vector &, completion_request_flags_t, wcstring_list_t * lst); +typedef void (*complete_function_t)(const wcstring &, std::vector &, completion_request_flags_t); void reader_set_complete_function(complete_function_t); /** diff --git a/screen.cpp b/screen.cpp index 5ebe8605d..711aebabd 100644 --- a/screen.cpp +++ b/screen.cpp @@ -137,14 +137,14 @@ static bool allow_soft_wrap(void) size_t escape_code_length(const wchar_t *code) { assert(code != NULL); - + /* The only escape codes we recognize start with \x1b */ if (code[0] != L'\x1b') return 0; - + size_t resulting_length = 0; bool found = false; - + if (cur_term != NULL) { /* @@ -158,12 +158,12 @@ size_t escape_code_length(const wchar_t *code) set_foreground, set_background, }; - + for (size_t p=0; p < sizeof esc / sizeof *esc && !found; p++) { if (!esc[p]) continue; - + for (size_t k=0; k<8; k++) { size_t len = try_sequence(tparm(esc[p],k), code); @@ -176,7 +176,7 @@ size_t escape_code_length(const wchar_t *code) } } } - + if (cur_term != NULL) { /* @@ -206,9 +206,9 @@ size_t escape_code_length(const wchar_t *code) exit_standout_mode, enter_secure_mode }; - - - + + + for (size_t p=0; p < sizeof esc2 / sizeof *esc2 && !found; p++) { if (!esc2[p]) @@ -226,7 +226,7 @@ size_t escape_code_length(const wchar_t *code) } } } - + if (!found) { if (code[1] == L'k') @@ -251,7 +251,7 @@ size_t escape_code_length(const wchar_t *code) } } } - + if (! found) { /* Generic VT100 one byte sequence: CSI followed by something in the range @ through _ */ @@ -261,7 +261,7 @@ size_t escape_code_length(const wchar_t *code) found = true; } } - + if (! found) { /* Generic VT100 CSI-style sequence. , followed by zero or more ASCII characters NOT in the range [@,_], followed by one character in that range */ @@ -273,11 +273,11 @@ size_t escape_code_length(const wchar_t *code) { /* Consume a sequence of ASCII characters not in the range [@, ~] */ wchar_t c = code[cursor]; - + /* If we're not in ASCII, just stop */ if (c > 127) break; - + /* If we're the end character, then consume it and then stop */ if (c >= L'@' && c <= L'~') { @@ -290,7 +290,7 @@ size_t escape_code_length(const wchar_t *code) resulting_length = cursor; } } - + if (! found) { /* Generic VT100 two byte sequence: followed by something in the range @ through _ */ @@ -300,7 +300,7 @@ size_t escape_code_length(const wchar_t *code) found = true; } } - + return resulting_length; } @@ -537,10 +537,6 @@ static void s_desired_append_char(screen_t *s, s->desired.add_line(); s->desired.cursor.y++; s->desired.cursor.x=0; - for (size_t i=0; i < prompt_width; i++) - { - s_desired_append_char(s, L' ', 0, indent, prompt_width); - } } line_t &line = s->desired.line(line_no); @@ -1060,7 +1056,7 @@ struct screen_layout_t wcstring autosuggestion; /* Whether the prompts get their own line or not */ - bool prompts_get_own_line; + bool prompts_get_own_line; }; /* Given a vector whose indexes are offsets and whose values are the widths of the string if truncated at that offset, return the offset that fits in the given width. Returns width_by_offset.size() - 1 if they all fit. The first value in width_by_offset is assumed to be 0. */ @@ -1098,7 +1094,7 @@ static screen_layout_t compute_layout(screen_t *s, size_t left_prompt_width = left_prompt_layout.last_line_width; size_t right_prompt_width = right_prompt_layout.last_line_width; - if (left_prompt_layout.max_line_width >= screen_width) + if (left_prompt_layout.max_line_width > screen_width) { /* If we have a multi-line prompt, see if the longest line fits; if not neuter the whole left prompt */ left_prompt = L"> "; @@ -1215,7 +1211,14 @@ static screen_layout_t compute_layout(screen_t *s, result.left_prompt_space = left_prompt_width; // See remark about for why we can't use the right prompt here //result.right_prompt = right_prompt; - result.prompts_get_own_line = true; + + // If the command wraps, and the prompt is not short, place the command on its own line. + // A short prompt is 33% or less of the terminal's width. + const size_t prompt_percent_width = (100 * left_prompt_width) / screen_width; + if (left_prompt_width + first_command_line_width + 1 > screen_width && prompt_percent_width > 33) { + result.prompts_get_own_line = true; + } + done = true; } diff --git a/screen.h b/screen.h index 1d9fde2c2..ef74383d7 100644 --- a/screen.h +++ b/screen.h @@ -140,7 +140,7 @@ class screen_t /** If we support soft wrapping, we can output to this location without any cursor motion. */ screen_data_t::cursor_t soft_wrap_location; - + /** Whether the last-drawn autosuggestion (if any) is truncated, or hidden entirely */ bool autosuggestion_is_truncated; @@ -158,7 +158,7 @@ class screen_t /** If we need to clear, this is how many lines the actual screen had, before we reset it. This is used when resizing the window larger: if the cursor jumps to the line above, we need to remember to clear the subsequent lines. */ size_t actual_lines_before_reset; - + /** These status buffers are used to check if any output has occurred other than from fish's main loop, in which case we need to redraw. diff --git a/share/completions/..fish b/share/completions/..fish deleted file mode 100644 index dcb48a1ed..000000000 --- a/share/completions/..fish +++ /dev/null @@ -1 +0,0 @@ -complete -c . -x -a "(__fish_complete_suffix .fish)" diff --git a/share/completions/..fish b/share/completions/..fish new file mode 120000 index 000000000..952c26180 --- /dev/null +++ b/share/completions/..fish @@ -0,0 +1 @@ +source.fish \ No newline at end of file diff --git a/share/completions/adb.fish b/share/completions/adb.fish new file mode 100644 index 000000000..0eef3421f --- /dev/null +++ b/share/completions/adb.fish @@ -0,0 +1,140 @@ +# Completions for Android adb command + +function __fish_adb_no_subcommand --description 'Test if adb has yet to be given the subcommand' + for i in (commandline -opc) + if contains -- $i connect disconnect devices push pull sync shell emu logcat install uninstall jdwp forward bugreport backup restore version help wait-for-device start-server kill-server remount reboot get-state get-serialno get-devpath status-window root usb tcpip ppp + return 1 + end + end + return 0 +end + +function __fish_adb_get_devices --description 'Run adb devices and parse output' + # This seems reasonably portable for all the platforms adb runs on + set -l count (ps x | grep -c adb) + set -l TAB \t + # Don't run adb devices unless the server is already started - it takes a while to init + if [ $count -gt 1 ] + # The tail is to strip the header line, the sed is to massage the -l format + # into a simple "identifier modelname" format which is what we want for complete + adb devices -l | tail -n +2 | sed -E -e "s/([^ ]+) +./\1$TAB/" -e "s/$TAB.*model:([^ ]+).*/$TAB\1/" + end +end + +function __fish_adb_run_command --description 'Runs adb with any -s parameters already given on the command line' + set -l sopt + set -l sopt_is_next + set -l cmd (commandline -poc) + set -e cmd[1] + for i in $cmd + if test $sopt_is_next + set sopt -s $i + break + else + switch $i + case -s + set sopt_is_next 1 + end + end + end + + # If no -s option, see if there's a -d or -e instead + if test -z "$sopt" + if contains -- -d $cmd + set sopt '-d' + else if contains -- -e $cmd + set sopt '-e' + end + end + + # adb returns CRLF (seemingly) so strip CRs + adb $sopt shell $argv | sed s/\r// +end + +function __fish_adb_list_packages + __fish_adb_run_command pm list packages | sed s/package:// +end + + +function __fish_adb_list_uninstallable_packages + # -3 doesn't exactly mean show uninstallable, but it's the closest you can get to with pm list + __fish_adb_run_command pm list packages -3 | sed s/package:// +end + +# Generic options, must come before command +complete -n '__fish_adb_no_subcommand' -c adb -s s -x -a "(__fish_adb_get_devices)" -d 'Device to communicate with' +complete -n '__fish_adb_no_subcommand' -c adb -s d -d 'Communicate with first USB device' +complete -n '__fish_adb_no_subcommand' -c adb -s e -d 'Communicate with emulator' + +# Commands +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'connect' -d 'Connect to device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'disconnect' -d 'Disconnect from device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'devices' -d 'List all connected devices' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'push' -d 'Copy file to device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'pull' -d 'Copy file from device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'sync' -d 'Copy host->device only if changed' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'shell' -d 'Run remote shell [command]' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'emu' -d 'Run emulator console command' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'logcat' -d 'View device log' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'install' -d 'Install package' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'uninstall' -d 'Uninstall package' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'jdwp' -d 'List PIDs of processes hosting a JDWP transport' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'forward' -d 'Port forwarding' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'bugreport' -d 'Return bugreport information' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'backup' -d 'Perform device backup' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'restore' -d 'Restore device from backup' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'version' -d 'Show adb version' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'help' -d 'Show adb help' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'wait-for-device' -d 'Block until device is online' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'start-server' -d 'Ensure that there is a server running' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'kill-server' -d 'Kill the server if it is running' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'remount' -d 'Remounts the /system partition on the device read-write' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'reboot' -d 'Reboots the device, optionally into the bootloader or recovery program' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'get-state' -d 'Prints state of the device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'get-serialno' -d 'Prints serial number of the device' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'get-devpath' -d 'Prints device path' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'status-window' -d 'Continuously print the device status' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'root' -d 'Restart the adbd daemon with root permissions' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'usb' -d 'Restart the adbd daemon listening on USB' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'tcpip' -d 'Restart the adbd daemon listening on TCP' +complete -f -n '__fish_adb_no_subcommand' -c adb -a 'ppp' -d 'Run PPP over USB' + +# install options +complete -n '__fish_seen_subcommand_from install' -c adb -s l -d 'Forward-lock the app' +complete -n '__fish_seen_subcommand_from install' -c adb -s r -d 'Reinstall the app keeping its data' +complete -n '__fish_seen_subcommand_from install' -c adb -s s -d 'Install on SD card instead of internal storage' +complete -n '__fish_seen_subcommand_from install' -c adb -l 'algo' -d 'Algorithm name' +complete -n '__fish_seen_subcommand_from install' -c adb -l 'key' -d 'Hex-encoded key' +complete -n '__fish_seen_subcommand_from install' -c adb -l 'iv' -d 'Hex-encoded iv' + +# uninstall +complete -n '__fish_seen_subcommand_from uninstall' -c adb -s k -d 'Keep the data and cache directories' +complete -n '__fish_seen_subcommand_from uninstall' -c adb -f -u -a "(__fish_adb_list_uninstallable_packages)" + +# devices +complete -n '__fish_seen_subcommand_from devices' -c adb -s l -d 'Also list device qualifiers' + +# disconnect +complete -n '__fish_seen_subcommand_from disconnect' -c adb -x -a "(__fish_adb_get_devices)" -d 'Device to disconnect' + +# backup +complete -n '__fish_seen_subcommand_from backup' -c adb -s f -d 'File to write backup data to' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'apk' -d 'Enable backup of the .apks themselves' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'noapk' -d 'Disable backup of the .apks themselves (default)' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'obb' -d 'Enable backup of any installed apk expansion' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'noobb' -d 'Disable backup of any installed apk expansion (default)' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'shared' -d 'Enable backup of the device\'s shared storage / SD card contents' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'noshared' -d 'Disable backup of the device\'s shared storage / SD card contents (default)' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'all' -d 'Back up all installed applications' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'system' -d 'Include system applications in -all (default)' +complete -n '__fish_seen_subcommand_from backup' -c adb -o 'nosystem' -d 'Exclude system applications in -all' +complete -n '__fish_seen_subcommand_from backup' -c adb -f -a "(__fish_adb_list_packages)" -d 'Package(s) to backup' + +# reboot +complete -n '__fish_seen_subcommand_from reboot' -c adb -x -a 'bootloader recovery' + +# forward +complete -n '__fish_seen_subcommand_from forward' -c adb -l 'list' -d 'List all forward socket connections' +complete -n '__fish_seen_subcommand_from forward' -c adb -l 'no-rebind' -d 'Fails the forward if local is already forwarded' +complete -n '__fish_seen_subcommand_from forward' -c adb -l 'remove' -d 'Remove a specific forward socket connection' +complete -n '__fish_seen_subcommand_from forward' -c adb -l 'remove-all' -d 'Remove all forward socket connections' diff --git a/share/completions/brew.fish b/share/completions/brew.fish index fe1ee764a..803d81f04 100644 --- a/share/completions/brew.fish +++ b/share/completions/brew.fish @@ -30,6 +30,14 @@ function __fish_brew_outdated_formulas brew outdated end +function __fish_brew_pinned_formulas + brew list --pinned +end + +function __fish_brew_taps + brew tap +end + ############ # commands # @@ -39,6 +47,15 @@ end complete -f -c brew -n '__fish_brew_needs_command' -a audit -d 'Check formula' complete -f -c brew -n '__fish_brew_using_command audit' -a '(__fish_brew_formulae)' +# bottle + +complete -f -c brew -n '__fish_brew_needs_command' -a bottle -d 'Create a binary package' +complete -f -c brew -n '__fish_brew_using_command bottle' -l 'homebrew-developer' -d 'Output developer debug information' +complete -f -c brew -n '__fish_brew_using_command bottle' -l 'no-revision' -d 'Do not bump the bottle revision number' +complete -f -c brew -n '__fish_brew_using_command bottle' -l 'rb' -d 'Write bottle block to a Ruby source file' +complete -f -c brew -n '__fish_brew_using_command bottle' -l 'write' -d 'Write bottle block to formula file' +complete -f -c brew -n '__fish_brew_using_command bottle' -l 'merge' -d 'Merge multiple bottle outputs' + # cat complete -f -c brew -n '__fish_brew_needs_command' -a cat -d 'Display formula' complete -f -c brew -n '__fish_brew_using_command cat' -a '(__fish_brew_formulae)' @@ -46,8 +63,9 @@ complete -f -c brew -n '__fish_brew_using_command cat' -a '(__fish_brew_formulae # cleanup complete -f -c brew -n '__fish_brew_needs_command' -a cleanup -d 'Remove old installed versions' complete -f -c brew -n '__fish_brew_using_command cleanup' -l force -d 'Remove out-of-date keg-only brews as well' -complete -f -c brew -n '__fish_brew_using_command cleanup' -s n -d 'Dry run' -complete -f -c brew -n '__fish_brew_using_command cleanup' -s s -d 'Scrubs the cache' +complete -f -c brew -n '__fish_brew_using_command cleanup' -l dry-run -d 'Show what files would be removed' +complete -f -c brew -n '__fish_brew_using_command cleanup' -s n -d 'Show what files would be removed' +complete -f -c brew -n '__fish_brew_using_command cleanup' -s s -d 'Scrub the cache' complete -f -c brew -n '__fish_brew_using_command cleanup' -a '(__fish_brew_installed_formulas)' # create @@ -55,6 +73,8 @@ complete -f -c brew -n '__fish_brew_needs_command' -a create -d 'Create new form complete -f -c brew -n '__fish_brew_using_command create' -l cmake -d 'Use template for CMake-style build' complete -f -c brew -n '__fish_brew_using_command create' -l autotools -d 'Use template for Autotools-style build' complete -f -c brew -n '__fish_brew_using_command create' -l no-fetch -d 'Don\'t download URL' +complete -f -c brew -n '__fish_brew_using_command create' -l set-name -d 'Override name autodetection' +complete -f -c brew -n '__fish_brew_using_command create' -l set-version -d 'Override version autodetection' # deps complete -f -c brew -n '__fish_brew_needs_command' -a deps -d 'Show a formula\'s dependencies' @@ -62,6 +82,7 @@ complete -f -c brew -n '__fish_brew_using_command deps' -l 1 -d 'Show only 1 lev complete -f -c brew -n '__fish_brew_using_command deps' -s n -d 'Show in topological order' complete -f -c brew -n '__fish_brew_using_command deps' -l tree -d 'Show dependencies as tree' complete -f -c brew -n '__fish_brew_using_command deps' -l all -d 'Show dependencies for all formulae' +complete -f -c brew -n '__fish_brew_using_command deps' -l installed -d 'Show dependencies for installed formulae' complete -f -c brew -n '__fish_brew_using_command deps' -a '(__fish_brew_formulae)' # diy @@ -70,7 +91,10 @@ complete -f -c brew -n '__fish_brew_using_command diy' -l set-name -d 'Set name complete -f -c brew -n '__fish_brew_using_command diy' -l set-version -d 'Set version of package' complete -f -c brew -n '__fish_brew_needs_command' -a 'doctor' -d 'Check your system for problems' + +# edit complete -f -c brew -n '__fish_brew_needs_command' -a 'edit' -d 'Open brew/formula for editing' +complete -f -c brew -n '__fish_brew_using_command edit' -a '(__fish_brew_formulae)' # fetch complete -f -c brew -n '__fish_brew_needs_command' -a fetch -d 'Download source for formula' @@ -78,6 +102,7 @@ complete -f -c brew -n '__fish_brew_using_command fetch' -l force -d 'Remove a p complete -f -c brew -n '__fish_brew_using_command fetch' -l HEAD -d 'Download the HEAD version from a VCS' complete -f -c brew -n '__fish_brew_using_command fetch' -l deps -d 'Also download dependencies' complete -f -c brew -n '__fish_brew_using_command fetch' -s v -d 'Make HEAD checkout verbose' +complete -f -c brew -n '__fish_brew_using_command fetch' -l build-from-source -d 'Fetch source package instead of bottle' complete -f -c brew -n '__fish_brew_using_command fetch' -a '(__fish_brew_formulae)' complete -f -c brew -n '__fish_brew_needs_command' -a 'help' -d 'Display help' @@ -101,25 +126,42 @@ complete -f -c brew -n '__fish_brew_using_command install' -l fresh -d 'Don\'t r complete -f -c brew -n '__fish_brew_using_command install' -l use-clang -d 'Attempt to compile using clang' complete -f -c brew -n '__fish_brew_using_command install' -l use-gcc -d 'Attempt to compile using GCC' complete -f -c brew -n '__fish_brew_using_command install' -l use-llvm -d 'Attempt to compile using the LLVM' +complete -f -c brew -n '__fish_brew_using_command install' -l cc -a "clang gcc-4.0 gcc-4.2 gcc-4.3 gcc-4.4 gcc-4.5 gcc-4.6 gcc-4.7 gcc-4.8 gcc-4.9 llvm-gcc" -d 'Attempt to compile using the specified compiler' complete -f -c brew -n '__fish_brew_using_command install' -l build-from-source -d 'Compile from source even if a bottle is provided' complete -f -c brew -n '__fish_brew_using_command install' -l devel -d 'Install the development version of formula' complete -f -c brew -n '__fish_brew_using_command install' -l HEAD -d 'Install the HEAD version from VCS' complete -f -c brew -n '__fish_brew_using_command install' -l interactive -d 'Download and patch formula, then open a shell' +complete -f -c brew -n '__fish_brew_using_command install' -l env -a "std super" -d 'Force the specified build environment' +complete -f -c brew -n '__fish_brew_using_command install' -l build-bottle -d 'Optimize for a generic CPU architecture' +complete -f -c brew -n '__fish_brew_using_command install' -l bottle-arch -a 'core core2 penryn g3 g4 g4e g5' -d 'Optimize for the specified CPU architecture' complete -c brew -n '__fish_brew_using_command install' -a '(__fish_brew_formulae)' # link complete -f -c brew -n '__fish_brew_needs_command' -a 'link ln' -d 'Symlink installed formula' +complete -f -c brew -n '__fish_brew_using_command link' -l overwrite -d 'Overwrite existing files' +complete -f -c brew -n '__fish_brew_using_command ln' -l overwrite -d 'Overwrite existing files' +complete -f -c brew -n '__fish_brew_using_command link' -l dry-run -d 'Show what files would be linked or overwritten' +complete -f -c brew -n '__fish_brew_using_command ln' -l dry-run -d 'Show what files would be linked or overwritten' +complete -f -c brew -n '__fish_brew_using_command link' -l force -d 'Allow keg-only formulae to be linked' +complete -f -c brew -n '__fish_brew_using_command ln' -l force -d 'Allow keg-only formulae to be linked' complete -f -c brew -n '__fish_brew_using_command link' -a '(__fish_brew_installed_formulas)' complete -f -c brew -n '__fish_brew_using_command ln' -a '(__fish_brew_installed_formulas)' +# linkapps +complete -f -c brew -n '__fish_brew_needs_command' -a linkapps -d 'Symlink .app bundles into /Applications' +complete -f -c brew -n '__fish_brew_using_command linkapps' -l local -d 'Link .app bundles into ~/Applications instead' + # list complete -f -c brew -n '__fish_brew_needs_command' -a 'list ls' -d 'List all installed formula' complete -f -c brew -n '__fish_brew_using_command list' -l unbrewed -d 'List all files in the Homebrew prefix not installed by brew' complete -f -c brew -n '__fish_brew_using_command list' -l versions -d 'Show the version number' +complete -f -c brew -n '__fish_brew_using_command list' -l pinned -d 'Show the versions of pinned formulae' complete -c brew -n '__fish_brew_using_command list' -a '(__fish_brew_formulae)' + #ls complete -f -c brew -n '__fish_brew_using_command ls' -l unbrewed -d 'List all files in the Homebrew prefix not installed by brew' complete -f -c brew -n '__fish_brew_using_command ls' -l versions -d 'Show the version number' +complete -f -c brew -n '__fish_brew_using_command ls' -l pinned -d 'Show the versions of pinned formulae' complete -c brew -n '__fish_brew_using_command ls' -a '(__fish_brew_formulae)' # log @@ -132,12 +174,19 @@ complete -c brew -n '__fish_brew_using_command missing' -a '(__fish_brew_formula # options complete -f -c brew -n '__fish_brew_needs_command' -a options -d 'Display install options for formula' +complete -f -c brew -n '__fish_brew_using_command options' -l compact -d 'Show all options as a space-delimited list' +complete -f -c brew -n '__fish_brew_using_command options' -l all -d 'Show options for all formulae' +complete -f -c brew -n '__fish_brew_using_command options' -l installed -d 'Show options for all installed formulae' complete -c brew -n '__fish_brew_using_command options' -a '(__fish_brew_formulae)' -d 'formula' # outdated complete -f -c brew -n '__fish_brew_needs_command' -a outdated -d 'Show formula that have updated versions' complete -f -c brew -n '__fish_brew_using_command outdated' -l quiet -d 'Display only names' +# pin +complete -f -c brew -n '__fish_brew_needs_command' -a pin -d 'Pin the specified formulae to their current versions' +complete -f -c brew -n '__fish_brew_using_command pin' -a '(__fish_brew_installed_formulas)' -d 'formula' + # prune complete -f -c brew -n '__fish_brew_needs_command' -a prune -d 'Remove dead symlinks' @@ -148,12 +197,17 @@ complete -f -c brew -n '__fish_brew_using_command search' -l fink -d 'Search on complete -f -c brew -n '__fish_brew_using_command -S' -l macports -d 'Search on MacPorts' complete -f -c brew -n '__fish_brew_using_command -S' -l fink -d 'Search on Fink' +# sh +complete -f -c brew -n '__fish_brew_needs_command' -a sh -d 'Instantiate a Homebrew build enviornment' +complete -f -c brew -n '__fish_brew_using_command sh' -l env=std -d 'Use stdenv instead of superenv' + # tap complete -f -c brew -n '__fish_brew_needs_command' -a tap -d 'Tap a new formula repository on GitHub' +complete -f -c brew -n '__fish_brew_using_command tap' -l repair -d 'Create and prune tap symlinks as appropriate' # test complete -f -c brew -n '__fish_brew_needs_command' -a test -d 'Run tests for formula' -complete -c brew -n '__fish_brew_using_command test' -a '(__fish_brew_formulae)' -d 'formula' +complete -f -c brew -n '__fish_brew_using_command test' -a '(__fish_brew_installed_formulas)' -d 'formula' # uninstall complete -f -c brew -n '__fish_brew_needs_command' -a 'uninstall remove rm' -d 'Uninstall formula' @@ -166,10 +220,19 @@ complete -f -c brew -n '__fish_brew_using_command rm' -l force -d 'Delete all in # unlink complete -f -c brew -n '__fish_brew_needs_command' -a unlink -d 'Unlink formula' -complete -c brew -n '__fish_brew_using_command unlink' -a '(__fish_brew_installed_formulas)' +complete -f -c brew -n '__fish_brew_using_command unlink' -a '(__fish_brew_installed_formulas)' + +# unlinkapps +complete -f -c brew -n '__fish_brew_needs_command' -a unlinkapps -d 'Remove links created by brew linkapps' +complete -f -c brew -n '__fish_brew_using_command unlinkapps' -l local -d 'Remove links from ~/Applications created by brew linkapps' + +# unpin +complete -f -c brew -n '__fish_brew_needs_command' -a unpin -d 'Unpin specified formulae' +complete -f -c brew -n '__fish_brew_using_command unpin' -a '(__fish_brew_pinned_formulas)' # untap complete -f -c brew -n '__fish_brew_needs_command' -a untap -d 'Remove a tapped repository' +complete -f -c brew -n '__fish_brew_using_command untap' -a '(__fish_brew_taps)' # update complete -f -c brew -n '__fish_brew_needs_command' -a update -d 'Fetch newest version of Homebrew and formulas' @@ -182,6 +245,7 @@ complete -f -c brew -n '__fish_brew_using_command upgrade' -a '(__fish_brew_outd # uses complete -f -c brew -n '__fish_brew_needs_command' -a uses -d 'Show formulas that depend on specified formula' complete -f -c brew -n '__fish_brew_using_command uses' -l installed -d 'List only installed formulae' +complete -f -c brew -n '__fish_brew_using_command uses' -l recursive -d 'Resolve more than one level of dependencies' complete -c brew -n '__fish_brew_using_command uses' -a '(__fish_brew_formulae)' # versions @@ -194,6 +258,7 @@ complete -c brew -n '__fish_brew_using_command versions' -a '(__fish_brew_formul # switches # ############ complete -f -c brew -n '__fish_brew_needs_command' -a '-v --version' -d 'Print version number of brew' +complete -f -c brew -n '__fish_brew_needs_command' -l env -x -d 'Show Homebrew a summary of the build environment' complete -f -c brew -n '__fish_brew_needs_command' -l repository -x -d 'Display where Homebrew\'s .git directory is located' complete -f -c brew -n '__fish_brew_needs_command' -l config -x -d 'Show Homebrew and system configuration' diff --git a/share/completions/eselect.fish b/share/completions/eselect.fish new file mode 100644 index 000000000..5ecdcd6f5 --- /dev/null +++ b/share/completions/eselect.fish @@ -0,0 +1,74 @@ +function __fish_eselect_cmd + eselect --brief --colour=no $argv +end + +function __fish_complete_eselect_modules + set -l sedregexp 's/^ ([a-zA-Z0-9_-]*)[ ]*/\1\t/g' + __fish_eselect_cmd modules list | sgrep '^ ' | sed -r $sedregexp +end + +function __fish_complete_eselect_actions + set -l sedregexp 's/^ ([a-zA-Z0-9_-]*)[ ]*/\1\t/g' + set -l cmdl (commandline -poc) + __fish_eselect_cmd $cmdl[2..-1] usage | sgrep '^ [^ -]' | sed -r $sedregexp +end + +function __fish_complete_eselect_action_options + set -l parseregexp 's/^ ([a-zA-Z0-9_-]*)[ ]*/\1\t/g' + set -l cmdl (commandline -poc) + + # Disable further php completion + if [ (__fish_print_cmd_args_without_options)[2] = 'php' ] + return + end + + switch $cmdl[-1] + case -'*' + return + end + + set -l findregexp '/^ '$cmdl[-1]'/,/^ [^ ]/p' + + set cmdl[-1] usage + __fish_eselect_cmd $cmdl[2..-1] | sed -n -re $findregexp | sgrep '^ --' | sed -re $parseregexp +end + +function __fish_complete_eselect_targets + set -l sedregexp 's/^ \[([0-9]+)\][ ]*/\1\t/g' + set -l cmdl (commandline -poc) + + # Disable further php completion + # https://github.com/fish-shell/fish-shell/pull/1131 + if [ (__fish_print_cmd_args_without_options)[2] = 'php' ] + return + end + + switch $cmdl[-1] + case -'*' + set cmdl[-2] list + case '*' + set cmdl[-1] list + end + + eselect --colour=no $cmdl[2..-1] | sgrep '^ [^ -]' | sed -r $sedregexp +end + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 1" \ + -xa '(__fish_complete_eselect_modules)' + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 1" \ + -l brief -d 'Make output shorter' + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 1" \ + -l colour \ + -d "= Enable or disable colour output (default 'auto')" + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 2" \ + -xa '(__fish_complete_eselect_actions)' + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 3" \ + -xa '(__fish_complete_eselect_targets)' + +complete -c eselect -n "test (__fish_number_of_cmd_args_wo_opts) = 3" \ + -xa '(__fish_complete_eselect_action_options)' + diff --git a/share/completions/git.fish b/share/completions/git.fish index d4b9fcf34..8647bea39 100644 --- a/share/completions/git.fish +++ b/share/completions/git.fish @@ -19,7 +19,11 @@ function __fish_git_remotes end function __fish_git_modified_files - command git status -s | grep -e "^ M" | sed "s/^ M //" + command git ls-files -m --exclude-standard ^/dev/null +end + +function __fish_git_add_files + command git ls-files -mo --exclude-standard ^/dev/null end function __fish_git_ranges @@ -110,12 +114,14 @@ complete -c git -n '__fish_git_using_command add' -l refresh -d "Don't add the f complete -c git -n '__fish_git_using_command add' -l ignore-errors -d 'Ignore errors' complete -c git -n '__fish_git_using_command add' -l ignore-missing -d 'Check if any of the given files would be ignored' complete -f -c git -n '__fish_git_using_command add; and __fish_contains_opt -s p patch' -a '(__fish_git_modified_files)' +complete -f -c git -n '__fish_git_using_command add' -a '(__fish_git_add_files)' # TODO options ### checkout complete -f -c git -n '__fish_git_needs_command' -a checkout -d 'Checkout and switch to a branch' complete -f -c git -n '__fish_git_using_command checkout' -a '(__fish_git_branches)' --description 'Branch' complete -f -c git -n '__fish_git_using_command checkout' -a '(__fish_git_tags)' --description 'Tag' +complete -f -c git -n '__fish_git_using_command checkout' -a '(__fish_git_modified_files)' --description 'File' complete -f -c git -n '__fish_git_using_command checkout' -s b -d 'Create a new branch' complete -f -c git -n '__fish_git_using_command checkout' -s t -l track -d 'Track a new branch' # TODO options diff --git a/share/completions/modprobe.fish b/share/completions/modprobe.fish index f36af1c69..540fa5a24 100644 --- a/share/completions/modprobe.fish +++ b/share/completions/modprobe.fish @@ -2,7 +2,7 @@ # Completions for the modprobe command # -complete -c modprobe -d Module -a "(/sbin/modprobe -l | sed -e 's/\/.*\/\([^\/.]*\).*/\1/')" +complete -c modprobe --no-files -d Module -a "(find /lib/modules/(uname -r)/kernel -type f | sed -e 's/\/.*\/\([^\/.]*\).*/\1/')" complete -c modprobe -s v -l verbose --description "Print messages about what the program is doing" complete -c modprobe -s C -l config --description "Configuration file" -r complete -c modprobe -s c -l showconfig --description "Dump configuration file" diff --git a/share/completions/perl.fish b/share/completions/perl.fish index 6266981d8..cb4a543ff 100644 --- a/share/completions/perl.fish +++ b/share/completions/perl.fish @@ -2,7 +2,7 @@ begin set -l unicode 'commandline | sgrep -qe "-[a-zA-Z]*C[a-zA-Z]*\$"' set -l noopt 'commandline | not sgrep -qe "-[a-zA-Z]*C[a-zA-Z]*\$"' set -l modules "(find (perl -lE'print for @INC') -name '*.pm' -printf '%P\n' \ - | awk '{ gsub(\"/\", \"::\") } !/-/' RS=.pm\n | sort | uniq)" + | awk '{ gsub(\"/\", \"::\") } /[^-.]/' RS=.pm\n | sort | uniq)" complete -c perl -s 0 -n $noopt --description 'Specify record separator' complete -c perl -s a -n $noopt --description 'Turn on autosplit mode' complete -c perl -s c -n $noopt --description 'Check syntax' diff --git a/share/completions/rc-service.fish b/share/completions/rc-service.fish new file mode 100644 index 000000000..a88856860 --- /dev/null +++ b/share/completions/rc-service.fish @@ -0,0 +1,20 @@ +# First argument is the names of the service, i.e. a file in /etc/init.d +complete -c rc-service -n "test (__fish_number_of_cmd_args_wo_opts) = 1" \ + -xa "(__fish_print_service_names)" --description "Service name" + +# The second argument is what action to take with the service +complete -c rc-service -n "test (__fish_number_of_cmd_args_wo_opts) -gt 1" \ + -xa "(__fish_complete_service_actions)" + +# Complete rc-service the options +complete -c rc-service -s e -l exists -d 'Tests if the service exists or not' +complete -c rc-service -s i -l ifexists \ + -d 'If the service exists, then run the command' +complete -c rc-service -s l -l list -d 'List all available services' +complete -c rc-service -s r -l resolve \ + -d 'Resolve the service name to an init script' +complete -c rc-service -s h -l help -d 'Display the help output' +complete -c rc-service -s C -l nocolor -d 'Disable color output' +complete -c rc-service -s V -l version -d 'Display software version' +complete -c rc-service -s v -l verbose -d 'Run verbosely' +complete -c rc-service -s q -l quiet -d 'Run quietly (Does not affect errors)' diff --git a/share/completions/rc-update.fish b/share/completions/rc-update.fish new file mode 100644 index 000000000..f2339699d --- /dev/null +++ b/share/completions/rc-update.fish @@ -0,0 +1,33 @@ +function __fish_complete_rc-update_actions + set -l actions add \ + 'Add the service to the runlevel or the current one if non given' + set -l actions $actions del \ + 'Delete the service from the runlevel or the current one if non given' + set -l actions $actions show \ + 'Show all enabled services and the runlevels they belong to' + printf "%s\t%s\n" $actions +end + +function __fish_complete_rc-update_runlevels + set -l levels sysinit \ + 'First startup runlevel' \ + boot \ + 'Second startup runlevel' \ + default \ + 'Last startup runlevel' \ + shutdown \ + 'Runlevel for stutting down' + printf "%s\t%s\n" $levels +end + +# The first argument is what action to take with the service +complete -c rc-update -n "test (__fish_number_of_cmd_args_wo_opts) = 1" \ + -xa "(__fish_complete_rc-update_actions)" + +# The second argument is the names of the service, i.e. a file in /etc/init.d +complete -c rc-update -n "test (__fish_number_of_cmd_args_wo_opts) = 2" \ + -xa "(__fish_print_service_names)" --description "Service name" + +# The third argument is the names of the service, i.e. a file in /etc/init.d +complete -c rc-update -n "test (__fish_number_of_cmd_args_wo_opts) = 3" \ + -xa "(__fish_complete_rc-update_runlevels)" diff --git a/share/completions/scp.fish b/share/completions/scp.fish index f7e131f50..f791b8af5 100644 --- a/share/completions/scp.fish +++ b/share/completions/scp.fish @@ -31,7 +31,7 @@ complete -c scp -d "Remote Path" -n "commandline -ct|sgrep -o '.*:'" -a " commandline -ct|sgrep -o '.*:' )( #Get the list of remote files from the specified ssh server - ssh -o \"BatchMode yes\" (commandline -ct|sed -ne 's/\(.*\):.*/\1/p') ls\ -dp\ (commandline -ct|sed -ne 's/.*://p')\* 2> /dev/null + ssh (commandline -c|sgrep -o '\-P [0-9]*'|tr P p) -o \"BatchMode yes\" (commandline -ct|sed -ne 's/\(.*\):.*/\1/p') ls\ -dp\ (commandline -ct|sed -ne 's/.*://p')\* 2> /dev/null ) " diff --git a/share/completions/service.fish b/share/completions/service.fish index 2f3614370..4914f97b1 100644 --- a/share/completions/service.fish +++ b/share/completions/service.fish @@ -1,13 +1,5 @@ -function __fish_service_print_names - if type -f systemctl >/dev/null - command systemctl list-units -t service | cut -d ' ' -f 1 | grep '\.service$' | sed -e 's/\.service$//' - end - - command ls /etc/init.d -end - # Fist argument is the names of the service, i.e. a file in /etc/init.d -complete -c service -n "test (count (commandline -poc)) = 1" -xa "(__fish_service_print_names)" --description "Service name" +complete -c service -n "test (count (commandline -poc)) = 1" -xa "(__fish_print_service_names)" --description "Service name" #The second argument is what action to take with the service complete -c service -n "test (count (commandline -poc)) -gt 1" -xa '$__fish_service_commands' diff --git a/share/completions/source.fish b/share/completions/source.fish new file mode 100644 index 000000000..dcb48a1ed --- /dev/null +++ b/share/completions/source.fish @@ -0,0 +1 @@ +complete -c . -x -a "(__fish_complete_suffix .fish)" diff --git a/share/functions/__fish_complete_cd.fish b/share/functions/__fish_complete_cd.fish index f54b5aaa7..1975eab20 100644 --- a/share/functions/__fish_complete_cd.fish +++ b/share/functions/__fish_complete_cd.fish @@ -30,9 +30,13 @@ function __fish_complete_cd -d "Completions for the cd command" for i in $mycdpath # Move to the initial directory first, # in case the CDPATH directory is relative - - builtin cd $wd - builtin cd $i + builtin cd $wd ^/dev/null + builtin cd $i ^/dev/null + + if test $status -ne 0 + # directory does not exists or missing permission + continue + end # What we would really like to do is skip descriptions if all # valid paths are in the same directory, but we don't know how to @@ -45,5 +49,5 @@ function __fish_complete_cd -d "Completions for the cd command" end end - builtin cd $wd + builtin cd $wd ^/dev/null end diff --git a/share/functions/__fish_complete_man.fish b/share/functions/__fish_complete_man.fish index a5e4fa40f..59c8c24eb 100644 --- a/share/functions/__fish_complete_man.fish +++ b/share/functions/__fish_complete_man.fish @@ -21,7 +21,33 @@ function __fish_complete_man set section $section"[^)]*" # Do the actual search - apropos (commandline -ct) ^/dev/null | sgrep \^(commandline -ct) | sed -n -e 's/\([^ ]*\).*(\('$section'\)) *- */\1'\t'\2: /p' + apropos (commandline -ct) ^/dev/null | awk ' + BEGIN { FS="[\t ]- "; OFS="\t"; } + # BSD/Darwin + /^[^( \t]+\('$section'\)/ { + split($1, pages, ", "); + for (i in pages) { + page = pages[i]; + sub(/[ \t]+/, "", page); + paren = index(page, "("); + name = substr(page, 1, paren - 1); + sect = substr(page, paren + 1, length(page) - paren - 1); + print name, sect ": " $2; + } + } + # Linux + /^[^( \t]+ \('$section'\)/ { + split($1, t, " "); + sect = substr(t[2], 2, length(t[2]) - 2); + print t[1], sect ": " $2; + } + # Solaris + /^[^( \t]+\t+[^\(\t]/ { + split($1, t, " "); + sect = substr(t[3], 2, length(t[3]) - 2); + print t[2], sect ": " $2; + } + ' end end diff --git a/share/functions/__fish_complete_service_actions.fish b/share/functions/__fish_complete_service_actions.fish new file mode 100644 index 000000000..ab91f7860 --- /dev/null +++ b/share/functions/__fish_complete_service_actions.fish @@ -0,0 +1,7 @@ +function __fish_complete_service_actions -d "Print a list of all basic service \ + actions" + set -l actions start 'Start the service' + set -l actions $actions stop 'Stop the service' + set -l actions $actions restart 'Restart the service' + printf "%s\t%s\n" $actions +end diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish index d9ee0700e..b9afedd4a 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -137,6 +137,15 @@ function __fish_config_interactive -d "Initializations that should be performed end + # + # Generate man page completions if not present + # + + if not test -d $configdir/fish/generated_completions + #fish_update_completions is a function, so it can not be directly run in background. + eval "$__fish_bin_dir/fish -c 'fish_update_completions > /dev/null ^/dev/null' &" + end + # # Print a greeting # diff --git a/share/functions/__fish_git_prompt.fish b/share/functions/__fish_git_prompt.fish index 4ca32c6eb..0619a0972 100644 --- a/share/functions/__fish_git_prompt.fish +++ b/share/functions/__fish_git_prompt.fish @@ -2,7 +2,7 @@ # # Written by Kevin Ballard # Updated by Brian Gernhardt -# +# # This is heavily based off of the git-prompt.bash script that ships with # git, which is Copyright (C) 2006,2007 Shawn O. Pearce . # The act of porting the code, along with any new code, are Copyright (C) 2012 @@ -51,6 +51,7 @@ # __fish_git_prompt_showupstream to a space-separated list of values: # # verbose show number of commits ahead/behind (+/-) upstream +# name if verbose, then also show the upstream abbrev name # informative similar to verbose, but shows nothing when equal (fish only) # legacy don't use the '--count' option available in recent versions # of git-rev-list @@ -155,7 +156,8 @@ # # The separator before the upstream information can be customized via # __fish_git_prompt_char_upstream_prefix. It is colored like the rest of -# the upstream information. It defaults to nothing (). +# the upstream information. It normally defaults to nothing () and defaults +# to a space ( ) when __fish_git_prompt_showupstream contains verbose. # # # Turning on __fish_git_prompt_showcolorhints changes the colors as follows to @@ -178,6 +180,7 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi set -l upstream git set -l legacy set -l verbose + set -l name # Default to informative if show_informative_status is set if test -n "$__fish_git_prompt_show_informative_status" @@ -202,7 +205,7 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi set upstream svn+git # default upstream is SVN if available, else git # Save the config key (without .url) for later use - set -l remote_prefix (/bin/sh -c 'echo "${1%.url}"' -- $key) + set -l remote_prefix (echo $key | sed 's/\.url$//') set svn_prefix $svn_prefix $remote_prefix end end @@ -222,6 +225,8 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi case legacy set legacy 1 set -e informative + case name + set name 1 case none return end @@ -237,11 +242,11 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi set -l svn_upstream (git log --first-parent -1 --grep="^git-svn-id: \($svn_url_pattern\)" ^/dev/null) if test (count $svn_upstream) -ne 0 echo $svn_upstream[-1] | read -l _ svn_upstream _ - set svn_upstream (/bin/sh -c 'echo "${1%@*}"' -- $svn_upstream) + set svn_upstream (echo $svn_upstream | sed 's/@.*//') set -l cur_prefix for i in (seq (count $svn_remote)) set -l remote $svn_remote[$i] - set -l mod_upstream (/bin/sh -c 'echo "${1#$2}"' -- $svn_upstream $remote) + set -l mod_upstream (echo $svn_upstream | sed "s|$remote||") if test "$svn_upstream" != "$mod_upstream" # we found a valid remote set svn_upstream $mod_upstream @@ -258,14 +263,14 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi set upstream git-svn end else - set upstream (/bin/sh -c 'val=${1#/branches}; echo "${val#/}"' -- $svn_upstream) + set upstream (echo $svn_upstream | sed 's|/branches||; s|/||g') # Use fetch config to fix upstream set -l fetch_val (command git config "$cur_prefix".fetch) if test -n "$fetch_val" set -l IFS : echo "$fetch_val" | read -l trunk pattern - set upstream (/bin/sh -c 'echo "${1%/$2}"' -- $pattern $trunk)/$upstream + set upstream (echo $pattern | sed -e "s|/$trunk\$||") /$upstream end end else if test $upstream = svn+git @@ -291,17 +296,27 @@ function __fish_git_prompt_show_upstream --description "Helper function for __fi # calculate the result if test -n "$verbose" + # Verbose has a space by default + set -l prefix "$___fish_git_prompt_char_upstream_prefix" + # Using two underscore version to check if user explicitly set to nothing + if not set -q __fish_git_prompt_char_upstream_prefix + set -l prefix " " + end + echo $count | read -l behind ahead switch "$count" case '' # no upstream case "0 0" # equal to upstream - echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_equal" + echo "$prefix$___fish_git_prompt_char_upstream_equal" case "0 *" # ahead of upstream - echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_ahead$ahead" + echo "$prefix$___fish_git_prompt_char_upstream_ahead$ahead" case "* 0" # behind upstream - echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_behind$behind" + echo "$prefix$___fish_git_prompt_char_upstream_behind$behind" case '*' # diverged from upstream - echo "$___fish_git_prompt_char_upstream_prefix$___fish_git_prompt_char_upstream_diverged$ahead-$behind" + echo "$prefix$___fish_git_prompt_char_upstream_diverged$ahead-$behind" + end + if test -n "$count" -a -n "$name" + echo " "(command git rev-parse --abbrev-ref "$upstream" ^/dev/null) end else if test -n "$informative" echo $count | read -l behind ahead @@ -356,6 +371,7 @@ function __fish_git_prompt --description "Prompt function for Git" set -l informative_status __fish_git_prompt_validate_chars + __fish_git_prompt_validate_colors if test "true" = $inside_worktree if test -n "$__fish_git_prompt_show_informative_status" @@ -388,8 +404,6 @@ function __fish_git_prompt --description "Prompt function for Git" end end - __fish_git_prompt_validate_colors - set -l branch_color $___fish_git_prompt_color_branch set -l branch_done $___fish_git_prompt_color_branch_done if test -n "$__fish_git_prompt_showcolorhints" @@ -411,7 +425,7 @@ function __fish_git_prompt --description "Prompt function for Git" if test -n "$u" set u "$___fish_git_prompt_color_untrackedfiles$u$___fish_git_prompt_color_untrackedfiles_done" end - set b (/bin/sh -c 'echo "${1#refs/heads/}"' -- $b) + set b (echo $b | sed 's|refs/heads/||') if test -n "$b" set b "$branch_color$b$branch_done" end @@ -657,21 +671,12 @@ function __fish_git_prompt_set_color set default_done "$argv[3]" end - if test (count $user_variable) -eq 2 - set user_variable_bright $user_variable[2] - set user_variable $user_variable[1] - end - set -l variable _$user_variable_name set -l variable_done "$variable"_done if not set -q $variable if test -n "$user_variable" - if test -n "$user_variable_bright" - set -g $variable (set_color --bold $user_variable) - else - set -g $variable (set_color $user_variable) - end + set -g $variable (set_color $user_variable) set -g $variable_done (set_color normal) else set -g $variable $default diff --git a/share/functions/__fish_number_of_cmd_args_wo_opts.fish b/share/functions/__fish_number_of_cmd_args_wo_opts.fish new file mode 100644 index 000000000..83e3d2fa2 --- /dev/null +++ b/share/functions/__fish_number_of_cmd_args_wo_opts.fish @@ -0,0 +1,4 @@ +function __fish_number_of_cmd_args_wo_opts + count (__fish_print_cmd_args_without_options) +end + diff --git a/share/functions/__fish_print_cmd_args.fish b/share/functions/__fish_print_cmd_args.fish new file mode 100644 index 000000000..eaafe65a3 --- /dev/null +++ b/share/functions/__fish_print_cmd_args.fish @@ -0,0 +1,3 @@ +function __fish_print_cmd_args + commandline -poc +end diff --git a/share/functions/__fish_print_cmd_args_without_options.fish b/share/functions/__fish_print_cmd_args_without_options.fish new file mode 100644 index 000000000..dadabc2a8 --- /dev/null +++ b/share/functions/__fish_print_cmd_args_without_options.fish @@ -0,0 +1,3 @@ +function __fish_print_cmd_args_without_options + __fish_print_cmd_args | grep '^[^-]' +end diff --git a/share/functions/__fish_print_service_names.fish b/share/functions/__fish_print_service_names.fish new file mode 100644 index 000000000..3eeb00155 --- /dev/null +++ b/share/functions/__fish_print_service_names.fish @@ -0,0 +1,10 @@ +function __fish_print_service_names -d 'All services known to the system' + if type -f systemctl >/dev/null + command systemctl list-units -t service | cut -d ' ' -f 1 | grep '\.service$' | sed -e 's/\.service$//' + else if type -f rc-service + command rc-service -l + else + command ls /etc/init.d + end +end + diff --git a/share/functions/fish_default_key_bindings.fish b/share/functions/fish_default_key_bindings.fish index 44821f36c..a46d3f945 100644 --- a/share/functions/fish_default_key_bindings.fish +++ b/share/functions/fish_default_key_bindings.fish @@ -32,6 +32,12 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind \e\[H beginning-of-line bind \e\[F end-of-line + # for PuTTY + # https://github.com/fish-shell/fish-shell/issues/180 + bind \e\[1~ beginning-of-line + bind \e\[3~ delete-char + bind \e\[4~ end-of-line + # OS X SnowLeopard doesn't have these keys. Don't show an annoying error message. bind -k home beginning-of-line 2> /dev/null bind -k end end-of-line 2> /dev/null @@ -79,8 +85,8 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind \ef forward-word bind \e\[1\;5C forward-word bind \e\[1\;5D backward-word - bind \e\[1\;9A history-token-search-backward # iTerm2 - bind \e\[1\;9B history-token-search-forward # iTerm2 + bind \e\[1\;9A history-token-search-backward # iTerm2 + bind \e\[1\;9B history-token-search-forward # iTerm2 bind \e\[1\;9C forward-word #iTerm2 bind \e\[1\;9D backward-word #iTerm2 bind \ed forward-kill-word @@ -99,6 +105,9 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind \ed 'set -l cmd (commandline); if test -z "$cmd"; echo; dirh; commandline -f repaint; else; commandline -f kill-word; end' bind \cd delete-or-exit + # Allow reading manpages by pressing F1 + bind -k f1 'man (basename (commandline -po; echo))[1] ^/dev/null; or echo -n \a' + # This will make sure the output of the current command is paged using the less pager when you press Meta-p bind \ep '__fish_paginate' diff --git a/share/functions/type.fish b/share/functions/type.fish index 6eb1a66f4..4a4c77031 100644 --- a/share/functions/type.fish +++ b/share/functions/type.fish @@ -117,22 +117,29 @@ function type --description "Print the type of a command" end - set -l path (which $i ^/dev/null) - if test -x (echo $path) - set res 0 - set found 1 - switch $mode - case normal - printf (_ '%s is %s\n') $i $path + set -l paths + if test $selection != multi + set paths (which $i ^/dev/null) + else + set paths (which -a $i ^/dev/null) + end + for path in $paths + if test -x (echo $path) + set res 0 + set found 1 + switch $mode + case normal + printf (_ '%s is %s\n') $i $path case type echo (_ 'file') case path echo $path - end - if test $selection != multi - continue + end + if test $selection != multi + continue + end end end diff --git a/share/tools/create_manpage_completions.py b/share/tools/create_manpage_completions.py index dc67f4c86..7b1879dd0 100755 --- a/share/tools/create_manpage_completions.py +++ b/share/tools/create_manpage_completions.py @@ -17,9 +17,18 @@ Redistributions in binary form must reproduce the above copyright notice, this l 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 COPYRIGHT HOLDER 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. """ -import string, sys, re, os.path, gzip, traceback, getopt, errno, codecs +import string, sys, re, os.path, bz2, gzip, traceback, getopt, errno, codecs from deroff import Deroffer +lzma_available = True +try: + try: + import lzma + except ImportError: + from backports import lzma +except ImportError: + lzma_available = False + # Whether we're Python 3 IS_PY3 = sys.version_info[0] >= 3 @@ -717,6 +726,16 @@ def parse_manpage_at_path(manpage_path, output_directory): fd = gzip.open(manpage_path, 'r') manpage = fd.read() if IS_PY3: manpage = manpage.decode('latin-1') + elif manpage_path.endswith('.bz2'): + fd = bz2.BZ2File(manpage_path, 'r') + manpage = fd.read() + if IS_PY3: manpage = manpage.decode('latin-1') + elif manpage_path.endswith('.xz') or manpage_path.endswith('.lzma'): + if not lzma_available: + return + fd = lzma.LZMAFile(str(manpage_path), 'r') + manpage = fd.read() + if IS_PY3: manpage = manpage.decode('latin-1') else: if IS_PY3: fd = open(manpage_path, 'r', encoding='latin-1') @@ -816,6 +835,15 @@ def parse_and_output_man_pages(paths, output_directory, show_progress): last_progress_string_length = 0 if show_progress and not WRITE_TO_STDOUT: print("Parsing man pages and writing completions to {0}".format(output_directory)) + + man_page_suffixes = set([os.path.splitext(m)[1][1:] for m in paths]) + lzma_xz_occurs = "xz" in man_page_suffixes or "lzma" in man_page_suffixes + if lzma_xz_occurs and not lzma_available: + add_diagnostic('At least one man page is compressed with lzma or xz, but the "lzma" module is not available.' + ' Any man page compressed with either will be skipped.', + NOT_VERBOSE) + flush_diagnostics(sys.stderr) + for manpage_path in paths: index += 1 diff --git a/share/tools/web_config/sample_prompts/informative_git.fish b/share/tools/web_config/sample_prompts/informative_git.fish index 466b40515..5ac277672 100644 --- a/share/tools/web_config/sample_prompts/informative_git.fish +++ b/share/tools/web_config/sample_prompts/informative_git.fish @@ -4,7 +4,7 @@ set -g __fish_git_prompt_show_informative_status 1 set -g __fish_git_prompt_hide_untrackedfiles 1 -set -g __fish_git_prompt_color_branch magenta bold +set -g __fish_git_prompt_color_branch magenta --bold set -g __fish_git_prompt_showupstream "informative" set -g __fish_git_prompt_char_upstream_ahead "↑" set -g __fish_git_prompt_char_upstream_behind "↓" @@ -20,7 +20,7 @@ set -g __fish_git_prompt_color_dirtystate blue set -g __fish_git_prompt_color_stagedstate yellow set -g __fish_git_prompt_color_invalidstate red set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal -set -g __fish_git_prompt_color_cleanstate green bold +set -g __fish_git_prompt_color_cleanstate green --bold function fish_prompt --description 'Write out the prompt' diff --git a/share/tools/web_config/webconfig.py b/share/tools/web_config/webconfig.py index 22b9069a6..889ae21e8 100755 --- a/share/tools/web_config/webconfig.py +++ b/share/tools/web_config/webconfig.py @@ -15,9 +15,15 @@ else: import http.server as SimpleHTTPServer import socketserver as SocketServer from urllib.parse import parse_qs + +# Disable CLI web browsers +term = os.environ.pop('TERM', None) import webbrowser +if term: + os.environ['TERM'] = term + import subprocess -import re, socket, os, sys, cgi, select, time, glob +import re, socket, cgi, select, time, glob try: import json except ImportError: diff --git a/tokenizer.cpp b/tokenizer.cpp index 567b03dcd..90c8b703f 100644 --- a/tokenizer.cpp +++ b/tokenizer.cpp @@ -647,20 +647,20 @@ enum token_type tok_peek_next(tokenizer_t *tok, wcstring *out_next_string) { out_next_string->clear(); } - + enum token_type result = TOK_END; if (tok_has_next(tok)) { int saved = tok_get_pos(tok); tok_next(tok); result = tok_last_type(tok); - + if (out_next_string != NULL) { const wchar_t *last = tok_last(tok); out_next_string->assign(last ? last : L""); } - + tok_set_pos(tok, saved); } return result; diff --git a/wildcard.cpp b/wildcard.cpp index 621ece72e..2b93561b5 100644 --- a/wildcard.cpp +++ b/wildcard.cpp @@ -317,7 +317,7 @@ static bool wildcard_complete_internal(const wcstring &orig, if (wildcard_complete_internal(orig, str + i, wc+1, false, desc, desc_func, out, expand_flags, flags)) { res = true; - + /* #929: if the recursive call gives us a prefix match, just stop. This is sloppy - what we really want to do is say, once we've seen a match of a particular type, ignore all matches of that type further down the string, such that the wildcard produces the "minimal match." */ bool has_prefix_match = false; const size_t after_count = out.size(); diff --git a/xdgmimemagic.cpp b/xdgmimemagic.cpp index 3f67b2906..8bcca9488 100644 --- a/xdgmimemagic.cpp +++ b/xdgmimemagic.cpp @@ -276,7 +276,10 @@ _xdg_mime_magic_parse_header(FILE *magic_file, XdgMimeMagicMatch *match) buffer = _xdg_mime_magic_read_to_newline(magic_file, &end_of_file); if (end_of_file) + { + free(buffer); return XDG_MIME_MAGIC_EOF; + } end_ptr = buffer; while (*end_ptr != ']' && *end_ptr != '\000' && *end_ptr != '\n')