From 76ecf897ceace2fa83f83acdde9a5ec89139dcc6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 1 Dec 2013 15:11:25 -0800 Subject: [PATCH 001/145] First round of changes to migrate pager inside fish, in preparation for presenting completions underneath. --- fish.xcodeproj/project.pbxproj | 6 + pager.cpp | 1140 ++++++++++++++++++++++++++++++++ pager.h | 0 3 files changed, 1146 insertions(+) create mode 100644 pager.cpp create mode 100644 pager.h diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index adb43ad0b..a69bb526e 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -62,6 +62,7 @@ D01A2D24169B736200767098 /* man1 in Copy Files */ = {isa = PBXBuildFile; fileRef = D01A2D23169B730A00767098 /* man1 */; }; D01A2D25169B737700767098 /* man1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = D01A2D23169B730A00767098 /* man1 */; }; D031890C15E36E4600D9CC39 /* base in Resources */ = {isa = PBXBuildFile; fileRef = D031890915E36D9800D9CC39 /* base */; }; + D032388B1849D1980032CF2C /* pager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D03238891849D1980032CF2C /* pager.cpp */; }; D033781115DC6D4C00A634BA /* completions in CopyFiles */ = {isa = PBXBuildFile; fileRef = D025C02715D1FEA100B9DB63 /* completions */; }; D033781215DC6D5200A634BA /* functions in CopyFiles */ = {isa = PBXBuildFile; fileRef = D025C02815D1FEA100B9DB63 /* functions */; }; D033781315DC6D5400A634BA /* tools in CopyFiles */ = {isa = PBXBuildFile; fileRef = D025C02915D1FEA100B9DB63 /* tools */; }; @@ -333,6 +334,8 @@ D025C02815D1FEA100B9DB63 /* functions */ = {isa = PBXFileReference; lastKnownFileType = folder; name = functions; path = share/functions; sourceTree = ""; }; D025C02915D1FEA100B9DB63 /* tools */ = {isa = PBXFileReference; lastKnownFileType = folder; name = tools; path = share/tools; sourceTree = ""; }; D031890915E36D9800D9CC39 /* base */ = {isa = PBXFileReference; lastKnownFileType = text; path = base; sourceTree = BUILT_PRODUCTS_DIR; }; + D03238891849D1980032CF2C /* pager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pager.cpp; sourceTree = ""; }; + D032388A1849D1980032CF2C /* pager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pager.h; sourceTree = ""; }; D03EE83814DF88B200FC7150 /* lru.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lru.h; sourceTree = ""; }; D07B247215BCC15700D4ADB4 /* add-shell */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = "add-shell"; path = "build_tools/osx_package_scripts/add-shell"; sourceTree = ""; }; D07B247515BCC4BE00D4ADB4 /* install.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = install.sh; path = osx/install.sh; sourceTree = ""; }; @@ -613,6 +616,8 @@ D0A0855013B3ACEE0099B651 /* mimedb.cpp */, D0A0851A13B3ACEE0099B651 /* output.h */, D0A0855113B3ACEE0099B651 /* output.cpp */, + D032388A1849D1980032CF2C /* pager.h */, + D03238891849D1980032CF2C /* pager.cpp */, D0A0851B13B3ACEE0099B651 /* parse_util.h */, D0A0855213B3ACEE0099B651 /* parse_util.cpp */, D0A0851C13B3ACEE0099B651 /* parser_keywords.h */, @@ -1078,6 +1083,7 @@ D0D02A86159839D5008E62BD /* postfork.cpp in Sources */, D0D02A87159839D5008E62BD /* screen.cpp in Sources */, D0D02A88159839D5008E62BD /* signal.cpp in Sources */, + D032388B1849D1980032CF2C /* pager.cpp in Sources */, D0D2694A15983779005D9B9C /* builtin.cpp in Sources */, D0D2694915983772005D9B9C /* function.cpp in Sources */, D0D02A67159837AD008E62BD /* complete.cpp in Sources */, diff --git a/pager.cpp b/pager.cpp new file mode 100644 index 000000000..62e2b1bb2 --- /dev/null +++ b/pager.cpp @@ -0,0 +1,1140 @@ +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#include +#include +#include +#include + +#include + +#if HAVE_NCURSES_H +#include +#else +#include +#endif + +#if HAVE_TERM_H +#include +#elif HAVE_NCURSES_TERM_H +#include +#endif + +#include + +#ifdef HAVE_GETOPT_H +#include +#endif + +#include +#include + +#include "fallback.h" +#include "util.h" + +#include "wutil.h" +#include "common.h" +#include "complete.h" +#include "output.h" +#include "input_common.h" +#include "env_universal.h" +#include "print_help.h" + +struct comp_t; +typedef std::vector completion_list_t; +typedef std::vector comp_info_list_t; + +enum +{ + LINE_UP = R_NULL+1, + LINE_DOWN, + PAGE_UP, + PAGE_DOWN +} +; + + +enum +{ + HIGHLIGHT_PAGER_PREFIX, + HIGHLIGHT_PAGER_COMPLETION, + HIGHLIGHT_PAGER_DESCRIPTION, + HIGHLIGHT_PAGER_PROGRESS, + HIGHLIGHT_PAGER_SECONDARY +} +; + +enum +{ + /* + Returnd by the pager if no more displaying is needed + */ + PAGER_DONE, + /* + Returned by the pager if the completions would not fit in the specified number of columns + */ + PAGER_RETRY, + /* + Returned by the pager if the terminal changes size + */ + PAGER_RESIZE +} +; + +/** + The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions +*/ +#define PAGER_MIN_WIDTH 16 + +/** + The maximum number of columns of completion to attempt to fit onto the screen +*/ +#define PAGER_MAX_COLS 6 + +/** + The string describing the single-character options accepted by fish_pager +*/ +#define GETOPT_STRING "c:hr:qvp:" + +/** + Error to use when given an invalid file descriptor for reading completions or writing output +*/ +#define ERR_NOT_FD _( L"%ls: Argument '%s' is not a valid file descriptor\n" ) + +/** + This struct should be continually updated by signals as the term + resizes, and as such always contain the correct current size. +*/ +static struct winsize termsize; + +/** + The termios modes the terminal had when the program started. These + should be restored on exit +*/ +static struct termios saved_modes; + +/** + This flag is set to 1 of we have sent the enter_ca_mode terminfo + sequence to save the previous terminal contents. +*/ +static int is_ca_mode = 0; + +/** + This buffer is used to buffer the output of the pager to improve + screen redraw performance bu cutting down the number of write() + calls to only one. +*/ +static std::vector pager_buffer; + +/** + The environment variables used to specify the color of different + tokens. +*/ +static const wchar_t *hightlight_var[] = +{ + L"fish_pager_color_prefix", + L"fish_pager_color_completion", + L"fish_pager_color_description", + L"fish_pager_color_progress", + L"fish_pager_color_secondary" +} +; + +/** + This string contains the text that should be sent back to the calling program +*/ +static wcstring out_buff; +/** + This is the file to which the output text should be sent. It is really a pipe. +*/ +static FILE *out_file; + +/** + Data structure describing one or a group of related completions +*/ +struct comp_t +{ + /** + The list of all completin strings this entry applies to + */ + wcstring_list_t comp; + /** + The description + */ + wcstring desc; + /** + On-screen width of the completion string + */ + int comp_width; + /** + On-screen width of the description information + */ + int desc_width; + /** + Preffered total width + */ + int pref_width; + /** + Minimum acceptable width + */ + int min_width; + + comp_t() : comp(), desc(), comp_width(0), desc_width(0), pref_width(0), min_width(0) + { + } +}; + +/** + This function translates from a highlight code to a specific color + by check invironement variables +*/ +static rgb_color_t get_color(int highlight) +{ + const wchar_t *val; + + if (highlight < 0) + return rgb_color_t::normal(); + if (highlight >= (5)) + return rgb_color_t::normal(); + + val = wgetenv(hightlight_var[highlight]); + + if (!val) + { + val = env_universal_get(hightlight_var[highlight]); + } + + if (!val) + { + return rgb_color_t::normal(); + } + + return parse_color(val, false); +} + +/** + This function calculates the minimum width for each completion + entry in the specified array_list. This width depends on the + terminal size, so this function should be called when the terminal + changes size. +*/ +static void recalc_min_widths(std::vector *lst) +{ + for (size_t i=0; isize(); i++) + { + comp_t *c = &lst->at(i); + + c->min_width = mini(c->desc_width, maxi(0,termsize.ws_col/3 - 2)) + + mini(c->desc_width, maxi(0,termsize.ws_col/5 - 4)) +4; + } + +} + +/** + Test if the specified character sequence has been entered on the + keyboard +*/ +static int try_sequence(const char *seq) +{ + int j, k; + wint_t c=0; + + for (j=0; + seq[j] != '\0' && seq[j] == (c=input_common_readch(j>0)); + j++) + ; + + if (seq[j] == '\0') + { + return 1; + } + else + { + input_common_unreadch(c); + for (k=j-1; k>=0; k--) + input_common_unreadch(seq[k]); + } + return 0; +} + +/** + Read a character from keyboard +*/ +static wint_t readch() +{ + struct mapping + { + const char *seq; + wint_t bnd; + } + ; + + struct mapping m[]= + { + { + "\x1b[A", LINE_UP + } + , + { + key_up, LINE_UP + } + , + { + "\x1b[B", LINE_DOWN + } + , + { + key_down, LINE_DOWN + } + , + { + key_ppage, PAGE_UP + } + , + { + key_npage, PAGE_DOWN + } + , + { + " ", PAGE_DOWN + } + , + { + "\t", PAGE_DOWN + } + , + { + 0, 0 + } + + } + ; + int i; + + for (i=0; m[i].bnd; i++) + { + if (!m[i].seq) + { + continue; + } + + if (try_sequence(m[i].seq)) + return m[i].bnd; + } + return input_common_readch(0); +} + +/** + Write specified character to the output buffer \c pager_buffer +*/ +static int pager_buffered_writer(char c) +{ + pager_buffer.push_back(c); + return 0; +} + +/** + Flush \c pager_buffer to stdout +*/ +static void pager_flush() +{ + if (! pager_buffer.empty()) + { + write_loop(1, & pager_buffer.at(0), pager_buffer.size() * sizeof(char)); + pager_buffer.clear(); + } +} + +/** + Print the specified string, but use at most the specified amount of + space. If the whole string can't be fitted, ellipsize it. + + \param str the string to print + \param max the maximum space that may be used for printing + \param has_more if this flag is true, this is not the entire string, and the string should be ellisiszed even if the string fits but takes up the whole space. +*/ +static int print_max(const wcstring &str, int max, int has_more) +{ + int written = 0; + for (size_t i=0; i < str.size(); i++) + { + wchar_t c = str.at(i); + + if (written + wcwidth(c) > max) + break; + if ((written + wcwidth(c) == max) && (has_more || i + 1 < str.size())) + { + writech(ellipsis_char); + written += wcwidth(ellipsis_char); + break; + } + + writech(c); + written+= wcwidth(c); + } + return written; +} + +/** + Print the specified item using at the specified amount of space +*/ +static void completion_print_item(const wcstring &prefix, const comp_t *c, int width, bool secondary) +{ + int comp_width=0, desc_width=0; + int written=0; + + if (c->pref_width <= width) + { + /* + The entry fits, we give it as much space as it wants + */ + comp_width = c->comp_width; + desc_width = c->desc_width; + } + else + { + /* + The completion and description won't fit on the + allocated space. Give a maximum of 2/3 of the + space to the completion, and whatever is left to + the description. + */ + int desc_all = c->desc_width?c->desc_width+4:0; + + comp_width = maxi(mini(c->comp_width, 2*(width-4)/3), width - desc_all); + if (c->desc_width) + desc_width = width-comp_width-4; + + } + + rgb_color_t bg = secondary ? get_color(HIGHLIGHT_PAGER_SECONDARY) : rgb_color_t::normal(); + for (size_t i=0; icomp.size(); i++) + { + const wcstring &comp = c->comp.at(i); + if (i != 0) + written += print_max(L" ", comp_width - written, 2); + set_color(get_color(HIGHLIGHT_PAGER_PREFIX), bg); + written += print_max(prefix, comp_width - written, comp.empty()?0:1); + set_color(get_color(HIGHLIGHT_PAGER_COMPLETION), bg); + written += print_max(comp.c_str(), comp_width - written, i!=(c->comp.size()-1)); + } + + + if (desc_width) + { + while (written < (width-desc_width-2)) + { + written++; + writech(L' '); + } + set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg); + written += print_max(L"(", 1, 0); + written += print_max(c->desc.c_str(), desc_width, 0); + written += print_max(L")", 1, 0); + } + else + { + while (written < width) + { + written++; + writech(L' '); + } + } + if (secondary) + set_color(rgb_color_t::normal(), rgb_color_t::normal()); +} + +/** + Print the specified part of the completion list, using the + specified column offsets and quoting style. + + \param l The list of completions to print + \param cols number of columns to print in + \param width An array specifying the width of each column + \param row_start The first row to print + \param row_stop the row after the last row to print + \param prefix The string to print before each completion +*/ + +static void completion_print(int cols, + int *width, + int row_start, + int row_stop, + const wcstring &prefix, + const std::vector &lst) +{ + + size_t rows = (lst.size()-1)/cols+1; + size_t i, j; + + for (i = row_start; i &lst) +{ + /* + The calculated preferred width of each column + */ + int pref_width[PAGER_MAX_COLS] = {0}; + /* + The calculated minimum width of each column + */ + int min_width[PAGER_MAX_COLS] = {0}; + /* + If the list can be printed with this width, width will contain the width of each column + */ + int *width=pref_width; + /* + Set to one if the list should be printed at this width + */ + int print=0; + + long i, j; + + int rows = (int)((lst.size()-1)/cols+1); + + int pref_tot_width=0; + int min_tot_width = 0; + int res=PAGER_RETRY; + /* + Skip completions on tiny terminals + */ + + if (termsize.ws_col < PAGER_MIN_WIDTH) + return PAGER_DONE; + + /* Calculate how wide the list would be */ + for (j = 0; j < cols; j++) + { + for (i = 0; ipref_width; + min = c->min_width; + + if (j != cols-1) + { + pref += 2; + min += 2; + } + min_width[j] = maxi(min_width[j], + min); + pref_width[j] = maxi(pref_width[j], + pref); + } + min_tot_width += min_width[j]; + pref_tot_width += pref_width[j]; + } + /* + Force fit if one column + */ + if (cols == 1) + { + if (pref_tot_width > termsize.ws_col) + { + pref_width[0] = termsize.ws_col; + } + width = pref_width; + print=1; + } + else if (pref_tot_width <= termsize.ws_col) + { + /* Terminal is wide enough. Print the list! */ + width = pref_width; + print=1; + } + else + { + long next_rows = (lst.size()-1)/(cols-1)+1; + /* fwprintf( stderr, + L"cols %d, min_tot %d, term %d, rows=%d, nextrows %d, termrows %d, diff %d\n", + cols, + min_tot_width, termsize.ws_col, + rows, next_rows, termsize.ws_row, + pref_tot_width-termsize.ws_col ); + */ + if (min_tot_width < termsize.ws_col && + (((rows < termsize.ws_row) && (next_rows >= termsize.ws_row)) || + (pref_tot_width-termsize.ws_col< 4 && cols < 3))) + { + /* + Terminal almost wide enough, or squeezing makes the + whole list fit on-screen. + + This part of the code is really important. People hate + having to scroll through the completion list. In cases + where there are a huge number of completions, it can't + be helped, but it is not uncommon for the completions to + _almost_ fit on one screen. In those cases, it is almost + always desirable to 'squeeze' the completions into a + single page. + + If we are using N columns and can get everything to + fit using squeezing, but everything would also fit + using N-1 columns, don't try. + */ + + int tot_width = min_tot_width; + width = min_width; + + while (tot_width < termsize.ws_col) + { + for (i=0; (i 0) + { + pos--; + writembs(tparm(cursor_address, 0, 0)); + writembs(scroll_reverse); + completion_print(cols, + width, + pos, + pos+1, + prefix, + lst); + writembs(tparm(cursor_address, + termsize.ws_row-1, 0)); + writembs(clr_eol); + + } + + break; + } + + case LINE_DOWN: + { + if (pos <= (rows - termsize.ws_row)) + { + pos++; + completion_print(cols, + width, + pos+termsize.ws_row-2, + pos+termsize.ws_row-1, + prefix, + lst); + } + break; + } + + case PAGE_DOWN: + { + + npos = mini((int)(rows - termsize.ws_row+1), (int)(pos + termsize.ws_row-1)); + if (npos != pos) + { + pos = npos; + completion_print(cols, + width, + pos, + pos+termsize.ws_row-1, + prefix, + lst); + } + else + { + if (flash_screen) + writembs(flash_screen); + } + + break; + } + + case PAGE_UP: + { + npos = maxi(0, + pos - termsize.ws_row+1); + + if (npos != pos) + { + pos = npos; + completion_print(cols, + width, + pos, + pos+termsize.ws_row-1, + prefix, + lst); + } + else + { + if (flash_screen) + writembs(flash_screen); + } + break; + } + + case R_NULL: + { + do_loop=0; + res=PAGER_RESIZE; + break; + + } + + default: + { + out_buff.push_back(c); + do_loop = 0; + break; + } + } + } + writembs(clr_eol); + } + } + return res; +} + +/* Trim leading and trailing whitespace, and compress other whitespace runs into a single space. */ +static void mangle_1_completion_description(wcstring *str) +{ + size_t leading = 0, trailing = 0, len = str->size(); + + // Skip leading spaces + for (; leading < len; leading++) + { + if (! iswspace(str->at(leading))) + break; + } + + // Compress runs of spaces to a single space + bool was_space = false; + for (; leading < len; leading++) + { + wchar_t wc = str->at(leading); + bool is_space = iswspace(wc); + if (! is_space) + { + // normal character + str->at(trailing++) = wc; + } + else if (! was_space) + { + // initial space in a run + str->at(trailing++) = L' '; + } + else + { + // non-initial space in a run, do nothing + } + was_space = is_space; + } + + // leading is now at len, trailing is the new length of the string + // Delete trailing spaces + while (trailing > 0 && iswspace(str->at(trailing - 1))) + { + trailing--; + } + + str->resize(trailing); +} + +static void join_completions(comp_info_list_t *comps) +{ + // A map from description to index in the completion list of the element with that description + // The indexes are stored +1 + std::map desc_table; + + // note that we mutate the completion list as we go, so the size changes + for (size_t i=0; i < comps->size(); i++) + { + const comp_t &new_comp = comps->at(i); + const wcstring &desc = new_comp.desc; + if (desc.empty()) + continue; + + // See if it's in the table + size_t prev_idx_plus_one = desc_table[desc]; + if (prev_idx_plus_one == 0) + { + // We're the first with this description + desc_table[desc] = i+1; + } + else + { + // There's a prior completion with this description. Append the new ones to it. + comp_t *prior_comp = &comps->at(prev_idx_plus_one - 1); + prior_comp->comp.insert(prior_comp->comp.end(), new_comp.comp.begin(), new_comp.comp.end()); + + // Erase the element at this index, and decrement the index to reflect that fact + comps->erase(comps->begin() + i); + i -= 1; + } + } +} + +/** Generate a list of comp_t structures from a list of completions */ +static std::vector process_completions_into_infos(const completion_list_t &lst, const wcstring &prefix) +{ + const size_t lst_size = lst.size(); + + // Make the list of the correct size up-front + std::vector result(lst_size); + for (size_t i=0; icomp.push_back(escape_string(comp.completion, ESCAPE_ALL | ESCAPE_NO_QUOTED)); + + // Append the mangled description + comp_info->desc = comp.description; + mangle_1_completion_description(&comp_info->desc); + } + return result; +} + +static void measure_completion_infos(std::vector *infos, const wcstring &prefix) +{ + size_t prefix_len = my_wcswidth(prefix.c_str()); + for (size_t i=0; i < infos->size(); i++) + { + comp_t *comp = &infos->at(i); + + // Compute comp_width + const wcstring_list_t &comp_strings = comp->comp; + for (size_t j=0; j < comp_strings.size(); j++) + { + // If there's more than one, append the length of ', ' + if (j >= 1) + comp->comp_width += 2; + + comp->comp_width += prefix_len + my_wcswidth(comp_strings.at(j).c_str()); + } + + // Compute desc_width + comp->desc_width = my_wcswidth(comp->desc.c_str()); + + // Compute preferred width + comp->pref_width = comp->comp_width + comp->desc_width + (comp->desc_width?4:0); + } + + recalc_min_widths(infos); +} + +/** + Respond to a winch signal by checking the terminal size +*/ +static void handle_winch(int sig) +{ + if (ioctl(1,TIOCGWINSZ,&termsize)!=0) + { + return; + } +} + +/** + The callback function that the keyboard reading function calls when + an interrupt occurs. This makes sure that R_NULL is returned at + once when an interrupt has occured. +*/ +static int interrupt_handler() +{ + return R_NULL; +} + +/** + Initialize various subsystems. This also closes stdin and replaces + it with a copy of stderr, so the reading of completion strings must + be done before init is called. +*/ +static void init(int mangle_descriptors, int out) +{ + struct sigaction act; + + static struct termios pager_modes; + char *term; + + if (mangle_descriptors) + { + + /* + Make fd 1 output to screen, and use some other fd for writing + the resulting output back to the caller + */ + int in; + out = dup(1); + close(1); + close(0); + + /* OK to not use CLO_EXEC here because fish_pager is single threaded */ + if ((in = open(ttyname(2), O_RDWR)) != -1) + { + if (dup2(2, 1) == -1) + { + debug(0, _(L"Could not set up output file descriptors for pager")); + exit(1); + } + + if (dup2(in, 0) == -1) + { + debug(0, _(L"Could not set up input file descriptors for pager")); + exit(1); + } + } + else + { + debug(0, _(L"Could not open tty for pager")); + exit(1); + } + } + + if (!(out_file = fdopen(out, "w"))) + { + debug(0, _(L"Could not initialize result pipe")); + exit(1); + } + + + env_universal_init(0, 0, 0, 0); + input_common_init(&interrupt_handler); + output_set_writer(&pager_buffered_writer); + + sigemptyset(& act.sa_mask); + act.sa_flags=0; + act.sa_handler=SIG_DFL; + act.sa_flags = 0; + act.sa_handler= &handle_winch; + if (sigaction(SIGWINCH, &act, 0)) + { + wperror(L"sigaction"); + exit(1); + } + + handle_winch(0); /* Set handler for window change events */ + + tcgetattr(0,&pager_modes); /* get the current terminal modes */ + memcpy(&saved_modes, + &pager_modes, + sizeof(saved_modes)); /* save a copy so we can reset the terminal later */ + + pager_modes.c_lflag &= ~ICANON; /* turn off canonical mode */ + pager_modes.c_lflag &= ~ECHO; /* turn off echo mode */ + pager_modes.c_cc[VMIN]=1; + pager_modes.c_cc[VTIME]=0; + + /* + + */ + if (tcsetattr(0,TCSANOW,&pager_modes)) /* set the new modes */ + { + wperror(L"tcsetattr"); + exit(1); + } + + int errret; + if (setupterm(0, STDOUT_FILENO, &errret) == ERR) + { + debug(0, _(L"Could not set up terminal")); + exit(1); + } + + term = getenv("TERM"); + if (term) + { + wcstring wterm = str2wcstring(term); + output_set_term(wterm); + } + + /* Infer term256 support */ + char *fish_term256 = getenv("fish_term256"); + bool support_term256; + if (fish_term256) + { + support_term256 = from_string(fish_term256); + } + else + { + support_term256 = term && strstr(term, "256color"); + } + output_set_supports_term256(support_term256); +} + + +void run_pager(const completion_list_t &raw_completions, const wcstring &prefix) +{ + // Save old output function so we can restore it + int (* const saved_writer_func)(char) = output_get_writer(); + output_set_writer(&pager_buffered_writer); + + // Get completion infos out of it + std::vector completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); + + // Maybe join them + if (prefix == L"-") + join_completions(&completion_infos); + + // Compute their various widths + measure_completion_infos(&completion_infos, prefix); + + /** + Try to print the completions. Start by trying to print the + list in PAGER_MAX_COLS columns, if the completions won't + fit, reduce the number of columns by one. Printing a single + column never fails. + */ + for (int i = PAGER_MAX_COLS; i>0; i--) + { + switch (completion_try_print(i, prefix, completion_infos)) + { + + case PAGER_RETRY: + break; + + case PAGER_DONE: + i=0; + break; + + case PAGER_RESIZE: + /* + This means we got a resize event, so we start + over from the beginning. Since it the screen got + bigger, we might be able to fit all completions + on-screen. + */ + i=PAGER_MAX_COLS+1; + break; + + } + } + + fwprintf(out_file, L"%ls", out_buff.c_str()); + if (is_ca_mode) + { + writembs(exit_ca_mode); + pager_flush(); + is_ca_mode = 0; + } + + // Restore saved writer function + pager_buffer.clear(); + output_set_writer(saved_writer_func); +} + + diff --git a/pager.h b/pager.h new file mode 100644 index 000000000..e69de29bb From ef4465efdb07c27d4da3482e8ffc99c2a6ed18d4 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 7 Dec 2013 12:43:40 -0800 Subject: [PATCH 002/145] More work on builtin pager --- fish.xcodeproj/project.pbxproj | 2 +- pager.cpp | 2 ++ pager.h | 15 +++++++++++++++ screen.h | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index a69bb526e..81de12554 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -1083,7 +1083,6 @@ D0D02A86159839D5008E62BD /* postfork.cpp in Sources */, D0D02A87159839D5008E62BD /* screen.cpp in Sources */, D0D02A88159839D5008E62BD /* signal.cpp in Sources */, - D032388B1849D1980032CF2C /* pager.cpp in Sources */, D0D2694A15983779005D9B9C /* builtin.cpp in Sources */, D0D2694915983772005D9B9C /* function.cpp in Sources */, D0D02A67159837AD008E62BD /* complete.cpp in Sources */, @@ -1107,6 +1106,7 @@ D0D02A7915983888008E62BD /* intern.cpp in Sources */, D0D02A7A15983916008E62BD /* env_universal.cpp in Sources */, D0D02A7B15983928008E62BD /* env_universal_common.cpp in Sources */, + D032388B1849D1980032CF2C /* pager.cpp in Sources */, D0D02A89159839DF008E62BD /* fish.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/pager.cpp b/pager.cpp index 62e2b1bb2..646975ed0 100644 --- a/pager.cpp +++ b/pager.cpp @@ -1,5 +1,7 @@ #include "config.h" +#include "pager.h" + #include #include #include diff --git a/pager.h b/pager.h index e69de29bb..218f0530a 100644 --- a/pager.h +++ b/pager.h @@ -0,0 +1,15 @@ +/** \file pager.h + Pager support +*/ + +#include "complete.h" +#include "screen.h" + +/* Represents rendering from the pager */ +class page_rendering_t +{ + screen_data_t screen_data; +}; + +typedef std::vector completion_list_t; +page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix); diff --git a/screen.h b/screen.h index ef74383d7..d3676a0be 100644 --- a/screen.h +++ b/screen.h @@ -13,6 +13,7 @@ #define FISH_SCREEN_H #include +#include /** A class representing a single line of a screen. From 899dafb33fec62ed9258f2b65e2330a2cd483ab5 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 13 Jan 2014 16:41:22 -0800 Subject: [PATCH 003/145] Migrating new pager implementation into a class. Further work on constructing a screen_data_t from it. --- pager.cpp | 935 ++++++++++++++++++++++-------------------------------- pager.h | 57 +++- screen.h | 6 + 3 files changed, 441 insertions(+), 557 deletions(-) diff --git a/pager.cpp b/pager.cpp index 646975ed0..fefe604ab 100644 --- a/pager.cpp +++ b/pager.cpp @@ -1,6 +1,7 @@ #include "config.h" #include "pager.h" +#include "highlight.h" #include #include @@ -57,7 +58,7 @@ #include "env_universal.h" #include "print_help.h" -struct comp_t; +typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; typedef std::vector comp_info_list_t; @@ -118,24 +119,6 @@ enum */ #define ERR_NOT_FD _( L"%ls: Argument '%s' is not a valid file descriptor\n" ) -/** - This struct should be continually updated by signals as the term - resizes, and as such always contain the correct current size. -*/ -static struct winsize termsize; - -/** - The termios modes the terminal had when the program started. These - should be restored on exit -*/ -static struct termios saved_modes; - -/** - This flag is set to 1 of we have sent the enter_ca_mode terminfo - sequence to save the previous terminal contents. -*/ -static int is_ca_mode = 0; - /** This buffer is used to buffer the output of the pager to improve screen redraw performance bu cutting down the number of write() @@ -161,45 +144,7 @@ static const wchar_t *hightlight_var[] = This string contains the text that should be sent back to the calling program */ static wcstring out_buff; -/** - This is the file to which the output text should be sent. It is really a pipe. -*/ -static FILE *out_file; -/** - Data structure describing one or a group of related completions -*/ -struct comp_t -{ - /** - The list of all completin strings this entry applies to - */ - wcstring_list_t comp; - /** - The description - */ - wcstring desc; - /** - On-screen width of the completion string - */ - int comp_width; - /** - On-screen width of the description information - */ - int desc_width; - /** - Preffered total width - */ - int pref_width; - /** - Minimum acceptable width - */ - int min_width; - - comp_t() : comp(), desc(), comp_width(0), desc_width(0), pref_width(0), min_width(0) - { - } -}; /** This function translates from a highlight code to a specific color @@ -235,14 +180,14 @@ static rgb_color_t get_color(int highlight) terminal size, so this function should be called when the terminal changes size. */ -static void recalc_min_widths(std::vector *lst) +void pager_t::recalc_min_widths(comp_info_list_t * lst) const { for (size_t i=0; isize(); i++) { comp_t *c = &lst->at(i); - c->min_width = mini(c->desc_width, maxi(0,termsize.ws_col/3 - 2)) + - mini(c->desc_width, maxi(0,termsize.ws_col/5 - 4)) +4; + c->min_width = mini(c->desc_width, maxi(0, term_width/3 - 2)) + + mini(c->desc_width, maxi(0, term_width/5 - 4)) +4; } } @@ -350,18 +295,6 @@ static int pager_buffered_writer(char c) return 0; } -/** - Flush \c pager_buffer to stdout -*/ -static void pager_flush() -{ - if (! pager_buffer.empty()) - { - write_loop(1, & pager_buffer.at(0), pager_buffer.size() * sizeof(char)); - pager_buffer.clear(); - } -} - /** Print the specified string, but use at most the specified amount of space. If the whole string can't be fitted, ellipsize it. @@ -370,7 +303,7 @@ static void pager_flush() \param max the maximum space that may be used for printing \param has_more if this flag is true, this is not the entire string, and the string should be ellisiszed even if the string fits but takes up the whole space. */ -static int print_max(const wcstring &str, int max, int has_more) +static int print_max(const wcstring &str, int max, bool has_more) { int written = 0; for (size_t i=0; i < str.size(); i++) @@ -392,13 +325,38 @@ static int print_max(const wcstring &str, int max, int has_more) return written; } +static int print_max(const wcstring &str, int color, int max, bool has_more, line_t *line) +{ + int written = 0; + for (size_t i=0; i < str.size(); i++) + { + wchar_t c = str.at(i); + + if (written + wcwidth(c) > max) + break; + if ((written + wcwidth(c) == max) && (has_more || i + 1 < str.size())) + { + line->append(ellipsis_char, color); + written += wcwidth(ellipsis_char); + break; + } + + line->append(c, color); + written += wcwidth(c); + } + return written; +} + + /** Print the specified item using at the specified amount of space */ -static void completion_print_item(const wcstring &prefix, const comp_t *c, int width, bool secondary) +line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, page_rendering_t *rendering) const { int comp_width=0, desc_width=0; int written=0; + + line_t line_data; if (c->pref_width <= width) { @@ -423,42 +381,42 @@ static void completion_print_item(const wcstring &prefix, const comp_t *c, int w desc_width = width-comp_width-4; } - - rgb_color_t bg = secondary ? get_color(HIGHLIGHT_PAGER_SECONDARY) : rgb_color_t::normal(); + + int bg_color = secondary ? HIGHLIGHT_PAGER_SECONDARY : HIGHLIGHT_NORMAL; + for (size_t i=0; icomp.size(); i++) { const wcstring &comp = c->comp.at(i); - if (i != 0) - written += print_max(L" ", comp_width - written, 2); - set_color(get_color(HIGHLIGHT_PAGER_PREFIX), bg); - written += print_max(prefix, comp_width - written, comp.empty()?0:1); - set_color(get_color(HIGHLIGHT_PAGER_COMPLETION), bg); - written += print_max(comp.c_str(), comp_width - written, i!=(c->comp.size()-1)); - } + if (i != 0) + written += print_max(L" ", 0 /* default color */, comp_width - written, true /* has_more */, &line_data); + + int packed_color = HIGHLIGHT_PAGER_PREFIX | (bg_color << 16); + written += print_max(prefix, packed_color, comp_width - written, ! comp.empty(), &line_data); + + packed_color = HIGHLIGHT_PAGER_COMPLETION | (bg_color << 16); + written += print_max(comp, packed_color, comp_width - written, i + 1 < c->comp.size(), &line_data); + } if (desc_width) { + int packed_color = HIGHLIGHT_PAGER_DESCRIPTION | (bg_color << 16); while (written < (width-desc_width-2)) { - written++; - writech(L' '); + written += print_max(L" ", packed_color, 1, false, &line_data); } - set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg); - written += print_max(L"(", 1, 0); - written += print_max(c->desc.c_str(), desc_width, 0); - written += print_max(L")", 1, 0); + written += print_max(L"(", packed_color, 1, false, &line_data); + written += print_max(c->desc, packed_color, desc_width, false, &line_data); + written += print_max(L")", packed_color, 1, false, &line_data); } else { while (written < width) { - written++; - writech(L' '); + written += print_max(L" ", 0, 1, false, &line_data); } } - if (secondary) - set_color(rgb_color_t::normal(), rgb_color_t::normal()); + return line_data; } /** @@ -473,344 +431,32 @@ static void completion_print_item(const wcstring &prefix, const comp_t *c, int w \param prefix The string to print before each completion */ -static void completion_print(int cols, - int *width, - int row_start, - int row_stop, - const wcstring &prefix, - const std::vector &lst) +void pager_t::completion_print(int cols, int *width_per_column, int row_start, int row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const { size_t rows = (lst.size()-1)/cols+1; - size_t i, j; - for (i = row_start; iscreen_data.create_line(row).append_line(line); } - writech(L'\n'); } } -/** - Try to print the list of completions l with the prefix prefix using - cols as the number of columns. Return 1 if the completion list was - printed, 0 if the terminal is to narrow for the specified number of - columns. Always succeeds if cols is 1. - - If all the elements do not fit on the screen at once, make the list - scrollable using the up, down and space keys to move. The list will - exit when any other key is pressed. - - \param cols the number of columns to try to fit onto the screen - \param prefix the character string to prefix each completion with - \param l the list of completions - - \return one of PAGER_RETRY, PAGER_DONE and PAGER_RESIZE -*/ - -static int completion_try_print(int cols, - const wcstring &prefix, - const std::vector &lst) -{ - /* - The calculated preferred width of each column - */ - int pref_width[PAGER_MAX_COLS] = {0}; - /* - The calculated minimum width of each column - */ - int min_width[PAGER_MAX_COLS] = {0}; - /* - If the list can be printed with this width, width will contain the width of each column - */ - int *width=pref_width; - /* - Set to one if the list should be printed at this width - */ - int print=0; - - long i, j; - - int rows = (int)((lst.size()-1)/cols+1); - - int pref_tot_width=0; - int min_tot_width = 0; - int res=PAGER_RETRY; - /* - Skip completions on tiny terminals - */ - - if (termsize.ws_col < PAGER_MIN_WIDTH) - return PAGER_DONE; - - /* Calculate how wide the list would be */ - for (j = 0; j < cols; j++) - { - for (i = 0; ipref_width; - min = c->min_width; - - if (j != cols-1) - { - pref += 2; - min += 2; - } - min_width[j] = maxi(min_width[j], - min); - pref_width[j] = maxi(pref_width[j], - pref); - } - min_tot_width += min_width[j]; - pref_tot_width += pref_width[j]; - } - /* - Force fit if one column - */ - if (cols == 1) - { - if (pref_tot_width > termsize.ws_col) - { - pref_width[0] = termsize.ws_col; - } - width = pref_width; - print=1; - } - else if (pref_tot_width <= termsize.ws_col) - { - /* Terminal is wide enough. Print the list! */ - width = pref_width; - print=1; - } - else - { - long next_rows = (lst.size()-1)/(cols-1)+1; - /* fwprintf( stderr, - L"cols %d, min_tot %d, term %d, rows=%d, nextrows %d, termrows %d, diff %d\n", - cols, - min_tot_width, termsize.ws_col, - rows, next_rows, termsize.ws_row, - pref_tot_width-termsize.ws_col ); - */ - if (min_tot_width < termsize.ws_col && - (((rows < termsize.ws_row) && (next_rows >= termsize.ws_row)) || - (pref_tot_width-termsize.ws_col< 4 && cols < 3))) - { - /* - Terminal almost wide enough, or squeezing makes the - whole list fit on-screen. - - This part of the code is really important. People hate - having to scroll through the completion list. In cases - where there are a huge number of completions, it can't - be helped, but it is not uncommon for the completions to - _almost_ fit on one screen. In those cases, it is almost - always desirable to 'squeeze' the completions into a - single page. - - If we are using N columns and can get everything to - fit using squeezing, but everything would also fit - using N-1 columns, don't try. - */ - - int tot_width = min_tot_width; - width = min_width; - - while (tot_width < termsize.ws_col) - { - for (i=0; (i 0) - { - pos--; - writembs(tparm(cursor_address, 0, 0)); - writembs(scroll_reverse); - completion_print(cols, - width, - pos, - pos+1, - prefix, - lst); - writembs(tparm(cursor_address, - termsize.ws_row-1, 0)); - writembs(clr_eol); - - } - - break; - } - - case LINE_DOWN: - { - if (pos <= (rows - termsize.ws_row)) - { - pos++; - completion_print(cols, - width, - pos+termsize.ws_row-2, - pos+termsize.ws_row-1, - prefix, - lst); - } - break; - } - - case PAGE_DOWN: - { - - npos = mini((int)(rows - termsize.ws_row+1), (int)(pos + termsize.ws_row-1)); - if (npos != pos) - { - pos = npos; - completion_print(cols, - width, - pos, - pos+termsize.ws_row-1, - prefix, - lst); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - - break; - } - - case PAGE_UP: - { - npos = maxi(0, - pos - termsize.ws_row+1); - - if (npos != pos) - { - pos = npos; - completion_print(cols, - width, - pos, - pos+termsize.ws_row-1, - prefix, - lst); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - break; - } - - case R_NULL: - { - do_loop=0; - res=PAGER_RESIZE; - break; - - } - - default: - { - out_buff.push_back(c); - do_loop = 0; - break; - } - } - } - writembs(clr_eol); - } - } - return res; -} - /* Trim leading and trailing whitespace, and compress other whitespace runs into a single space. */ static void mangle_1_completion_description(wcstring *str) { @@ -891,12 +537,12 @@ static void join_completions(comp_info_list_t *comps) } /** Generate a list of comp_t structures from a list of completions */ -static std::vector process_completions_into_infos(const completion_list_t &lst, const wcstring &prefix) +static comp_info_list_t process_completions_into_infos(const completion_list_t &lst, const wcstring &prefix) { const size_t lst_size = lst.size(); // Make the list of the correct size up-front - std::vector result(lst_size); + comp_info_list_t result(lst_size); for (size_t i=0; i process_completions_into_infos(const completion_list_ return result; } -static void measure_completion_infos(std::vector *infos, const wcstring &prefix) +void pager_t::measure_completion_infos(comp_info_list_t *infos, const wcstring &prefix) const { size_t prefix_len = my_wcswidth(prefix.c_str()); for (size_t i=0; i < infos->size(); i++) @@ -940,17 +586,6 @@ static void measure_completion_infos(std::vector *infos, const wcstring recalc_min_widths(infos); } -/** - Respond to a winch signal by checking the terminal size -*/ -static void handle_winch(int sig) -{ - if (ioctl(1,TIOCGWINSZ,&termsize)!=0) - { - return; - } -} - /** The callback function that the keyboard reading function calls when an interrupt occurs. This makes sure that R_NULL is returned at @@ -961,132 +596,15 @@ static int interrupt_handler() return R_NULL; } -/** - Initialize various subsystems. This also closes stdin and replaces - it with a copy of stderr, so the reading of completion strings must - be done before init is called. -*/ -static void init(int mangle_descriptors, int out) -{ - struct sigaction act; - - static struct termios pager_modes; - char *term; - - if (mangle_descriptors) - { - - /* - Make fd 1 output to screen, and use some other fd for writing - the resulting output back to the caller - */ - int in; - out = dup(1); - close(1); - close(0); - - /* OK to not use CLO_EXEC here because fish_pager is single threaded */ - if ((in = open(ttyname(2), O_RDWR)) != -1) - { - if (dup2(2, 1) == -1) - { - debug(0, _(L"Could not set up output file descriptors for pager")); - exit(1); - } - - if (dup2(in, 0) == -1) - { - debug(0, _(L"Could not set up input file descriptors for pager")); - exit(1); - } - } - else - { - debug(0, _(L"Could not open tty for pager")); - exit(1); - } - } - - if (!(out_file = fdopen(out, "w"))) - { - debug(0, _(L"Could not initialize result pipe")); - exit(1); - } - - - env_universal_init(0, 0, 0, 0); - input_common_init(&interrupt_handler); - output_set_writer(&pager_buffered_writer); - - sigemptyset(& act.sa_mask); - act.sa_flags=0; - act.sa_handler=SIG_DFL; - act.sa_flags = 0; - act.sa_handler= &handle_winch; - if (sigaction(SIGWINCH, &act, 0)) - { - wperror(L"sigaction"); - exit(1); - } - - handle_winch(0); /* Set handler for window change events */ - - tcgetattr(0,&pager_modes); /* get the current terminal modes */ - memcpy(&saved_modes, - &pager_modes, - sizeof(saved_modes)); /* save a copy so we can reset the terminal later */ - - pager_modes.c_lflag &= ~ICANON; /* turn off canonical mode */ - pager_modes.c_lflag &= ~ECHO; /* turn off echo mode */ - pager_modes.c_cc[VMIN]=1; - pager_modes.c_cc[VTIME]=0; - - /* - - */ - if (tcsetattr(0,TCSANOW,&pager_modes)) /* set the new modes */ - { - wperror(L"tcsetattr"); - exit(1); - } - - int errret; - if (setupterm(0, STDOUT_FILENO, &errret) == ERR) - { - debug(0, _(L"Could not set up terminal")); - exit(1); - } - - term = getenv("TERM"); - if (term) - { - wcstring wterm = str2wcstring(term); - output_set_term(wterm); - } - - /* Infer term256 support */ - char *fish_term256 = getenv("fish_term256"); - bool support_term256; - if (fish_term256) - { - support_term256 = from_string(fish_term256); - } - else - { - support_term256 = term && strstr(term, "256color"); - } - output_set_supports_term256(support_term256); -} - - -void run_pager(const completion_list_t &raw_completions, const wcstring &prefix) +#if 0 +page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix) { // Save old output function so we can restore it int (* const saved_writer_func)(char) = output_get_writer(); output_set_writer(&pager_buffered_writer); // Get completion infos out of it - std::vector completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); + comp_info_list_t completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); // Maybe join them if (prefix == L"-") @@ -1127,16 +645,321 @@ void run_pager(const completion_list_t &raw_completions, const wcstring &prefix) } fwprintf(out_file, L"%ls", out_buff.c_str()); - if (is_ca_mode) - { - writembs(exit_ca_mode); - pager_flush(); - is_ca_mode = 0; - } // Restore saved writer function pager_buffer.clear(); output_set_writer(saved_writer_func); } +#endif + +void pager_t::set_completions(const completion_list_t &raw_completions) +{ + completions = raw_completions; + + // Get completion infos out of it + completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); + + // Maybe join them + if (prefix == L"-") + join_completions(&completion_infos); + + // Compute their various widths + measure_completion_infos(&completion_infos, prefix); +} + +void pager_t::set_term_size(int w, int h) +{ + assert(w > 0); + assert(h > 0); + term_width = w; + term_height = h; +} + +/** + Try to print the list of completions l with the prefix prefix using + cols as the number of columns. Return 1 if the completion list was + printed, 0 if the terminal is to narrow for the specified number of + columns. Always succeeds if cols is 1. + + If all the elements do not fit on the screen at once, make the list + scrollable using the up, down and space keys to move. The list will + exit when any other key is pressed. + + \param cols the number of columns to try to fit onto the screen + \param prefix the character string to prefix each completion with + \param l the list of completions + + \return one of PAGER_RETRY, PAGER_DONE and PAGER_RESIZE +*/ + +int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const +{ + /* + The calculated preferred width of each column + */ + int pref_width[PAGER_MAX_COLS] = {0}; + /* + The calculated minimum width of each column + */ + int min_width[PAGER_MAX_COLS] = {0}; + /* + If the list can be printed with this width, width will contain the width of each column + */ + int *width=pref_width; + /* + Set to one if the list should be printed at this width + */ + int print=0; + + int rows = (int)((lst.size()-1)/cols+1); + + int pref_tot_width=0; + int min_tot_width = 0; + int res=PAGER_RETRY; + + /* Skip completions on tiny terminals */ + if (term_width < PAGER_MIN_WIDTH) + return PAGER_DONE; + + /* Calculate how wide the list would be */ + for (long j = 0; j < cols; j++) + { + for (long i = 0; ipref_width; + min = c->min_width; + + if (j != cols-1) + { + pref += 2; + min += 2; + } + min_width[j] = maxi(min_width[j], + min); + pref_width[j] = maxi(pref_width[j], + pref); + } + min_tot_width += min_width[j]; + pref_tot_width += pref_width[j]; + } + /* + Force fit if one column + */ + if (cols == 1) + { + if (pref_tot_width > term_width) + { + pref_width[0] = term_width; + } + width = pref_width; + print=1; + } + else if (pref_tot_width <= term_width) + { + /* Terminal is wide enough. Print the list! */ + width = pref_width; + print=1; + } + else + { + long next_rows = (lst.size()-1)/(cols-1)+1; + /* fwprintf( stderr, + L"cols %d, min_tot %d, term %d, rows=%d, nextrows %d, termrows %d, diff %d\n", + cols, + min_tot_width, term_width, + rows, next_rows, term_height, + pref_tot_width-term_width ); + */ + if (min_tot_width < term_width && + (((rows < term_height) && (next_rows >= term_height)) || + (pref_tot_width-term_width< 4 && cols < 3))) + { + /* + Terminal almost wide enough, or squeezing makes the + whole list fit on-screen. + + This part of the code is really important. People hate + having to scroll through the completion list. In cases + where there are a huge number of completions, it can't + be helped, but it is not uncommon for the completions to + _almost_ fit on one screen. In those cases, it is almost + always desirable to 'squeeze' the completions into a + single page. + + If we are using N columns and can get everything to + fit using squeezing, but everything would also fit + using N-1 columns, don't try. + */ + + int tot_width = min_tot_width; + width = min_width; + + while (tot_width < term_width) + { + for (long i=0; (i 0) + { + pos--; + writembs(tparm(cursor_address, 0, 0)); + writembs(scroll_reverse); + completion_print(cols, width, pos, pos+1, prefix, lst, rendering); + writembs(tparm(cursor_address, term_height-1, 0)); + writembs(clr_eol); + + } + + break; + } + + case LINE_DOWN: + { + if (pos <= (rows - term_height)) + { + pos++; + completion_print(cols, width, pos+term_height-2, pos+term_height-1, prefix, lst, rendering); + } + break; + } + + case PAGE_DOWN: + { + + npos = mini((int)(rows - term_height+1), (int)(pos + term_height-1)); + if (npos != pos) + { + pos = npos; + completion_print(cols, width, pos, pos+term_height-1, prefix, lst, rendering); + } + else + { + if (flash_screen) + writembs(flash_screen); + } + + break; + } + + case PAGE_UP: + { + npos = maxi(0, pos - term_height+1); + + if (npos != pos) + { + pos = npos; + completion_print(cols, width, pos, pos+term_height-1, prefix, lst, rendering); + } + else + { + if (flash_screen) + writembs(flash_screen); + } + break; + } + + case R_NULL: + { + do_loop=0; + res=PAGER_RESIZE; + break; + + } + + default: + { + out_buff.push_back(c); + do_loop = 0; + break; + } + } + } + writembs(clr_eol); + } + } + return res; +} +page_rendering_t pager_t::render() const +{ + /** + Try to print the completions. Start by trying to print the + list in PAGER_MAX_COLS columns, if the completions won't + fit, reduce the number of columns by one. Printing a single + column never fails. + */ + page_rendering_t rendering; + for (int i = PAGER_MAX_COLS; i>0; i--) + { + /* Initially empty rendering */ + rendering.screen_data.resize(0); + + switch (completion_try_print(i, prefix, completion_infos, &rendering)) + { + case PAGER_RETRY: + break; + + case PAGER_DONE: + i=0; + break; + + case PAGER_RESIZE: + /* + This means we got a resize event, so we start + over from the beginning. Since it the screen got + bigger, we might be able to fit all completions + on-screen. + */ + i=PAGER_MAX_COLS+1; + break; + } + } + return rendering; +} diff --git a/pager.h b/pager.h index 218f0530a..8cf84f8d3 100644 --- a/pager.h +++ b/pager.h @@ -6,10 +6,65 @@ #include "screen.h" /* Represents rendering from the pager */ -class page_rendering_t +struct page_rendering_t { screen_data_t screen_data; }; typedef std::vector completion_list_t; page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix); + +class pager_t +{ + int term_width; + int term_height; + + completion_list_t completions; + + /** Data structure describing one or a group of related completions */ + public: + struct comp_t + { + /** The list of all completin strings this entry applies to */ + wcstring_list_t comp; + + /** The description */ + wcstring desc; + + /** On-screen width of the completion string */ + int comp_width; + + /** On-screen width of the description information */ + int desc_width; + + /** Preffered total width */ + int pref_width; + + /** Minimum acceptable width */ + int min_width; + + comp_t() : comp(), desc(), comp_width(0), desc_width(0), pref_width(0), min_width(0) + { + } + }; + + private: + typedef std::vector comp_info_list_t; + comp_info_list_t completion_infos; + + int completion_try_print(int cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; + + void recalc_min_widths(comp_info_list_t * lst) const; + void measure_completion_infos(std::vector *infos, const wcstring &prefix) const; + + void completion_print(int cols, int *width_per_column, int row_start, int row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; + line_t completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, page_rendering_t *rendering) const; + + + public: + void set_completions(const completion_list_t &comp); + void set_term_size(int w, int h); + wcstring prefix; + + page_rendering_t render() const; +}; diff --git a/screen.h b/screen.h index d3676a0be..8e23002eb 100644 --- a/screen.h +++ b/screen.h @@ -54,6 +54,12 @@ struct line_t { return colors.at(idx); } + + void append_line(const line_t &line) + { + text.insert(text.end(), line.text.begin(), line.text.end()); + colors.insert(colors.end(), line.colors.begin(), line.colors.end()); + } }; From 295c8f48a6192e25053c5f0366ecfae6bcfa3bdc Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 14 Jan 2014 15:39:53 -0800 Subject: [PATCH 004/145] Teach screen how to render completion page. Correct spacing in completion page contents. --- pager.cpp | 10 ++++++++++ parse_productions.cpp | 2 +- reader.cpp | 32 ++++++++++++++++++++++++-------- screen.cpp | 10 +++++++++- screen.h | 8 +++++++- 5 files changed, 51 insertions(+), 11 deletions(-) diff --git a/pager.cpp b/pager.cpp index fefe604ab..8eb729f8e 100644 --- a/pager.cpp +++ b/pager.cpp @@ -416,6 +416,7 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s written += print_max(L" ", 0, 1, false, &line_data); } } + return line_data; } @@ -436,6 +437,8 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i size_t rows = (lst.size()-1)/cols+1; + fprintf(stderr, "prefix: %ls\n", prefix.c_str()); + for (size_t row = row_start; row < row_stop; row++) { for (size_t col = 0; col < cols; col++) @@ -450,6 +453,13 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i /* Print this completion on its own "line" */ line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last?0:2), row%2, rendering); + /* If there's more to come, append two spaces */ + if (col + 1 < cols) + { + line.append(L' ', 0); + line.append(L' ', 0); + } + /* Append this to the real line */ rendering->screen_data.create_line(row).append_line(line); } diff --git a/parse_productions.cpp b/parse_productions.cpp index 311d68086..4f40ce614 100644 --- a/parse_productions.cpp +++ b/parse_productions.cpp @@ -126,7 +126,7 @@ RESOLVE(statement) if (token1.type == parse_token_type_string) { // If we are a function, then look for help arguments - // Othewrise, if the next token looks like an option (starts with a dash), then parse it as a decorated statement + // Otherwise, if the next token looks like an option (starts with a dash), then parse it as a decorated statement if (token1.keyword == parse_keyword_function && token2.is_help_argument) { return 4; diff --git a/reader.cpp b/reader.cpp index 6cf77ae41..5a45cd9e3 100644 --- a/reader.cpp +++ b/reader.cpp @@ -100,6 +100,7 @@ commence. #include "parse_util.h" #include "parser_keywords.h" #include "parse_tree.h" +#include "pager.h" /** Maximum length of prefix string when printing completion @@ -199,6 +200,9 @@ public: /** String containing the autosuggestion */ wcstring autosuggestion; + + /** Current completions */ + page_rendering_t completion_page_rendering; /** Whether autosuggesting is allowed at all */ bool allow_autosuggestion; @@ -541,7 +545,8 @@ static void reader_repaint() data->command_length(), &colors[0], &indents[0], - data->buff_pos); + data->buff_pos, + &data->completion_page_rendering.screen_data); data->repaint_needed = false; } @@ -1852,14 +1857,25 @@ static bool handle_completions(const std::vector &comp) wchar_t quote; parse_util_get_parameter_info(data->command_line, data->buff_pos, "e, NULL, NULL); is_quoted = (quote != L'\0'); + + if (1) + { + pager_t pager; + pager.set_term_size(common_get_width(), common_get_height()); + pager.prefix = prefix; + pager.set_completions(surviving_completions); + data->completion_page_rendering = pager.render(); + } + else + { + /* Clear the autosuggestion from the old commandline before abandoning it (see #561) */ + if (! data->autosuggestion.empty()) + reader_repaint_without_autosuggestion(); - /* Clear the autosuggestion from the old commandline before abandoning it (see #561) */ - if (! data->autosuggestion.empty()) - reader_repaint_without_autosuggestion(); + write_loop(1, "\n", 1); - write_loop(1, "\n", 1); - - run_pager(prefix, is_quoted, surviving_completions); + run_pager(prefix, is_quoted, surviving_completions); + } } s_reset(&data->screen, screen_reset_abandon_line); reader_repaint(); @@ -3189,7 +3205,7 @@ const wchar_t *reader_readline(void) /* Munge our completions */ sort_and_make_unique(comp); prioritize_completions(comp); - + /* Record our cycle_command_line */ cycle_command_line = data->command_line; cycle_cursor_pos = data->buff_pos; diff --git a/screen.cpp b/screen.cpp index 711aebabd..fe283ac84 100644 --- a/screen.cpp +++ b/screen.cpp @@ -1234,7 +1234,8 @@ void s_write(screen_t *s, size_t explicit_len, const int *colors, const int *indent, - size_t cursor_pos) + size_t cursor_pos, + const screen_data_t *pager_data) { screen_data_t::cursor_t cursor_arr; @@ -1321,6 +1322,13 @@ void s_write(screen_t *s, } s->desired.cursor = cursor_arr; + + /* append pager_data */ + if (pager_data != NULL) + { + s->desired.append_lines(*pager_data); + } + s_update(s, layout.left_prompt.c_str(), layout.right_prompt.c_str()); s_save_status(s); } diff --git a/screen.h b/screen.h index 8e23002eb..7ff8fb0f5 100644 --- a/screen.h +++ b/screen.h @@ -109,6 +109,11 @@ public: { return line_datas.size(); } + + void append_lines(const screen_data_t &d) + { + this->line_datas.insert(this->line_datas.end(), d.line_datas.begin(), d.line_datas.end()); + } }; /** @@ -196,7 +201,8 @@ void s_write(screen_t *s, size_t explicit_len, const int *colors, const int *indent, - size_t cursor_pos); + size_t cursor_pos, + const screen_data_t *pager_data); /** This function resets the screen buffers internal knowledge about From 5953170f142a6cccd0d8f7e5af08c70f18f42689 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 15 Jan 2014 01:36:09 -0800 Subject: [PATCH 005/145] Update pager colors to use new non-bitmask architecture. --- highlight.cpp | 9 ++++- highlight.h | 9 +++++ pager.cpp | 109 +++++--------------------------------------------- 3 files changed, 26 insertions(+), 101 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index 3878a208c..35db0dfc1 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -61,7 +61,14 @@ static const wchar_t * const highlight_var[] = L"fish_color_escape", L"fish_color_quote", L"fish_color_redirection", - L"fish_color_autosuggestion" + L"fish_color_autosuggestion", + + L"fish_pager_color_prefix", + L"fish_pager_color_completion", + L"fish_pager_color_description", + L"fish_pager_color_progress", + L"fish_pager_color_secondary" + }; /* If the given path looks like it's relative to the working directory, then prepend that working directory. */ diff --git a/highlight.h b/highlight.h index 7c6000b17..bd439e88e 100644 --- a/highlight.h +++ b/highlight.h @@ -29,6 +29,14 @@ enum highlight_spec_redirection, //redirection highlight_spec_autosuggestion, //autosuggestion + // Pager support + highlight_spec_pager_prefix, + highlight_spec_pager_completion, + highlight_spec_pager_description, + highlight_spec_pager_progress, + highlight_spec_pager_secondary, + + HIGHLIGHT_SPEC_PRIMARY_MASK = 0xFF, /* The following values are modifiers */ @@ -47,6 +55,7 @@ inline highlight_spec_t highlight_get_primary(highlight_spec_t val) inline highlight_spec_t highlight_make_background(highlight_spec_t val) { + assert(val >> 16 == 0); return val << 16; } diff --git a/pager.cpp b/pager.cpp index 8eb729f8e..6afb9f8e9 100644 --- a/pager.cpp +++ b/pager.cpp @@ -57,6 +57,7 @@ #include "input_common.h" #include "env_universal.h" #include "print_help.h" +#include "highlight.h" typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; @@ -72,16 +73,6 @@ enum ; -enum -{ - HIGHLIGHT_PAGER_PREFIX, - HIGHLIGHT_PAGER_COMPLETION, - HIGHLIGHT_PAGER_DESCRIPTION, - HIGHLIGHT_PAGER_PROGRESS, - HIGHLIGHT_PAGER_SECONDARY -} -; - enum { /* @@ -126,54 +117,11 @@ enum */ static std::vector pager_buffer; -/** - The environment variables used to specify the color of different - tokens. -*/ -static const wchar_t *hightlight_var[] = -{ - L"fish_pager_color_prefix", - L"fish_pager_color_completion", - L"fish_pager_color_description", - L"fish_pager_color_progress", - L"fish_pager_color_secondary" -} -; - /** This string contains the text that should be sent back to the calling program */ static wcstring out_buff; - -/** - This function translates from a highlight code to a specific color - by check invironement variables -*/ -static rgb_color_t get_color(int highlight) -{ - const wchar_t *val; - - if (highlight < 0) - return rgb_color_t::normal(); - if (highlight >= (5)) - return rgb_color_t::normal(); - - val = wgetenv(hightlight_var[highlight]); - - if (!val) - { - val = env_universal_get(hightlight_var[highlight]); - } - - if (!val) - { - return rgb_color_t::normal(); - } - - return parse_color(val, false); -} - /** This function calculates the minimum width for each completion entry in the specified array_list. This width depends on the @@ -286,46 +234,17 @@ static wint_t readch() return input_common_readch(0); } -/** - Write specified character to the output buffer \c pager_buffer -*/ -static int pager_buffered_writer(char c) -{ - pager_buffer.push_back(c); - return 0; -} - /** Print the specified string, but use at most the specified amount of space. If the whole string can't be fitted, ellipsize it. \param str the string to print + \param color the color to apply to every printed character \param max the maximum space that may be used for printing \param has_more if this flag is true, this is not the entire string, and the string should be ellisiszed even if the string fits but takes up the whole space. */ -static int print_max(const wcstring &str, int max, bool has_more) -{ - int written = 0; - for (size_t i=0; i < str.size(); i++) - { - wchar_t c = str.at(i); - if (written + wcwidth(c) > max) - break; - if ((written + wcwidth(c) == max) && (has_more || i + 1 < str.size())) - { - writech(ellipsis_char); - written += wcwidth(ellipsis_char); - break; - } - - writech(c); - written+= wcwidth(c); - } - return written; -} - -static int print_max(const wcstring &str, int color, int max, bool has_more, line_t *line) +static int print_max(const wcstring &str, highlight_spec_t color, int max, bool has_more, line_t *line) { int written = 0; for (size_t i=0; i < str.size(); i++) @@ -382,25 +301,25 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s } - int bg_color = secondary ? HIGHLIGHT_PAGER_SECONDARY : HIGHLIGHT_NORMAL; + int bg_color = secondary ? highlight_spec_pager_secondary : highlight_spec_normal; for (size_t i=0; icomp.size(); i++) { const wcstring &comp = c->comp.at(i); if (i != 0) - written += print_max(L" ", 0 /* default color */, comp_width - written, true /* has_more */, &line_data); + written += print_max(L" ", highlight_spec_normal, comp_width - written, true /* has_more */, &line_data); - int packed_color = HIGHLIGHT_PAGER_PREFIX | (bg_color << 16); + int packed_color = highlight_spec_pager_prefix | highlight_make_background(bg_color); written += print_max(prefix, packed_color, comp_width - written, ! comp.empty(), &line_data); - packed_color = HIGHLIGHT_PAGER_COMPLETION | (bg_color << 16); + packed_color = highlight_spec_pager_completion | highlight_make_background(bg_color); written += print_max(comp, packed_color, comp_width - written, i + 1 < c->comp.size(), &line_data); } if (desc_width) { - int packed_color = HIGHLIGHT_PAGER_DESCRIPTION | (bg_color << 16); + int packed_color = highlight_spec_pager_description | highlight_make_background(bg_color); while (written < (width-desc_width-2)) { written += print_max(L" ", packed_color, 1, false, &line_data); @@ -596,16 +515,6 @@ void pager_t::measure_completion_infos(comp_info_list_t *infos, const wcstring & recalc_min_widths(infos); } -/** - The callback function that the keyboard reading function calls when - an interrupt occurs. This makes sure that R_NULL is returned at - once when an interrupt has occured. -*/ -static int interrupt_handler() -{ - return R_NULL; -} - #if 0 page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix) { @@ -843,7 +752,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i /* List does not fit on screen. Print one screenful and leave a scrollable interface */ while (do_loop) { - set_color(rgb_color_t::black(), get_color(HIGHLIGHT_PAGER_PROGRESS)); + set_color(rgb_color_t::black(), highlight_get_color(highlight_spec_pager_progress, true)); wcstring msg = format_string(_(L" %d to %d of %d"), pos, pos+term_height-1, rows); msg.append(L" \r"); From 0627ae82fb2366aa140b986e80f2e68b822e4242 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 15 Jan 2014 18:21:38 -0800 Subject: [PATCH 006/145] Clean up pager on exit from interactive read --- pager.cpp | 41 ++++++++++++++++++++++++++++++++++++----- pager.h | 31 +++++++++++++++++++++++++++---- reader.cpp | 25 ++++++++++++++++++++----- screen.cpp | 26 ++++++++++++++++++++++---- screen.h | 7 ++++++- 5 files changed, 111 insertions(+), 19 deletions(-) diff --git a/pager.cpp b/pager.cpp index 6afb9f8e9..aa5d361ff 100644 --- a/pager.cpp +++ b/pager.cpp @@ -270,7 +270,7 @@ static int print_max(const wcstring &str, highlight_spec_t color, int max, bool /** Print the specified item using at the specified amount of space */ -line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, page_rendering_t *rendering) const +line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, bool selected, page_rendering_t *rendering) const { int comp_width=0, desc_width=0; int written=0; @@ -302,6 +302,10 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s } int bg_color = secondary ? highlight_spec_pager_secondary : highlight_spec_normal; + if (selected) + { + bg_color = highlight_spec_search_match; + } for (size_t i=0; icomp.size(); i++) { @@ -356,8 +360,6 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i size_t rows = (lst.size()-1)/cols+1; - fprintf(stderr, "prefix: %ls\n", prefix.c_str()); - for (size_t row = row_start; row < row_stop; row++) { for (size_t col = 0; col < cols; col++) @@ -367,10 +369,12 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i if (lst.size() <= col * rows + row) continue; - const comp_t *el = &lst.at(col * rows + row); + size_t idx = col * rows + row; + const comp_t *el = &lst.at(idx); + bool is_selected = (idx == this->selected_completion_idx); /* Print this completion on its own "line" */ - line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last?0:2), row%2, rendering); + line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last?0:2), row%2, is_selected, rendering); /* If there's more to come, append two spaces */ if (col + 1 < cols) @@ -586,6 +590,11 @@ void pager_t::set_completions(const completion_list_t &raw_completions) measure_completion_infos(&completion_infos, prefix); } +void pager_t::set_prefix(const wcstring &pref) +{ + prefix = pref; +} + void pager_t::set_term_size(int w, int h) { assert(w > 0); @@ -882,3 +891,25 @@ page_rendering_t pager_t::render() const } return rendering; } + +pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(-1) +{ +} + +bool pager_t::empty() const +{ + return completions.empty(); +} + +void pager_t::set_selected_completion(size_t idx) +{ + this->selected_completion_idx = idx; +} + + +void pager_t::clear() +{ + completions.clear(); + completion_infos.clear(); + prefix.clear(); +} diff --git a/pager.h b/pager.h index 8cf84f8d3..38c7f166e 100644 --- a/pager.h +++ b/pager.h @@ -21,6 +21,8 @@ class pager_t completion_list_t completions; + size_t selected_completion_idx; + /** Data structure describing one or a group of related completions */ public: struct comp_t @@ -52,19 +54,40 @@ class pager_t typedef std::vector comp_info_list_t; comp_info_list_t completion_infos; + wcstring prefix; + int completion_try_print(int cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; void recalc_min_widths(comp_info_list_t * lst) const; void measure_completion_infos(std::vector *infos, const wcstring &prefix) const; void completion_print(int cols, int *width_per_column, int row_start, int row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; - line_t completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, page_rendering_t *rendering) const; + line_t completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, bool selected, page_rendering_t *rendering) const; public: - void set_completions(const completion_list_t &comp); - void set_term_size(int w, int h); - wcstring prefix; + /* Sets the set of completions */ + void set_completions(const completion_list_t &comp); + + /* Sets the prefix */ + void set_prefix(const wcstring &pref); + + /* Sets the terminal width and height */ + void set_term_size(int w, int h); + + /* Sets the index of the selected completion */ + void set_selected_completion(size_t completion_idx); + + /* Produces a rendering of the completions, at the given term size */ page_rendering_t render() const; + + /* Indicates if there are no completions, and therefore nothing to render */ + bool empty() const; + + /* Clears all completions and the prefix */ + void clear(); + + /* Constructor */ + pager_t(); }; diff --git a/reader.cpp b/reader.cpp index 9b82550b8..11b5acadb 100644 --- a/reader.cpp +++ b/reader.cpp @@ -198,8 +198,11 @@ public: /** String containing the autosuggestion */ wcstring autosuggestion; - /** Current completions */ - page_rendering_t completion_page_rendering; + /** Current pager */ + pager_t current_pager; + + /** Whether we are navigating the pager */ + bool is_navigating_pager; /** Whether autosuggesting is allowed at all */ bool allow_autosuggestion; @@ -334,6 +337,7 @@ public: /** Constructor */ reader_data_t() : + is_navigating_pager(0), allow_autosuggestion(0), suppress_autosuggestion(0), expand_abbreviations(0), @@ -543,7 +547,7 @@ static void reader_repaint() &colors[0], &indents[0], data->buff_pos, - &data->completion_page_rendering.screen_data); + data->current_pager); data->repaint_needed = false; } @@ -1859,9 +1863,9 @@ static bool handle_completions(const std::vector &comp) { pager_t pager; pager.set_term_size(common_get_width(), common_get_height()); - pager.prefix = prefix; + pager.set_prefix(prefix); pager.set_completions(surviving_completions); - data->completion_page_rendering = pager.render(); + data->current_pager = pager; } else { @@ -3143,6 +3147,9 @@ const wchar_t *reader_readline(void) { /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions */ const completion_t *next_comp = cycle_competions(comp, cycle_command_line, &completion_cycle_idx); + + data->current_pager.set_selected_completion(completion_cycle_idx); + if (next_comp != NULL) { size_t cursor_pos = cycle_cursor_pos; @@ -3815,6 +3822,14 @@ const wchar_t *reader_readline(void) } writestr(L"\n"); + + /* Ensure we have no pager contents when we exit */ + if (! data->current_pager.empty()) + { + /* Clear to end of screen to erase the pager contents. TODO: this may fail if eos doesn't exist, in which case we should emit newlines */ + screen_force_clear_to_end(); + data->current_pager.clear(); + } if (!reader_exit_forced()) { diff --git a/screen.cpp b/screen.cpp index f6c49b762..7d402a61e 100644 --- a/screen.cpp +++ b/screen.cpp @@ -45,6 +45,7 @@ efficient way for transforming that to the desired screen content. #include "highlight.h" #include "screen.h" #include "env.h" +#include "pager.h" /** The number of characters to indent new blocks */ #define INDENT_STEP 4 @@ -1027,7 +1028,7 @@ static void s_update(screen_t *scr, const wchar_t *left_prompt, const wchar_t *r if (! output.empty()) { - write_loop(1, &output.at(0), output.size()); + write_loop(STDOUT_FILENO, &output.at(0), output.size()); } /* We have now synced our actual screen against our desired screen. Note that this is a big assignment! */ @@ -1236,7 +1237,7 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const screen_data_t *pager_data) + const pager_t &pager) { screen_data_t::cursor_t cursor_arr; @@ -1325,9 +1326,10 @@ void s_write(screen_t *s, s->desired.cursor = cursor_arr; /* append pager_data */ - if (pager_data != NULL) + if (! pager.empty()) { - s->desired.append_lines(*pager_data); + const page_rendering_t rendering = pager.render(); + s->desired.append_lines(rendering.screen_data); } s_update(s, layout.left_prompt.c_str(), layout.right_prompt.c_str()); @@ -1435,6 +1437,22 @@ void s_reset(screen_t *s, screen_reset_mode_t mode) fstat(2, &s->prev_buff_2); } +bool screen_force_clear_to_end() +{ + bool result = false; + if (clr_eos) + { + data_buffer_t output; + s_write_mbs(&output, clr_eos); + if (! output.empty()) + { + write_loop(STDOUT_FILENO, &output.at(0), output.size()); + result = true; + } + } + return result; +} + screen_t::screen_t() : desired(), actual(), diff --git a/screen.h b/screen.h index 4fb581a5d..1419194cc 100644 --- a/screen.h +++ b/screen.h @@ -16,6 +16,8 @@ #include #include "highlight.h" +class pager_t; + /** A class representing a single line of a screen. */ @@ -203,7 +205,7 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const screen_data_t *pager_data); + const pager_t &pager_data); /** This function resets the screen buffers internal knowledge about @@ -241,6 +243,9 @@ enum screen_reset_mode_t void s_reset(screen_t *s, screen_reset_mode_t mode); +/* Issues an immediate clr_eos, returning if it existed */ +bool screen_force_clear_to_end(); + /* Returns the length of an escape code. Exposed for testing purposes only. */ size_t escape_code_length(const wchar_t *code); From c6e5201e15daf86fc25857164d51d5b9f29e0808 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 17 Jan 2014 12:04:03 -0800 Subject: [PATCH 007/145] Initial support for navigating completions that appear under the commandline using arrow keys --- builtin_commandline.cpp | 2 +- common.h | 9 +++ pager.cpp | 127 +++++++++++++++++++++++++++++++++------- pager.h | 17 +++++- reader.cpp | 123 ++++++++++++++++++++++---------------- screen.cpp | 10 +--- screen.h | 9 ++- 7 files changed, 215 insertions(+), 82 deletions(-) diff --git a/builtin_commandline.cpp b/builtin_commandline.cpp index f121cb644..8b6c409ac 100644 --- a/builtin_commandline.cpp +++ b/builtin_commandline.cpp @@ -149,7 +149,7 @@ static void write_part(const wchar_t *begin, { wchar_t *buff = wcsndup(begin, end-begin); // fwprintf( stderr, L"Subshell: %ls, end char %lc\n", buff, *end ); - wcstring out; + wcstring out; tokenizer_t tok(buff, TOK_ACCEPT_UNFINISHED); for (; tok_has_next(&tok); tok_next(&tok)) { diff --git a/common.h b/common.h index 86c5bc6c9..f789b7499 100644 --- a/common.h +++ b/common.h @@ -87,6 +87,15 @@ enum }; typedef unsigned int escape_flags_t; +/* Directions */ +enum cardinal_direction_t +{ + direction_north, + direction_east, + direction_south, + direction_west +}; + /** Helper macro for errors */ diff --git a/pager.cpp b/pager.cpp index aa5d361ff..ebf5fc939 100644 --- a/pager.cpp +++ b/pager.cpp @@ -122,6 +122,12 @@ static std::vector pager_buffer; */ static wcstring out_buff; +/* Returns numer / denom, rounding up */ +static size_t divide_round_up(size_t numer, size_t denom) +{ + return numer / denom + (numer % denom ? 1 : 0); +} + /** This function calculates the minimum width for each completion entry in the specified array_list. This width depends on the @@ -639,7 +645,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i */ int print=0; - int rows = (int)((lst.size()-1)/cols+1); + int rows = (int)divide_round_up(lst.size(), cols); int pref_tot_width=0; int min_tot_width = 0; @@ -857,6 +863,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i page_rendering_t pager_t::render() const { + /** Try to print the completions. Start by trying to print the list in PAGER_MAX_COLS columns, if the completions won't @@ -864,34 +871,54 @@ page_rendering_t pager_t::render() const column never fails. */ page_rendering_t rendering; - for (int i = PAGER_MAX_COLS; i>0; i--) + rendering.term_width = this->term_width; + rendering.term_height = this->term_height; + rendering.selected_completion_idx = this->selected_completion_idx; + + if (! this->empty()) { - /* Initially empty rendering */ - rendering.screen_data.resize(0); - - switch (completion_try_print(i, prefix, completion_infos, &rendering)) + int cols; + bool done = false; + for (cols = PAGER_MAX_COLS; cols > 0 && ! done; cols--) { - case PAGER_RETRY: - break; + /* Initially empty rendering */ + rendering.screen_data.resize(0); + + switch (completion_try_print(cols, prefix, completion_infos, &rendering)) + { + case PAGER_RETRY: + break; - case PAGER_DONE: - i=0; - break; + case PAGER_DONE: + done = true; + break; - case PAGER_RESIZE: - /* - This means we got a resize event, so we start - over from the beginning. Since it the screen got - bigger, we might be able to fit all completions - on-screen. - */ - i=PAGER_MAX_COLS+1; - break; + case PAGER_RESIZE: + /* + This means we got a resize event, so we start + over from the beginning. Since it the screen got + bigger, we might be able to fit all completions + on-screen. + */ + cols=PAGER_MAX_COLS+1; + break; + } } + assert(cols >= 0); + rendering.cols = (size_t)cols; + rendering.rows = divide_round_up(completion_infos.size(), rendering.cols); } return rendering; } +void pager_t::update_rendering(page_rendering_t *rendering) const +{ + if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->selected_completion_idx) + { + *rendering = this->render(); + } +} + pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(-1) { } @@ -906,6 +933,62 @@ void pager_t::set_selected_completion(size_t idx) this->selected_completion_idx = idx; } +bool pager_t::select_next_completion_in_direction(cardinal_direction_t direction, const page_rendering_t &rendering) +{ + /* Handle the case of nothing selected yet */ + if (selected_completion_idx == (size_t)(-1)) + { + return false; + } + + /* We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. */ + size_t current_row = selected_completion_idx % rendering.rows; + size_t current_col = selected_completion_idx / rendering.rows; + + switch (direction) + { + case direction_north: + { + /* Go up a whole row */ + if (current_row > 0) + current_row--; + break; + } + + case direction_south: + { + /* Go down, unless we are in the last row. Note that this means that we may set selected_completion_idx to an out-of-bounds value if the last row is incomplete; this is a feature (it allows "last column memory"). */ + if (current_row + 1 < rendering.rows) + current_row++; + break; + } + + case direction_east: + { + if (current_col + 1 < rendering.cols) + current_col++; + break; + } + + case direction_west: + { + if (current_col > 0) + current_col--; + break; + } + } + + size_t new_selected_completion_idx = current_col * rendering.rows + current_row; + if (new_selected_completion_idx != selected_completion_idx) + { + selected_completion_idx = new_selected_completion_idx; + return true; + } + else + { + return false; + } +} void pager_t::clear() { @@ -913,3 +996,7 @@ void pager_t::clear() completion_infos.clear(); prefix.clear(); } + +page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), selected_completion_idx(-1) +{ +} diff --git a/pager.h b/pager.h index 38c7f166e..e53e919c7 100644 --- a/pager.h +++ b/pager.h @@ -6,9 +6,18 @@ #include "screen.h" /* Represents rendering from the pager */ -struct page_rendering_t +class page_rendering_t { + public: + int term_width; + int term_height; + size_t rows; + size_t cols; + size_t selected_completion_idx; screen_data_t screen_data; + + /* Returns a rendering with invalid data, useful to indicate "no rendering" */ + page_rendering_t(); }; typedef std::vector completion_list_t; @@ -79,9 +88,15 @@ class pager_t /* Sets the index of the selected completion */ void set_selected_completion(size_t completion_idx); + /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns true if the values changed. */ + bool select_next_completion_in_direction(cardinal_direction_t direction, const page_rendering_t &rendering); + /* Produces a rendering of the completions, at the given term size */ page_rendering_t render() const; + /* Updates the rendering if it's stale */ + void update_rendering(page_rendering_t *rendering) const; + /* Indicates if there are no completions, and therefore nothing to render */ bool empty() const; diff --git a/reader.cpp b/reader.cpp index 11b5acadb..95fa15bbf 100644 --- a/reader.cpp +++ b/reader.cpp @@ -201,6 +201,9 @@ public: /** Current pager */ pager_t current_pager; + /** Current page rendering */ + page_rendering_t current_page_rendering; + /** Whether we are navigating the pager */ bool is_navigating_pager; @@ -538,6 +541,10 @@ static void reader_repaint() std::vector indents = data->indents; indents.resize(len); + + // Re-render our completions page if necessary + data->current_pager.set_term_size(common_get_width(), common_get_height()); + data->current_pager.update_rendering(&data->current_page_rendering); s_write(&data->screen, data->left_prompt_buff, @@ -547,7 +554,7 @@ static void reader_repaint() &colors[0], &indents[0], data->buff_pos, - data->current_pager); + data->current_page_rendering); data->repaint_needed = false; } @@ -1852,33 +1859,31 @@ static bool handle_completions(const std::vector &comp) prefix.append(data->command_line, prefix_start + len - PREFIX_MAX_LEN, PREFIX_MAX_LEN); } + wchar_t quote; + parse_util_get_parameter_info(data->command_line, data->buff_pos, "e, NULL, NULL); + bool is_quoted = (quote != L'\0'); + + if (1) { - int is_quoted; - - wchar_t quote; - parse_util_get_parameter_info(data->command_line, data->buff_pos, "e, NULL, NULL); - is_quoted = (quote != L'\0'); + data->current_pager.set_prefix(prefix); + data->current_pager.set_completions(surviving_completions); - if (1) - { - pager_t pager; - pager.set_term_size(common_get_width(), common_get_height()); - pager.set_prefix(prefix); - pager.set_completions(surviving_completions); - data->current_pager = pager; - } - else - { - /* Clear the autosuggestion from the old commandline before abandoning it (see #561) */ - if (! data->autosuggestion.empty()) - reader_repaint_without_autosuggestion(); - - write_loop(1, "\n", 1); - - run_pager(prefix, is_quoted, surviving_completions); - } + /* Invalidate our rendering */ + data->current_page_rendering = page_rendering_t(); + } + else + { + /* Clear the autosuggestion from the old commandline before abandoning it (see #561) */ + if (! data->autosuggestion.empty()) + reader_repaint_without_autosuggestion(); + + write_loop(1, "\n", 1); + + run_pager(prefix, is_quoted, surviving_completions); + + s_reset(&data->screen, screen_reset_abandon_line); + } - s_reset(&data->screen, screen_reset_abandon_line); reader_repaint(); success = false; } @@ -2970,6 +2975,9 @@ const wchar_t *reader_readline(void) /* The cycle index in our completion list */ size_t completion_cycle_idx = (size_t)(-1); + + /* Indicates if we are currently navigating pager contents */ + bool is_navigating_pager_contents = false; /* The command line before completion */ wcstring cycle_command_line; @@ -3152,6 +3160,8 @@ const wchar_t *reader_readline(void) if (next_comp != NULL) { + is_navigating_pager_contents = true; + size_t cursor_pos = cycle_cursor_pos; const wcstring new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); reader_set_buffer(new_cmd_line, cursor_pos); @@ -3628,38 +3638,49 @@ const wchar_t *reader_readline(void) case R_UP_LINE: case R_DOWN_LINE: { - int line_old = parse_util_get_line_from_offset(data->command_line, data->buff_pos); - int line_new; - - if (c == R_UP_LINE) - line_new = line_old-1; - else - line_new = line_old+1; - - int line_count = parse_util_lineno(data->command_line.c_str(), data->command_length())-1; - - if (line_new >= 0 && line_new <= line_count) + if (is_navigating_pager_contents) { - size_t base_pos_new; - size_t base_pos_old; + if (data->current_pager.select_next_completion_in_direction(c == R_UP_LINE ? direction_north : direction_south, data->current_page_rendering)) + { + reader_repaint(); + } + } + else + { + /* Not navigating the pager contents */ + int line_old = parse_util_get_line_from_offset(data->command_line, data->buff_pos); + int line_new; - int indent_old; - int indent_new; - size_t line_offset_old; - size_t total_offset_new; + if (c == R_UP_LINE) + line_new = line_old-1; + else + line_new = line_old+1; - base_pos_new = parse_util_get_offset_from_line(data->command_line, line_new); + int line_count = parse_util_lineno(data->command_line.c_str(), data->command_length())-1; - base_pos_old = parse_util_get_offset_from_line(data->command_line, line_old); + if (line_new >= 0 && line_new <= line_count) + { + size_t base_pos_new; + size_t base_pos_old; - assert(base_pos_new != (size_t)(-1) && base_pos_old != (size_t)(-1)); - indent_old = data->indents.at(base_pos_old); - indent_new = data->indents.at(base_pos_new); + int indent_old; + int indent_new; + size_t line_offset_old; + size_t total_offset_new; - line_offset_old = data->buff_pos - parse_util_get_offset_from_line(data->command_line, line_old); - total_offset_new = parse_util_get_offset(data->command_line, line_new, line_offset_old - 4*(indent_new-indent_old)); - data->buff_pos = total_offset_new; - reader_repaint(); + base_pos_new = parse_util_get_offset_from_line(data->command_line, line_new); + + base_pos_old = parse_util_get_offset_from_line(data->command_line, line_old); + + assert(base_pos_new != (size_t)(-1) && base_pos_old != (size_t)(-1)); + indent_old = data->indents.at(base_pos_old); + indent_new = data->indents.at(base_pos_new); + + line_offset_old = data->buff_pos - parse_util_get_offset_from_line(data->command_line, line_old); + total_offset_new = parse_util_get_offset(data->command_line, line_new, line_offset_old - 4*(indent_new-indent_old)); + data->buff_pos = total_offset_new; + reader_repaint(); + } } break; diff --git a/screen.cpp b/screen.cpp index 7d402a61e..24c10d105 100644 --- a/screen.cpp +++ b/screen.cpp @@ -1237,7 +1237,7 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const pager_t &pager) + const page_rendering_t &pager) { screen_data_t::cursor_t cursor_arr; @@ -1325,12 +1325,8 @@ void s_write(screen_t *s, s->desired.cursor = cursor_arr; - /* append pager_data */ - if (! pager.empty()) - { - const page_rendering_t rendering = pager.render(); - s->desired.append_lines(rendering.screen_data); - } + /* Append pager_data (none if empty) */ + s->desired.append_lines(pager.screen_data); s_update(s, layout.left_prompt.c_str(), layout.right_prompt.c_str()); s_save_status(s); diff --git a/screen.h b/screen.h index 1419194cc..cfc12ba36 100644 --- a/screen.h +++ b/screen.h @@ -16,7 +16,7 @@ #include #include "highlight.h" -class pager_t; +class page_rendering_t; /** A class representing a single line of a screen. @@ -117,6 +117,11 @@ public: { this->line_datas.insert(this->line_datas.end(), d.line_datas.begin(), d.line_datas.end()); } + + bool empty() const + { + return line_datas.empty(); + } }; /** @@ -205,7 +210,7 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const pager_t &pager_data); + const page_rendering_t &pager_data); /** This function resets the screen buffers internal knowledge about From 32054b6f326abab45c6d1e6047b50e643be49a7b Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 17 Jan 2014 12:53:01 -0800 Subject: [PATCH 008/145] Implement and document new -P / --paging-mode flags to commandline, to support new pager --- builtin_commandline.cpp | 101 +++++++++++++--------------------------- doc_src/commandline.txt | 10 ++++ reader.cpp | 12 ++++- reader.h | 10 +++- 4 files changed, 62 insertions(+), 71 deletions(-) diff --git a/builtin_commandline.cpp b/builtin_commandline.cpp index 8b6c409ac..564eee7bc 100644 --- a/builtin_commandline.cpp +++ b/builtin_commandline.cpp @@ -213,6 +213,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) int cursor_mode = 0; int line_mode = 0; int search_mode = 0; + int paging_mode = 0; const wchar_t *begin, *end; current_buffer = (wchar_t *)builtin_complete_get_temporary_buffer(); @@ -251,71 +252,24 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) static const struct woption long_options[] = { - { - L"append", no_argument, 0, 'a' - } - , - { - L"insert", no_argument, 0, 'i' - } - , - { - L"replace", no_argument, 0, 'r' - } - , - { - L"current-job", no_argument, 0, 'j' - } - , - { - L"current-process", no_argument, 0, 'p' - } - , - { - L"current-token", no_argument, 0, 't' - } - , - { - L"current-buffer", no_argument, 0, 'b' - } - , - { - L"cut-at-cursor", no_argument, 0, 'c' - } - , - { - L"function", no_argument, 0, 'f' - } - , - { - L"tokenize", no_argument, 0, 'o' - } - , - { - L"help", no_argument, 0, 'h' - } - , - { - L"input", required_argument, 0, 'I' - } - , - { - L"cursor", no_argument, 0, 'C' - } - , - { - L"line", no_argument, 0, 'L' - } - , - { - L"search-mode", no_argument, 0, 'S' - } - , - { - 0, 0, 0, 0 - } - } - ; + { L"append", no_argument, 0, 'a' }, + { L"insert", no_argument, 0, 'i' }, + { L"replace", no_argument, 0, 'r' }, + { L"current-job", no_argument, 0, 'j' }, + { L"current-process", no_argument, 0, 'p' }, + { L"current-token", no_argument, 0, 't' }, + { L"current-buffer", no_argument, 0, 'b' }, + { L"cut-at-cursor", no_argument, 0, 'c' }, + { L"function", no_argument, 0, 'f' }, + { L"tokenize", no_argument, 0, 'o' }, + { L"help", no_argument, 0, 'h' }, + { L"input", required_argument, 0, 'I' }, + { L"cursor", no_argument, 0, 'C' }, + { L"line", no_argument, 0, 'L' }, + { L"search-mode", no_argument, 0, 'S' }, + { L"paging-mode", no_argument, 0, 'P' }, + { 0, 0, 0, 0 } + }; int opt_index = 0; @@ -397,6 +351,10 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) case 'S': search_mode = 1; break; + + case 'P': + paging_mode = 1; + break; case 'h': builtin_print_help(parser, argv[0], stdout_buffer); @@ -415,7 +373,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) /* Check for invalid switch combinations */ - if (buffer_part || cut_at_cursor || append_mode || tokenize || cursor_mode || line_mode || search_mode) + if (buffer_part || cut_at_cursor || append_mode || tokenize || cursor_mode || line_mode || search_mode || paging_mode) { append_format(stderr_buffer, BUILTIN_ERR_COMBO, @@ -464,7 +422,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) /* Check for invalid switch combinations */ - if ((search_mode || line_mode || cursor_mode) && (argc-woptind > 1)) + if ((search_mode || line_mode || cursor_mode || paging_mode) && (argc-woptind > 1)) { append_format(stderr_buffer, @@ -475,7 +433,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) return 1; } - if ((buffer_part || tokenize || cut_at_cursor) && (cursor_mode || line_mode || search_mode)) + if ((buffer_part || tokenize || cut_at_cursor) && (cursor_mode || line_mode || search_mode || paging_mode)) { append_format(stderr_buffer, BUILTIN_ERR_COMBO, @@ -564,7 +522,12 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) if (search_mode) { - return !reader_search_mode(); + return ! reader_search_mode(); + } + + if (paging_mode) + { + return ! reader_has_pager_contents(); } diff --git a/doc_src/commandline.txt b/doc_src/commandline.txt index ab771e96d..1d13f79e5 100644 --- a/doc_src/commandline.txt +++ b/doc_src/commandline.txt @@ -57,6 +57,16 @@ If \c commandline is called during a call to complete a given string using complete -C STRING, \c commandline will consider the specified string to be the current contents of the command line. +The following options output metadata about the commandline state: + +- \c -L or \c --line print the line that the cursor is on, with the topmost +line starting at 1 +- \c -S or \c --search-mode evaluates to true if the commandline is performing +a history search +- \c -P or \c --paging-mode evaluates to true if the commandline is showing +pager contents, such as tab completions + + \subsection commandline-example Example commandline -j $history[3] replaces the job under the cursor with the diff --git a/reader.cpp b/reader.cpp index 95fa15bbf..8c6d484e1 100644 --- a/reader.cpp +++ b/reader.cpp @@ -3872,7 +3872,17 @@ int reader_search_mode() return -1; } - return !!data->search_mode; + return !! data->search_mode; +} + +int reader_has_pager_contents() +{ + if (!data) + { + return -1; + } + + return data->current_page_rendering.screen_data.empty() ? 1 : 0; } diff --git a/reader.h b/reader.h index cd32e751b..82694e21b 100644 --- a/reader.h +++ b/reader.h @@ -239,10 +239,18 @@ int reader_shell_test(const wchar_t *b); /** Test whether the interactive reader is in search mode. - \return o if not in search mode, 1 if in search mode and -1 if not in interactive mode + \return 0 if not in search mode, 1 if in search mode and -1 if not in interactive mode */ int reader_search_mode(); +/** + Test whether the interactive reader has visible pager contents. + + \return 0 if it has pager contents, 1 if it does not have pager contents, and -1 if not in interactive mode + */ +int reader_has_pager_contents(); + + /* Given a command line and an autosuggestion, return the string that gets shown to the user. Exposed for testing purposes only. */ wcstring combine_command_and_autosuggestion(const wcstring &cmdline, const wcstring &autosuggestion); From 808bc42f2a75e4af70ae992f6b7c1a4bf59eac50 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 18 Jan 2014 12:42:53 -0800 Subject: [PATCH 009/145] Further work on keyboard navigating the completion list --- Makefile.in | 3 +- common.h | 23 +++- fish.cpp | 2 +- pager.cpp | 215 +++++++++++++++++++++++------- pager.h | 10 +- reader.cpp | 67 +++++----- share/functions/up-or-search.fish | 6 + 7 files changed, 240 insertions(+), 86 deletions(-) diff --git a/Makefile.in b/Makefile.in index c016d9f7a..b67ffac01 100644 --- a/Makefile.in +++ b/Makefile.in @@ -91,7 +91,8 @@ FISH_OBJS := function.o builtin.o complete.o env.o exec.o expand.o \ env_universal.o env_universal_common.o input_common.o event.o \ signal.o io.o parse_util.o common.o screen.o path.o autoload.o \ parser_keywords.o iothread.o color.o postfork.o \ - builtin_test.o parse_tree.o parse_productions.o parse_execution.cpp + builtin_test.o parse_tree.o parse_productions.o parse_execution.cpp \ + pager.cpp FISH_INDENT_OBJS := fish_indent.o print_help.o common.o \ parser_keywords.o wutil.o tokenizer.o diff --git a/common.h b/common.h index f789b7499..2a96b7498 100644 --- a/common.h +++ b/common.h @@ -88,14 +88,33 @@ enum typedef unsigned int escape_flags_t; /* Directions */ -enum cardinal_direction_t +enum selection_direction_t { + /* visual directions */ direction_north, direction_east, direction_south, - direction_west + direction_west, + + /* logical directions */ + direction_next, + direction_prev }; +inline bool selection_direction_is_cardinal(selection_direction_t dir) +{ + switch (dir) + { + case direction_north: + case direction_east: + case direction_south: + case direction_west: + return true; + default: + return false; + } +} + /** Helper macro for errors */ diff --git a/fish.cpp b/fish.cpp index 77686195a..bf6470f8a 100644 --- a/fish.cpp +++ b/fish.cpp @@ -182,7 +182,7 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0) { wcstring base_path = str2wcstring(exec_path); base_path.resize(base_path.size() - strlen(suffix)); - + paths.data = base_path + L"/share/fish"; paths.sysconf = base_path + L"/etc/fish"; paths.doc = base_path + L"/share/doc/fish"; diff --git a/pager.cpp b/pager.cpp index ebf5fc939..4093cca01 100644 --- a/pager.cpp +++ b/pager.cpp @@ -59,6 +59,8 @@ #include "print_help.h" #include "highlight.h" +#define PAGER_SELECTION_NONE ((size_t)(-1)) + typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; typedef std::vector comp_info_list_t; @@ -365,7 +367,9 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i { size_t rows = (lst.size()-1)/cols+1; - + + size_t effective_selected_idx = this->saturated_selected_completion_index(); + for (size_t row = row_start; row < row_stop; row++) { for (size_t col = 0; col < cols; col++) @@ -377,7 +381,7 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i size_t idx = col * rows + row; const comp_t *el = &lst.at(idx); - bool is_selected = (idx == this->selected_completion_idx); + bool is_selected = (idx == effective_selected_idx); /* Print this completion on its own "line" */ line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last?0:2), row%2, is_selected, rendering); @@ -873,7 +877,7 @@ page_rendering_t pager_t::render() const page_rendering_t rendering; rendering.term_width = this->term_width; rendering.term_height = this->term_height; - rendering.selected_completion_idx = this->selected_completion_idx; + rendering.selected_completion_idx = this->saturated_selected_completion_index(); if (! this->empty()) { @@ -913,7 +917,7 @@ page_rendering_t pager_t::render() const void pager_t::update_rendering(page_rendering_t *rendering) const { - if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->selected_completion_idx) + if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->saturated_selected_completion_index()) { *rendering = this->render(); } @@ -928,66 +932,177 @@ bool pager_t::empty() const return completions.empty(); } -void pager_t::set_selected_completion(size_t idx) -{ - this->selected_completion_idx = idx; -} - -bool pager_t::select_next_completion_in_direction(cardinal_direction_t direction, const page_rendering_t &rendering) +const completion_t *pager_t::select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering) { + /* Must have something to select */ + if (completions.empty()) + { + return NULL; + } + /* Handle the case of nothing selected yet */ - if (selected_completion_idx == (size_t)(-1)) + if (selected_completion_idx == PAGER_SELECTION_NONE) { - return false; - } - - /* We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. */ - size_t current_row = selected_completion_idx % rendering.rows; - size_t current_col = selected_completion_idx / rendering.rows; - - switch (direction) - { - case direction_north: + if (selection_direction_is_cardinal(direction)) { - /* Go up a whole row */ - if (current_row > 0) - current_row--; - break; + /* Cardinal directions do nothing unless something is selected */ + return NULL; } - - case direction_south: + else { - /* Go down, unless we are in the last row. Note that this means that we may set selected_completion_idx to an out-of-bounds value if the last row is incomplete; this is a feature (it allows "last column memory"). */ - if (current_row + 1 < rendering.rows) - current_row++; - break; - } - - case direction_east: - { - if (current_col + 1 < rendering.cols) - current_col++; - break; - } - - case direction_west: - { - if (current_col > 0) - current_col--; - break; + /* Forward/backward do something sane */ + selected_completion_idx = (direction == direction_next ? 0 : completions.size() - 1); + return selected_completion(); } } - size_t new_selected_completion_idx = current_col * rendering.rows + current_row; - if (new_selected_completion_idx != selected_completion_idx) + /* Ok, we had something selected already. Select something different. */ + size_t new_selected_completion_idx = selected_completion_idx; + if (! selection_direction_is_cardinal(direction)) { - selected_completion_idx = new_selected_completion_idx; - return true; + /* Next / previous, easy */ + if (direction == direction_next) + { + new_selected_completion_idx = selected_completion_idx + 1; + if (new_selected_completion_idx > completion_infos.size()) + { + new_selected_completion_idx = 0; + } + } + else if (direction == direction_prev) + { + if (selected_completion_idx == 0) + { + new_selected_completion_idx = completion_infos.size() - 1; + } + else + { + new_selected_completion_idx = selected_completion_idx - 1; + } + } + else + { + assert(0 && "Unknown non-cardinal direction"); + } } else { - return false; + /* Cardinal directions. We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. */ + size_t current_row = selected_completion_idx % rendering.rows; + size_t current_col = selected_completion_idx / rendering.rows; + + switch (direction) + { + case direction_north: + { + /* Go up a whole row. If we cycle, go to the previous column. */ + if (current_row > 0) + { + current_row--; + } + else + { + current_row = rendering.rows - 1; + if (current_col > 0) + current_col--; + } + break; + } + + case direction_south: + { + /* Go down, unless we are in the last row. Note that this means that we may set selected_completion_idx to an out-of-bounds value if the last row is incomplete; this is a feature (it allows "last column memory"). */ + if (current_row + 1 < rendering.rows) + { + current_row++; + } + else + { + current_row = 0; + if (current_col + 1 < rendering.cols) + current_col++; + + } + break; + } + + case direction_east: + { + /* Go east, wrapping to the next row */ + if (current_col + 1 < rendering.cols) + { + current_col++; + } + else + { + current_col = 0; + if (current_row + 1 < rendering.rows) + current_row++; + } + break; + } + + case direction_west: + { + /* Go west, wrapping to the previous row */ + if (current_col > 0) + { + current_col--; + } + else + { + current_col = rendering.cols - 1; + if (current_row > 0) + current_row--; + } + break; + } + + default: + assert(0 && "Unknown cardinal direction"); + break; + } + + /* Compute the new index based on the changed row */ + new_selected_completion_idx = current_col * rendering.rows + current_row; } + + if (new_selected_completion_idx != selected_completion_idx) + { + selected_completion_idx = new_selected_completion_idx; + return selected_completion(); + } + else + { + return NULL; + } +} + +size_t pager_t::saturated_selected_completion_index() const +{ + size_t result = selected_completion_idx; + if (result != PAGER_SELECTION_NONE && result >= completions.size()) + { + result = completions.size() - 1; + } + assert(result == PAGER_SELECTION_NONE || result < completions.size()); + return result; +} + +void pager_t::set_selected_completion_index(size_t completion_idx) +{ + selected_completion_idx = completion_idx; +} + +const completion_t *pager_t::selected_completion() const +{ + const completion_t * result = NULL; + size_t idx = saturated_selected_completion_index(); + if (idx != PAGER_SELECTION_NONE) + { + result = &completions.at(idx); + } + return result; } void pager_t::clear() diff --git a/pager.h b/pager.h index e53e919c7..b3561d384 100644 --- a/pager.h +++ b/pager.h @@ -32,6 +32,9 @@ class pager_t size_t selected_completion_idx; + /* Returns the selected completion index, but not to exceed completions.size() */ + size_t saturated_selected_completion_index() const; + /** Data structure describing one or a group of related completions */ public: struct comp_t @@ -86,10 +89,13 @@ class pager_t void set_term_size(int w, int h); /* Sets the index of the selected completion */ - void set_selected_completion(size_t completion_idx); + void set_selected_completion_index(size_t completion_idx); /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns true if the values changed. */ - bool select_next_completion_in_direction(cardinal_direction_t direction, const page_rendering_t &rendering); + const completion_t *select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); + + /* Returns the currently selected completion */ + const completion_t *selected_completion() const; /* Produces a rendering of the completions, at the given term size */ page_rendering_t render() const; diff --git a/reader.cpp b/reader.cpp index 8c6d484e1..f01c9207c 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1525,6 +1525,28 @@ static void accept_autosuggestion(bool full) } } +static bool is_navigating_pager_contents() +{ + return data && data->current_pager.selected_completion() != NULL; +} + +static void select_completion_in_direction(enum selection_direction_t dir, const wcstring &cycle_command_line, size_t cycle_cursor_pos) +{ + const completion_t *next_comp = data->current_pager.select_next_completion_in_direction(dir, data->current_page_rendering); + if (next_comp != NULL) + { + size_t cursor_pos = cycle_cursor_pos; + const wcstring new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); + reader_set_buffer(new_cmd_line, cursor_pos); + + /* Since we just inserted a completion, don't immediately do a new autosuggestion */ + data->suppress_autosuggestion = true; + + /* Trigger repaint (see #765) */ + reader_repaint(); + } +} + /** Flash the screen. This function only changed the color of the current line, since the flash_screen sequnce is rather painful to @@ -2975,9 +2997,6 @@ const wchar_t *reader_readline(void) /* The cycle index in our completion list */ size_t completion_cycle_idx = (size_t)(-1); - - /* Indicates if we are currently navigating pager contents */ - bool is_navigating_pager_contents = false; /* The command line before completion */ wcstring cycle_command_line; @@ -3153,25 +3172,8 @@ const wchar_t *reader_readline(void) if (! comp_empty && last_char == R_COMPLETE) { - /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions */ - const completion_t *next_comp = cycle_competions(comp, cycle_command_line, &completion_cycle_idx); - - data->current_pager.set_selected_completion(completion_cycle_idx); - - if (next_comp != NULL) - { - is_navigating_pager_contents = true; - - size_t cursor_pos = cycle_cursor_pos; - const wcstring new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); - reader_set_buffer(new_cmd_line, cursor_pos); - - /* Since we just inserted a completion, don't immediately do a new autosuggestion */ - data->suppress_autosuggestion = true; - - /* Trigger repaint (see #765) */ - reader_repaint_if_needed(); - } + /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ + select_completion_in_direction(direction_next, cycle_command_line, cycle_cursor_pos); } else { @@ -3555,7 +3557,11 @@ const wchar_t *reader_readline(void) /* Move left*/ case R_BACKWARD_CHAR: { - if (data->buff_pos > 0) + if (is_navigating_pager_contents()) + { + select_completion_in_direction(direction_west, cycle_command_line, cycle_cursor_pos); + } + else if (data->buff_pos > 0) { data->buff_pos--; reader_repaint(); @@ -3566,7 +3572,11 @@ const wchar_t *reader_readline(void) /* Move right*/ case R_FORWARD_CHAR: { - if (data->buff_pos < data->command_length()) + if (is_navigating_pager_contents()) + { + select_completion_in_direction(direction_east, cycle_command_line, cycle_cursor_pos); + } + else if (data->buff_pos < data->command_length()) { data->buff_pos++; reader_repaint(); @@ -3638,12 +3648,9 @@ const wchar_t *reader_readline(void) case R_UP_LINE: case R_DOWN_LINE: { - if (is_navigating_pager_contents) + if (is_navigating_pager_contents()) { - if (data->current_pager.select_next_completion_in_direction(c == R_UP_LINE ? direction_north : direction_south, data->current_page_rendering)) - { - reader_repaint(); - } + select_completion_in_direction(c == R_UP_LINE ? direction_north : direction_south, cycle_command_line, cycle_cursor_pos); } else { @@ -3882,7 +3889,7 @@ int reader_has_pager_contents() return -1; } - return data->current_page_rendering.screen_data.empty() ? 1 : 0; + return ! data->current_page_rendering.screen_data.empty(); } diff --git a/share/functions/up-or-search.fish b/share/functions/up-or-search.fish index fc51d7106..98179ad7c 100644 --- a/share/functions/up-or-search.fish +++ b/share/functions/up-or-search.fish @@ -5,6 +5,12 @@ function up-or-search -d "Depending on cursor position and current mode, either return end + # If we are navigating the pager, then up always navigates + if commandline --paging-mode + commandline -f up-line + return + end + # We are not already in search mode. # If we are on the top line, start search mode, # otherwise move up From d9d65577f4f2f7ca7b3866c10c44136c75d6e6ef Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 19 Jan 2014 16:41:26 -0800 Subject: [PATCH 010/145] Improved navigation of pager list. Added tests for it too. --- fish_tests.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ pager.cpp | 78 +++++++++++++++++++++++++---------------- pager.h | 12 ++++--- reader.cpp | 2 +- screen.h | 11 ++++++ 5 files changed, 163 insertions(+), 35 deletions(-) diff --git a/fish_tests.cpp b/fish_tests.cpp index 8b08365b9..0c04d9631 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -61,6 +61,7 @@ #include "signal.h" #include "parse_tree.h" #include "parse_util.h" +#include "pager.h" static const char * const * s_arguments; static int s_test_run_count = 0; @@ -1174,6 +1175,99 @@ static void test_path() if (! paths_are_equivalent(L"/", L"/")) err(L"Bug in canonical PATH code on line %ld", (long)__LINE__); } +static void test_pager_navigation() +{ + say(L"Testing pager navigation"); + + /* Generate 19 strings of width 10. There's 2 spaces between completions, and our term size is 80; these can therefore fit into 6 columns (6 * 12 - 2 = 70) or 5 columns (58) but not 7 columns (7 * 12 - 2 = 82). + + You can simulate this test by creating 19 files named "file00.txt" through "file_18.txt". + */ + completion_list_t completions; + for (size_t i=0; i < 19; i++) + { + append_completion(completions, L"abcdefghij"); + } + + pager_t pager; + pager.set_completions(completions); + pager.set_term_size(80, 24); + page_rendering_t render = pager.render(); + + if (render.term_width != 80) + err(L"Wrong term width"); + if (render.term_height != 24) + err(L"Wrong term height"); + + size_t rows = 4, cols = 5; + + /* We have 19 completions. We can fit into 6 columns with 4 rows or 5 columns with 4 rows; the second one is better and so is what we ought to have picked. */ + if (render.rows != rows) + err(L"Wrong row count"); + if (render.cols != cols) + err(L"Wrong column count"); + + /* Initially expect to have no completion index */ + if (render.selected_completion_idx != (size_t)(-1)) + { + err(L"Wrong initial selection"); + } + + /* Here are navigation directions and where we expect the selection to be */ + const struct + { + selection_direction_t dir; + size_t sel; + } + cmds[] = + { + /* Tab completion to get into the list */ + {direction_next, 0}, + + /* Westward motion in upper left wraps along the top row */ + {direction_west, 16}, + {direction_east, 1}, + + /* "Next" motion goes down the column */ + {direction_next, 2}, + {direction_next, 3}, + + {direction_west, 18}, + {direction_east, 3}, + {direction_east, 7}, + {direction_east, 11}, + {direction_east, 15}, + {direction_east, 3}, + + {direction_west, 18}, + {direction_east, 3}, + + /* Eastward motion wraps along the bottom, westward goes to the prior column */ + {direction_east, 7}, + {direction_east, 11}, + {direction_east, 15}, + {direction_east, 3}, + + /* Column memory */ + {direction_west, 18}, + {direction_south, 15}, + {direction_north, 18}, + {direction_west, 14}, + {direction_south, 15}, + {direction_north, 14} + }; + for (size_t i=0; i < sizeof cmds / sizeof *cmds; i++) + { + pager.select_next_completion_in_direction(cmds[i].dir, render); + pager.update_rendering(&render); + if (cmds[i].sel != render.selected_completion_idx) + { + err(L"For command %lu, expected selection %lu, but found instead %lu\n", i, cmds[i].sel, render.selected_completion_idx); + } + } + +} + enum word_motion_t { word_motion_left, @@ -2785,6 +2879,7 @@ int main(int argc, char **argv) if (should_test_function("abbreviations")) test_abbreviations(); if (should_test_function("test")) test_test(); if (should_test_function("path")) test_path(); + if (should_test_function("pager_navigation")) test_pager_navigation(); if (should_test_function("word_motion")) test_word_motion(); if (should_test_function("is_potential_path")) test_is_potential_path(); if (should_test_function("colors")) test_colors(); diff --git a/pager.cpp b/pager.cpp index 4093cca01..3d311b858 100644 --- a/pager.cpp +++ b/pager.cpp @@ -320,7 +320,7 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s const wcstring &comp = c->comp.at(i); if (i != 0) - written += print_max(L" ", highlight_spec_normal, comp_width - written, true /* has_more */, &line_data); + written += print_max(PAGER_SPACER_STRING, highlight_spec_normal, comp_width - written, true /* has_more */, &line_data); int packed_color = highlight_spec_pager_prefix | highlight_make_background(bg_color); written += print_max(prefix, packed_color, comp_width - written, ! comp.empty(), &line_data); @@ -332,7 +332,7 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s if (desc_width) { int packed_color = highlight_spec_pager_description | highlight_make_background(bg_color); - while (written < (width-desc_width-2)) + while (written < (width-desc_width-2)) //the 2 here refers to the parenthesis below { written += print_max(L" ", packed_color, 1, false, &line_data); } @@ -368,7 +368,7 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i size_t rows = (lst.size()-1)/cols+1; - size_t effective_selected_idx = this->saturated_selected_completion_index(); + size_t effective_selected_idx = this->visual_selected_completion_index(rows, cols); for (size_t row = row_start; row < row_stop; row++) { @@ -384,13 +384,12 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i bool is_selected = (idx == effective_selected_idx); /* Print this completion on its own "line" */ - line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last?0:2), row%2, is_selected, rendering); + line_t line = completion_print_item(prefix, el, row, col, width_per_column[col] - (is_last ? 0 : PAGER_SPACER_STRING_WIDTH), row%2, is_selected, rendering); /* If there's more to come, append two spaces */ if (col + 1 < cols) { - line.append(L' ', 0); - line.append(L' ', 0); + line.append(PAGER_SPACER_STRING, 0); } /* Append this to the real line */ @@ -660,31 +659,31 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i return PAGER_DONE; /* Calculate how wide the list would be */ - for (long j = 0; j < cols; j++) + for (long col = 0; col < cols; col++) { - for (long i = 0; ipref_width; min = c->min_width; - if (j != cols-1) + if (col != cols-1) { pref += 2; min += 2; } - min_width[j] = maxi(min_width[j], + min_width[col] = maxi(min_width[col], min); - pref_width[j] = maxi(pref_width[j], + pref_width[col] = maxi(pref_width[col], pref); } - min_tot_width += min_width[j]; - pref_tot_width += pref_width[j]; + min_tot_width += min_width[col]; + pref_tot_width += pref_width[col]; } /* Force fit if one column @@ -877,17 +876,32 @@ page_rendering_t pager_t::render() const page_rendering_t rendering; rendering.term_width = this->term_width; rendering.term_height = this->term_height; - rendering.selected_completion_idx = this->saturated_selected_completion_index(); if (! this->empty()) { int cols; - bool done = false; - for (cols = PAGER_MAX_COLS; cols > 0 && ! done; cols--) + for (cols = PAGER_MAX_COLS; cols > 0; cols--) { /* Initially empty rendering */ rendering.screen_data.resize(0); + /* Determine how many rows we would need if we had 'cols' columns. Then determine how many columns we want from that. For example, say we had 19 completions. We can fit them into 6 columns, 4 rows, with the last row containing only 1 entry. Or we can fit them into 5 columns, 4 rows, the last row containing 4 entries. Since fewer columns with the same number of rows is better, skip cases where we know we can do better. */ + size_t min_rows_required_for_cols = divide_round_up(completion_infos.size(), cols); + size_t min_cols_required_for_rows = divide_round_up(completion_infos.size(), min_rows_required_for_cols); + + assert(min_cols_required_for_rows <= cols); + if (min_cols_required_for_rows < cols) + { + /* Next iteration will be better, so skip this one */ + continue; + } + + + rendering.cols = (size_t)cols; + rendering.rows = divide_round_up(completion_infos.size(), rendering.cols); + rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); + + bool done = false; switch (completion_try_print(cols, prefix, completion_infos, &rendering)) { case PAGER_RETRY: @@ -907,17 +921,17 @@ page_rendering_t pager_t::render() const cols=PAGER_MAX_COLS+1; break; } + if (done) + break; } assert(cols >= 0); - rendering.cols = (size_t)cols; - rendering.rows = divide_round_up(completion_infos.size(), rendering.cols); } return rendering; } void pager_t::update_rendering(page_rendering_t *rendering) const { - if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->saturated_selected_completion_index()) + if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols)) { *rendering = this->render(); } @@ -952,7 +966,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc { /* Forward/backward do something sane */ selected_completion_idx = (direction == direction_next ? 0 : completions.size() - 1); - return selected_completion(); + return selected_completion(rendering); } } @@ -1028,8 +1042,8 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc case direction_east: { - /* Go east, wrapping to the next row */ - if (current_col + 1 < rendering.cols) + /* Go east, wrapping to the next row. There is no "row memory," so if we run off the end, wrap. */ + if (current_col + 1 < rendering.cols && (current_col + 1) * rendering.rows + current_row < completion_infos.size()) { current_col++; } @@ -1070,7 +1084,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc if (new_selected_completion_idx != selected_completion_idx) { selected_completion_idx = new_selected_completion_idx; - return selected_completion(); + return selected_completion(rendering); } else { @@ -1078,12 +1092,16 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc } } -size_t pager_t::saturated_selected_completion_index() const +size_t pager_t::visual_selected_completion_index(size_t rows, size_t cols) const { size_t result = selected_completion_idx; - if (result != PAGER_SELECTION_NONE && result >= completions.size()) + if (result != PAGER_SELECTION_NONE) { - result = completions.size() - 1; + /* If the selected completion is beyond the last selection, go left by columns until it's within it. This is how we implement "column memory." */ + while (result >= completions.size() && result >= rows) + { + result -= rows; + } } assert(result == PAGER_SELECTION_NONE || result < completions.size()); return result; @@ -1094,10 +1112,10 @@ void pager_t::set_selected_completion_index(size_t completion_idx) selected_completion_idx = completion_idx; } -const completion_t *pager_t::selected_completion() const +const completion_t *pager_t::selected_completion(const page_rendering_t &rendering) const { const completion_t * result = NULL; - size_t idx = saturated_selected_completion_index(); + size_t idx = visual_selected_completion_index(rendering.rows, rendering.cols); if (idx != PAGER_SELECTION_NONE) { result = &completions.at(idx); diff --git a/pager.h b/pager.h index b3561d384..31dcffbef 100644 --- a/pager.h +++ b/pager.h @@ -20,6 +20,10 @@ class page_rendering_t page_rendering_t(); }; +/* The space between adjacent completions */ +#define PAGER_SPACER_STRING L" " +#define PAGER_SPACER_STRING_WIDTH 2 + typedef std::vector completion_list_t; page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix); @@ -32,8 +36,8 @@ class pager_t size_t selected_completion_idx; - /* Returns the selected completion index, but not to exceed completions.size() */ - size_t saturated_selected_completion_index() const; + /* Returns the index of the completion that should draw selected, using the given number of columns */ + size_t visual_selected_completion_index(size_t rows, size_t cols) const; /** Data structure describing one or a group of related completions */ public: @@ -94,8 +98,8 @@ class pager_t /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns true if the values changed. */ const completion_t *select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); - /* Returns the currently selected completion */ - const completion_t *selected_completion() const; + /* Returns the currently selected completion for the given rendering */ + const completion_t *selected_completion(const page_rendering_t &rendering) const; /* Produces a rendering of the completions, at the given term size */ page_rendering_t render() const; diff --git a/reader.cpp b/reader.cpp index f01c9207c..7e86267f9 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1527,7 +1527,7 @@ static void accept_autosuggestion(bool full) static bool is_navigating_pager_contents() { - return data && data->current_pager.selected_completion() != NULL; + return data && data->current_pager.selected_completion(data->current_page_rendering) != NULL; } static void select_completion_in_direction(enum selection_direction_t dir, const wcstring &cycle_command_line, size_t cycle_cursor_pos) diff --git a/screen.h b/screen.h index cfc12ba36..33eb58ab5 100644 --- a/screen.h +++ b/screen.h @@ -42,6 +42,17 @@ struct line_t text.push_back(txt); colors.push_back(color); } + + void append(const wchar_t *txt, highlight_spec_t color) + { + for (size_t i=0; txt[i]; i++) + { + text.push_back(txt[i]); + colors.push_back(color); + } + } + + size_t size(void) const { From 998ce1fe89800994fb378e5f2c5554dcab6782fb Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 19 Jan 2014 23:52:35 -0800 Subject: [PATCH 011/145] Support for correctly resizing pager contents. --- pager.cpp | 5 ++-- reader.cpp | 84 +++++++++++++++++++++++++----------------------------- 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/pager.cpp b/pager.cpp index 3d311b858..9b1676e90 100644 --- a/pager.cpp +++ b/pager.cpp @@ -937,7 +937,7 @@ void pager_t::update_rendering(page_rendering_t *rendering) const } } -pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(-1) +pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(PAGER_SELECTION_NONE) { } @@ -978,7 +978,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc if (direction == direction_next) { new_selected_completion_idx = selected_completion_idx + 1; - if (new_selected_completion_idx > completion_infos.size()) + if (new_selected_completion_idx >= completion_infos.size()) { new_selected_completion_idx = 0; } @@ -1128,6 +1128,7 @@ void pager_t::clear() completions.clear(); completion_infos.clear(); prefix.clear(); + selected_completion_idx = PAGER_SELECTION_NONE; } page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), selected_completion_idx(-1) diff --git a/reader.cpp b/reader.cpp index 7e86267f9..3df18ca9a 100644 --- a/reader.cpp +++ b/reader.cpp @@ -199,7 +199,7 @@ public: wcstring autosuggestion; /** Current pager */ - pager_t current_pager; + pager_t pager; /** Current page rendering */ page_rendering_t current_page_rendering; @@ -543,8 +543,8 @@ static void reader_repaint() indents.resize(len); // Re-render our completions page if necessary - data->current_pager.set_term_size(common_get_width(), common_get_height()); - data->current_pager.update_rendering(&data->current_page_rendering); + data->pager.set_term_size(common_get_width(), common_get_height()); + data->pager.update_rendering(&data->current_page_rendering); s_write(&data->screen, data->left_prompt_buff, @@ -1527,12 +1527,22 @@ static void accept_autosuggestion(bool full) static bool is_navigating_pager_contents() { - return data && data->current_pager.selected_completion(data->current_page_rendering) != NULL; + return data && data->pager.selected_completion(data->current_page_rendering) != NULL; +} + +/* Ensure we have no pager contents */ +static void clear_pager() +{ + if (data) + { + data->pager.clear(); + data->current_page_rendering = page_rendering_t(); + } } static void select_completion_in_direction(enum selection_direction_t dir, const wcstring &cycle_command_line, size_t cycle_cursor_pos) { - const completion_t *next_comp = data->current_pager.select_next_completion_in_direction(dir, data->current_page_rendering); + const completion_t *next_comp = data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); if (next_comp != NULL) { size_t cursor_pos = cycle_cursor_pos; @@ -1665,40 +1675,6 @@ static void prioritize_completions(std::vector &comp) sort(comp.begin(), comp.end(), compare_completions_by_match_type); } -/* Given a list of completions, get the completion at an index past *inout_idx, and then increment it. inout_idx should be initialized to (size_t)(-1) for the first call. */ -static const completion_t *cycle_competions(const std::vector &comp, const wcstring &command_line, size_t *inout_idx) -{ - const size_t size = comp.size(); - if (size == 0) - return NULL; - - // 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--) - { - /* Bump the index */ - idx = (idx + 1) % size; - - /* Get the completion */ - const completion_t &c = comp.at(idx); - - /* Try this completion */ - if (!(c.flags & COMPLETE_REPLACES_TOKEN) || reader_can_replace(command_line, c.flags)) - { - /* Success */ - result = &c; - break; - } - } - - *inout_idx = idx; - return result; -} - /** Handle the list of completions. This means the following: @@ -1887,8 +1863,8 @@ static bool handle_completions(const std::vector &comp) if (1) { - data->current_pager.set_prefix(prefix); - data->current_pager.set_completions(surviving_completions); + data->pager.set_prefix(prefix); + data->pager.set_completions(surviving_completions); /* Invalidate our rendering */ data->current_page_rendering = page_rendering_t(); @@ -3082,8 +3058,26 @@ const wchar_t *reader_readline(void) if (last_char != R_YANK && last_char != R_YANK_POP) yank_len=0; + + /* We clear pager contents for most events, except for a few */ + switch (c) + { + case R_COMPLETE: + case R_BACKWARD_CHAR: + case R_FORWARD_CHAR: + case R_UP_LINE: + case R_DOWN_LINE: + case R_NULL: + case R_REPAINT: + case R_SUPPRESS_AUTOSUGGESTION: + break; + + default: + clear_pager(); + break; + } - const wchar_t *buff = data->command_line.c_str(); + const wchar_t * const buff = data->command_line.c_str(); switch (c) { @@ -3170,7 +3164,7 @@ const wchar_t *reader_readline(void) if (!data->complete_func) break; - if (! comp_empty && last_char == R_COMPLETE) + if (is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) { /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ select_completion_in_direction(direction_next, cycle_command_line, cycle_cursor_pos); @@ -3852,11 +3846,11 @@ const wchar_t *reader_readline(void) writestr(L"\n"); /* Ensure we have no pager contents when we exit */ - if (! data->current_pager.empty()) + if (! data->pager.empty()) { /* Clear to end of screen to erase the pager contents. TODO: this may fail if eos doesn't exist, in which case we should emit newlines */ screen_force_clear_to_end(); - data->current_pager.clear(); + data->pager.clear(); } if (!reader_exit_forced()) From 605c306bef3de7c2894130d856c837ca82905549 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 20 Jan 2014 12:38:56 -0800 Subject: [PATCH 012/145] Correctly clear pager contents on ctrl-C --- reader.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/reader.cpp b/reader.cpp index 3df18ca9a..14d480a18 100644 --- a/reader.cpp +++ b/reader.cpp @@ -362,6 +362,9 @@ public: } }; +/* Sets the command line contents, without clearing the pager */ +static void reader_set_buffer_maintaining_pager(const wcstring &b, size_t pos); + /** The current interactive reading context */ @@ -1211,7 +1214,7 @@ static void completion_insert(const wchar_t *val, complete_flags_t flags) { size_t cursor = data->buff_pos; wcstring new_command_line = completion_apply_to_command_line(val, flags, data->command_line, &cursor, false /* not append only */); - reader_set_buffer(new_command_line, cursor); + reader_set_buffer_maintaining_pager(new_command_line, cursor); /* Since we just inserted a completion, don't immediately do a new autosuggestion */ data->suppress_autosuggestion = true; @@ -1547,7 +1550,7 @@ static void select_completion_in_direction(enum selection_direction_t dir, const { size_t cursor_pos = cycle_cursor_pos; const wcstring new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); - reader_set_buffer(new_cmd_line, cursor_pos); + reader_set_buffer_maintaining_pager(new_cmd_line, cursor_pos); /* Since we just inserted a completion, don't immediately do a new autosuggestion */ data->suppress_autosuggestion = true; @@ -2376,11 +2379,9 @@ history_t *reader_get_history(void) return data ? data->history : NULL; } -void reader_set_buffer(const wcstring &b, size_t pos) +/* Sets the command line contents, without clearing the pager */ +static void reader_set_buffer_maintaining_pager(const wcstring &b, size_t pos) { - if (!data) - return; - /* Callers like to pass us pointers into ourselves, so be careful! I don't know if we can use operator= with a pointer to our interior, so use an intermediate. */ size_t command_line_len = b.size(); data->command_line = b; @@ -2391,15 +2392,26 @@ void reader_set_buffer(const wcstring &b, size_t pos) pos = command_line_len; data->buff_pos = pos; - + + /* Clear history search and pager contents */ data->search_mode = NO_SEARCH; data->search_buff.clear(); data->history_search.go_to_end(); - + reader_super_highlight_me_plenty(data->buff_pos); reader_repaint_needed(); } +/* Sets the command line contents, clearing the pager */ +void reader_set_buffer(const wcstring &b, size_t pos) +{ + if (!data) + return; + + clear_pager(); + reader_set_buffer_maintaining_pager(b, pos); +} + size_t reader_get_cursor_pos() { From f714d80c93f25da00e942f1dd8625529090c3193 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 21 Jan 2014 14:35:18 -0800 Subject: [PATCH 013/145] Support for scrolling through the pager --- pager.cpp | 89 +++++++++++++++++++++++++++++++++++++++++++----------- pager.h | 9 ++++-- reader.cpp | 2 +- 3 files changed, 78 insertions(+), 22 deletions(-) diff --git a/pager.cpp b/pager.cpp index 9b1676e90..0960fe507 100644 --- a/pager.cpp +++ b/pager.cpp @@ -363,8 +363,13 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s \param prefix The string to print before each completion */ -void pager_t::completion_print(int cols, int *width_per_column, int row_start, int row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const +void pager_t::completion_print(size_t cols, int *width_per_column, size_t row_start, size_t row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const { + /* Teach the rendering about the rows it printed */ + assert(row_start >= 0); + assert(row_stop >= row_start); + rendering->row_start = row_start; + rendering->row_end = row_stop; size_t rows = (lst.size()-1)/cols+1; @@ -393,7 +398,7 @@ void pager_t::completion_print(int cols, int *width_per_column, int row_start, i } /* Append this to the real line */ - rendering->screen_data.create_line(row).append_line(line); + rendering->screen_data.create_line(row - row_start).append_line(line); } } } @@ -629,7 +634,7 @@ void pager_t::set_term_size(int w, int h) \return one of PAGER_RETRY, PAGER_DONE and PAGER_RESIZE */ -int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const +int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const { /* The calculated preferred width of each column @@ -648,7 +653,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i */ int print=0; - int rows = (int)divide_round_up(lst.size(), cols); + size_t row_count = divide_round_up(lst.size(), cols); int pref_tot_width=0; int min_tot_width = 0; @@ -661,14 +666,14 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i /* Calculate how wide the list would be */ for (long col = 0; col < cols; col++) { - for (long row = 0; rowpref_width; min = c->min_width; @@ -714,7 +719,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i pref_tot_width-term_width ); */ if (min_tot_width < term_width && - (((rows < term_height) && (next_rows >= term_height)) || + (((row_count < term_height) && (next_rows >= term_height)) || (pref_tot_width-term_width< 4 && cols < 3))) { /* @@ -754,13 +759,39 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i if (print) { - res=PAGER_DONE; - if (rows < term_height) + /* Determine the starting and stop row */ + size_t start_row = 0, stop_row = 0; + if (row_count <= term_height) { - completion_print(cols, width, 0, rows, prefix, lst, rendering); + /* Easy, we can show everything */ + start_row = 0; + stop_row = row_count; } else { + /* We can only show part of the full list. Determine which part based on the suggested_start_row */ + assert(row_count > term_height); + size_t last_starting_row = row_count - term_height; + start_row = mini(suggested_start_row, last_starting_row); + stop_row = start_row + term_height; + assert(start_row >= 0 && start_row <= last_starting_row); + } + + assert(stop_row >= start_row); + assert(stop_row <= row_count); + assert(stop_row - start_row <= term_height); + completion_print(cols, width, start_row, stop_row, prefix, lst, rendering); + return PAGER_DONE; + + res=PAGER_DONE; + if (row_count < term_height) + { + completion_print(cols, width, 0, row_count, prefix, lst, rendering); + } + else + { + completion_print(cols, width, 0, term_height - 1, prefix, lst, rendering); + assert(0); int npos, pos = 0; int do_loop = 1; @@ -771,7 +802,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i while (do_loop) { set_color(rgb_color_t::black(), highlight_get_color(highlight_spec_pager_progress, true)); - wcstring msg = format_string(_(L" %d to %d of %d"), pos, pos+term_height-1, rows); + wcstring msg = format_string(_(L" %d to %d of %d"), pos, pos+term_height-1, row_count); msg.append(L" \r"); writestr(msg.c_str()); @@ -798,7 +829,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i case LINE_DOWN: { - if (pos <= (rows - term_height)) + if (pos <= (row_count - term_height)) { pos++; completion_print(cols, width, pos+term_height-2, pos+term_height-1, prefix, lst, rendering); @@ -809,7 +840,7 @@ int pager_t::completion_try_print(int cols, const wcstring &prefix, const comp_i case PAGE_DOWN: { - npos = mini((int)(rows - term_height+1), (int)(pos + term_height-1)); + npos = mini((int)(row_count - term_height+1), (int)(pos + term_height-1)); if (npos != pos) { pos = npos; @@ -902,7 +933,7 @@ page_rendering_t pager_t::render() const rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); bool done = false; - switch (completion_try_print(cols, prefix, completion_infos, &rendering)) + switch (completion_try_print(cols, prefix, completion_infos, &rendering, suggested_row_start)) { case PAGER_RETRY: break; @@ -937,7 +968,7 @@ void pager_t::update_rendering(page_rendering_t *rendering) const } } -pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(PAGER_SELECTION_NONE) +pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(PAGER_SELECTION_NONE), suggested_row_start(0) { } @@ -1001,7 +1032,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc } else { - /* Cardinal directions. We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. */ + /* Cardinal directions. We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ size_t current_row = selected_completion_idx % rendering.rows; size_t current_col = selected_completion_idx / rendering.rows; @@ -1084,6 +1115,28 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc if (new_selected_completion_idx != selected_completion_idx) { selected_completion_idx = new_selected_completion_idx; + + /* Update suggested_row_start to ensure the selection is visible. suggested_row_start * rendering.cols is the first suggested visible completion; add the visible completion count to that to get the last one */ + size_t visible_row_count = rendering.row_end - rendering.row_start; + + if (visible_row_count > 0 && selected_completion_idx != PAGER_SELECTION_NONE) //paranoia + { + size_t row_containing_selection = selected_completion_idx % rendering.rows; + + /* Ensure our suggested row start is not past the selected row */ + if (suggested_row_start > row_containing_selection) + { + suggested_row_start = row_containing_selection; + } + + /* Ensure our suggested row start is not too early before it */ + if (suggested_row_start + visible_row_count <= row_containing_selection) + { + suggested_row_start = row_containing_selection - visible_row_count + 1; + } + } + + return selected_completion(rendering); } else @@ -1131,6 +1184,6 @@ void pager_t::clear() selected_completion_idx = PAGER_SELECTION_NONE; } -page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), selected_completion_idx(-1) +page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1) { } diff --git a/pager.h b/pager.h index 31dcffbef..9a3c022ca 100644 --- a/pager.h +++ b/pager.h @@ -13,6 +13,8 @@ class page_rendering_t int term_height; size_t rows; size_t cols; + size_t row_start; + size_t row_end; size_t selected_completion_idx; screen_data_t screen_data; @@ -35,6 +37,7 @@ class pager_t completion_list_t completions; size_t selected_completion_idx; + size_t suggested_row_start; /* Returns the index of the completion that should draw selected, using the given number of columns */ size_t visual_selected_completion_index(size_t rows, size_t cols) const; @@ -72,12 +75,12 @@ class pager_t wcstring prefix; - int completion_try_print(int cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; + int completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const; void recalc_min_widths(comp_info_list_t * lst) const; void measure_completion_infos(std::vector *infos, const wcstring &prefix) const; - void completion_print(int cols, int *width_per_column, int row_start, int row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; + void completion_print(size_t cols, int *width_per_column, size_t row_start, size_t row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; line_t completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, bool selected, page_rendering_t *rendering) const; @@ -95,7 +98,7 @@ class pager_t /* Sets the index of the selected completion */ void set_selected_completion_index(size_t completion_idx); - /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns true if the values changed. */ + /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns the newly selected completion if it changed, NULL if nothing was selected or it did not change. */ const completion_t *select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); /* Returns the currently selected completion for the given rendering */ diff --git a/reader.cpp b/reader.cpp index 14d480a18..76c5490a6 100644 --- a/reader.cpp +++ b/reader.cpp @@ -546,7 +546,7 @@ static void reader_repaint() indents.resize(len); // Re-render our completions page if necessary - data->pager.set_term_size(common_get_width(), common_get_height()); + data->pager.set_term_size(common_get_width(), 8 /* common_get_height() */); data->pager.update_rendering(&data->current_page_rendering); s_write(&data->screen, From 9edf9ad2acb61a3d7e523c4903abda62655e45c9 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 21 Jan 2014 16:08:35 -0800 Subject: [PATCH 014/145] Correct the correspondence between name_arr and the input codes. --- input.cpp | 23 ++++++++++++++--------- input.h | 8 +++++--- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/input.cpp b/input.cpp index 51f658afc..8327de38d 100644 --- a/input.cpp +++ b/input.cpp @@ -111,7 +111,6 @@ static const wchar_t * const name_arr[] = L"kill-word", L"backward-kill-word", L"backward-kill-path-component", - L"dump-functions", L"history-token-search-backward", L"history-token-search-forward", L"self-insert", @@ -120,9 +119,8 @@ static const wchar_t * const name_arr[] = L"upcase-word", L"downcase-word", L"capitalize-word", - L"null", - L"eof", L"vi-arg-digit", + L"vi-delete-to", L"execute", L"beginning-of-buffer", L"end-of-buffer", @@ -131,8 +129,18 @@ static const wchar_t * const name_arr[] = L"down-line", L"suppress-autosuggestion", L"accept-autosuggestion" +}; + +wcstring describe_char(wchar_t c) +{ + wchar_t initial_cmd_char = R_BEGINNING_OF_LINE; + size_t name_count = sizeof name_arr / sizeof *name_arr; + if (c >= initial_cmd_char && c < initial_cmd_char + name_count) + { + return format_string(L"%02x (%ls)", c, name_arr[c - initial_cmd_char]); + } + return format_string(L"%02x", c); } -; /** Description of each supported input function @@ -200,7 +208,6 @@ static const wchar_t code_arr[] = R_KILL_WORD, R_BACKWARD_KILL_WORD, R_BACKWARD_KILL_PATH_COMPONENT, - R_DUMP_FUNCTIONS, R_HISTORY_TOKEN_SEARCH_BACKWARD, R_HISTORY_TOKEN_SEARCH_FORWARD, R_SELF_INSERT, @@ -209,9 +216,8 @@ static const wchar_t code_arr[] = R_UPCASE_WORD, R_DOWNCASE_WORD, R_CAPITALIZE_WORD, - R_NULL, - R_EOF, R_VI_ARG_DIGIT, + R_VI_DELETE_TO, R_EXECUTE, R_BEGINNING_OF_BUFFER, R_END_OF_BUFFER, @@ -220,8 +226,7 @@ static const wchar_t code_arr[] = R_DOWN_LINE, R_SUPPRESS_AUTOSUGGESTION, R_ACCEPT_AUTOSUGGESTION -} -; +}; /** Mappings for the current input mode */ static std::vector mapping_list; diff --git a/input.h b/input.h index c5722b2fc..3818859ba 100644 --- a/input.h +++ b/input.h @@ -14,6 +14,8 @@ inputrc information for key bindings. /** Key codes for inputrc-style keyboard functions that are passed on to the caller of input_read() + + NOTE: IF YOU MODIFY THIS YOU MUST UPDATE THE name_arr AND code_arr VARIABLES TO MATCH! */ enum { @@ -38,7 +40,6 @@ enum R_KILL_WORD, R_BACKWARD_KILL_WORD, R_BACKWARD_KILL_PATH_COMPONENT, - R_DUMP_FUNCTIONS, R_HISTORY_TOKEN_SEARCH_BACKWARD, R_HISTORY_TOKEN_SEARCH_FORWARD, R_SELF_INSERT, @@ -57,8 +58,9 @@ enum R_DOWN_LINE, R_SUPPRESS_AUTOSUGGESTION, R_ACCEPT_AUTOSUGGESTION -} -; +}; + +wcstring describe_char(wchar_t c); /** Initialize the terminal by calling setupterm, and set up arrays From ee9a4082b6a313dc15fcb24801cc54937777c662 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 21 Jan 2014 16:25:55 -0800 Subject: [PATCH 015/145] Allow down arrow to enter pager. Clean up repainting within reader_readline --- pager.cpp | 30 +++++++++++++++++++++--------- reader.cpp | 37 +++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/pager.cpp b/pager.cpp index 0960fe507..b1fc92265 100644 --- a/pager.cpp +++ b/pager.cpp @@ -988,16 +988,28 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc /* Handle the case of nothing selected yet */ if (selected_completion_idx == PAGER_SELECTION_NONE) { - if (selection_direction_is_cardinal(direction)) + switch (direction) { - /* Cardinal directions do nothing unless something is selected */ - return NULL; - } - else - { - /* Forward/backward do something sane */ - selected_completion_idx = (direction == direction_next ? 0 : completions.size() - 1); - return selected_completion(rendering); + /* These directions do something sane */ + case direction_south: + case direction_next: + case direction_prev: + if (direction == direction_prev) + { + selected_completion_idx = completions.size() - 1; + } + else + { + selected_completion_idx = 0; + } + return selected_completion(rendering); + + /* These do nothing */ + case direction_north: + case direction_east: + case direction_west: + default: + return NULL; } } diff --git a/reader.cpp b/reader.cpp index 76c5490a6..fe06a386e 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1540,6 +1540,7 @@ static void clear_pager() { data->pager.clear(); data->current_page_rendering = page_rendering_t(); + reader_repaint_needed(); } } @@ -3088,6 +3089,8 @@ const wchar_t *reader_readline(void) clear_pager(); break; } + + //fprintf(stderr, "\n\nchar: %ls\n\n", describe_char(c).c_str()); const wchar_t * const buff = data->command_line.c_str(); switch (c) @@ -3102,7 +3105,7 @@ const wchar_t *reader_readline(void) data->buff_pos--; } - reader_repaint(); + reader_repaint_needed(); break; } @@ -3121,7 +3124,7 @@ const wchar_t *reader_readline(void) accept_autosuggestion(true); } - reader_repaint(); + reader_repaint_needed(); break; } @@ -3130,7 +3133,7 @@ const wchar_t *reader_readline(void) { data->buff_pos = 0; - reader_repaint(); + reader_repaint_needed(); break; } @@ -3139,13 +3142,12 @@ const wchar_t *reader_readline(void) { data->buff_pos = data->command_length(); - reader_repaint(); + reader_repaint_needed(); break; } case R_NULL: { - reader_repaint_if_needed(); break; } @@ -3236,9 +3238,6 @@ const wchar_t *reader_readline(void) /* Start the cycle at the beginning */ completion_cycle_idx = (size_t)(-1); - - /* Repaint */ - reader_repaint_if_needed(); } break; @@ -3370,8 +3369,7 @@ const wchar_t *reader_readline(void) } data->search_buff.clear(); reader_super_highlight_me_plenty(data->buff_pos); - reader_repaint(); - + reader_repaint_needed(); } break; @@ -3445,7 +3443,7 @@ const wchar_t *reader_readline(void) } finished=1; data->buff_pos=data->command_length(); - reader_repaint(); + reader_repaint_needed(); break; } @@ -3466,7 +3464,7 @@ const wchar_t *reader_readline(void) default: { s_reset(&data->screen, screen_reset_abandon_line); - reader_repaint(); + reader_repaint_needed(); break; } @@ -3570,7 +3568,7 @@ const wchar_t *reader_readline(void) else if (data->buff_pos > 0) { data->buff_pos--; - reader_repaint(); + reader_repaint_needed(); } break; } @@ -3585,7 +3583,7 @@ const wchar_t *reader_readline(void) else if (data->buff_pos < data->command_length()) { data->buff_pos++; - reader_repaint(); + reader_repaint_needed(); } else { @@ -3654,7 +3652,8 @@ const wchar_t *reader_readline(void) case R_UP_LINE: case R_DOWN_LINE: { - if (is_navigating_pager_contents()) + /* If we are already navigating the pager, or if we pressed down with non-empty pager contents, begin navigation */ + if (is_navigating_pager_contents() || (c == R_DOWN_LINE && ! data->pager.empty())) { select_completion_in_direction(c == R_UP_LINE ? direction_north : direction_south, cycle_command_line, cycle_cursor_pos); } @@ -3692,7 +3691,7 @@ const wchar_t *reader_readline(void) line_offset_old = data->buff_pos - parse_util_get_offset_from_line(data->command_line, line_old); total_offset_new = parse_util_get_offset(data->command_line, line_new, line_offset_old - 4*(indent_new-indent_old)); data->buff_pos = total_offset_new; - reader_repaint(); + reader_repaint_needed(); } } @@ -3703,7 +3702,7 @@ const wchar_t *reader_readline(void) { data->suppress_autosuggestion = true; data->autosuggestion.clear(); - reader_repaint(); + reader_repaint_needed(); break; } @@ -3811,7 +3810,7 @@ const wchar_t *reader_readline(void) } data->command_line_changed(); reader_super_highlight_me_plenty(data->buff_pos); - reader_repaint(); + reader_repaint_needed(); break; } @@ -3853,6 +3852,8 @@ const wchar_t *reader_readline(void) } last_char = c; + + reader_repaint_if_needed(); } writestr(L"\n"); From 7d3f808e4c48d3cb54cb603b94901eaa6078b70c Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 22 Jan 2014 17:45:27 -0800 Subject: [PATCH 016/145] Various tweaks and improvements to new pager, including disclosure feature --- highlight.cpp | 9 ++++--- highlight.h | 3 ++- pager.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++--------- pager.h | 12 +++++++-- reader.cpp | 3 ++- 5 files changed, 82 insertions(+), 19 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index 31ea2c8e0..f2ae460c0 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -361,7 +361,10 @@ bool plain_statement_get_expanded_command(const wcstring &src, const parse_node_ rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background) { rgb_color_t result = rgb_color_t::normal(); - + + /* If sloppy_background is set, then we look at the foreground color even if is_background is set */ + bool treat_as_background = is_background && ! (highlight & highlight_modifier_sloppy_background); + /* Get the primary variable */ size_t idx = highlight_get_primary(highlight); if (idx >= VAR_COUNT) @@ -377,9 +380,9 @@ rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background) val_wstr = env_get_string(highlight_var[0]); if (! val_wstr.missing()) - result = parse_color(val_wstr, is_background); + result = parse_color(val_wstr, treat_as_background); - /* Handle modifiers. Just one for now */ + /* Handle modifiers. */ if (highlight & highlight_modifier_valid_path) { env_var_t val2_wstr = env_get_string(L"fish_color_valid_path"); diff --git a/highlight.h b/highlight.h index 9b191a78b..dfe3f9310 100644 --- a/highlight.h +++ b/highlight.h @@ -40,6 +40,7 @@ enum /* The following values are modifiers */ highlight_modifier_valid_path = 0x100, + highlight_modifier_sloppy_background = 0x200, //hackish, indicates that we should treat a foreground color as background, per certain historical behavior /* Very special value */ highlight_spec_invalid = 0xFFFF @@ -54,7 +55,7 @@ inline highlight_spec_t highlight_get_primary(highlight_spec_t val) inline highlight_spec_t highlight_make_background(highlight_spec_t val) { - assert(val >> 16 == 0); + assert(val >> 16 == 0); //should have nothing in upper bits, otherwise this is already a background return val << 16; } diff --git a/pager.cpp b/pager.cpp index b1fc92265..b08e8359e 100644 --- a/pager.cpp +++ b/pager.cpp @@ -142,8 +142,8 @@ void pager_t::recalc_min_widths(comp_info_list_t * lst) const { comp_t *c = &lst->at(i); - c->min_width = mini(c->desc_width, maxi(0, term_width/3 - 2)) + - mini(c->desc_width, maxi(0, term_width/5 - 4)) +4; + c->min_width = mini(c->desc_width, maxi(0, available_term_width/3 - 2)) + + mini(c->desc_width, maxi(0, available_term_width/5 - 4)) +4; } } @@ -613,8 +613,8 @@ void pager_t::set_term_size(int w, int h) { assert(w > 0); assert(h > 0); - term_width = w; - term_height = h; + available_term_width = w; + available_term_height = h; } /** @@ -652,8 +652,24 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com Set to one if the list should be printed at this width */ int print=0; + + /* Compute the effective term width and term height, accounting for disclosure */ + int term_width = this->available_term_width; + int term_height = this->available_term_height - 1; // we always subtract 1 to make room for a comment row + if (! this->fully_disclosed) + term_height = mini(term_height, PAGER_UNDISCLOSED_MAX_ROWS); size_t row_count = divide_round_up(lst.size(), cols); + + /* We have more to disclose if we are not fully disclosed and there's more rows than we have in our term height */ + if (! this->fully_disclosed && row_count > term_height) + { + rendering->remaining_to_disclose = row_count - term_height; + } + else + { + rendering->remaining_to_disclose = 0; + } int pref_tot_width=0; int min_tot_width = 0; @@ -781,6 +797,26 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com assert(stop_row <= row_count); assert(stop_row - start_row <= term_height); completion_print(cols, width, start_row, stop_row, prefix, lst, rendering); + + /* Add the progress line. It's a "more to disclose" line if necessary. */ + wcstring progress_text; + if (rendering->remaining_to_disclose == 1) + { + /* I don't expect this case to ever happen */ + progress_text = L"and 1 more row"; + } + else if (rendering->remaining_to_disclose > 1) + { + progress_text = format_string(L"and %lu more rows", (unsigned long)rendering->remaining_to_disclose); + } + else + { + /* The +1 here is because we are zero indexed, but want to present things as 1-indexed. We do not add 1 to stop_row or row_count because these are the "past the last value" */ + progress_text = format_string(L"rows %lu to %lu of %lu", start_row + 1, stop_row, row_count); + } + line_t &line = rendering->screen_data.add_line(); + print_max(progress_text.c_str(), highlight_spec_pager_progress | highlight_make_background(highlight_spec_pager_progress), term_width, true /* has_more */, &line); + return PAGER_DONE; res=PAGER_DONE; @@ -905,8 +941,8 @@ page_rendering_t pager_t::render() const column never fails. */ page_rendering_t rendering; - rendering.term_width = this->term_width; - rendering.term_height = this->term_height; + rendering.term_width = this->available_term_width; + rendering.term_height = this->available_term_height; if (! this->empty()) { @@ -926,10 +962,9 @@ page_rendering_t pager_t::render() const /* Next iteration will be better, so skip this one */ continue; } - rendering.cols = (size_t)cols; - rendering.rows = divide_round_up(completion_infos.size(), rendering.cols); + rendering.rows = min_rows_required_for_cols; rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); bool done = false; @@ -962,13 +997,13 @@ page_rendering_t pager_t::render() const void pager_t::update_rendering(page_rendering_t *rendering) const { - if (rendering->term_width != this->term_width || rendering->term_height != this->term_height || rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols)) + if (rendering->term_width != this->available_term_width || rendering->term_height != this->available_term_height || rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols)) { *rendering = this->render(); } } -pager_t::pager_t() : term_width(0), term_height(0), selected_completion_idx(PAGER_SELECTION_NONE), suggested_row_start(0) +pager_t::pager_t() : available_term_width(0), available_term_height(0), selected_completion_idx(PAGER_SELECTION_NONE), suggested_row_start(0), fully_disclosed(false) { } @@ -1135,6 +1170,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc { size_t row_containing_selection = selected_completion_idx % rendering.rows; + /* Ensure our suggested row start is not past the selected row */ if (suggested_row_start > row_containing_selection) { @@ -1144,7 +1180,20 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc /* Ensure our suggested row start is not too early before it */ if (suggested_row_start + visible_row_count <= row_containing_selection) { - suggested_row_start = row_containing_selection - visible_row_count + 1; + /* The user moved south past the bottom completion */ + if (! fully_disclosed && rendering.remaining_to_disclose > 0) + { + /* Perform disclosure */ + fully_disclosed = true; + } + else + { + /* Scroll */ + suggested_row_start = row_containing_selection - visible_row_count + 1; + + /* Ensure fully_disclosed is set. I think we can hit this case if the user resizes the window - we don't want to drop back to the disclosed style */ + fully_disclosed = true; + } } } @@ -1194,8 +1243,9 @@ void pager_t::clear() completion_infos.clear(); prefix.clear(); selected_completion_idx = PAGER_SELECTION_NONE; + fully_disclosed = false; } -page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1) +page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1), remaining_to_disclose(0) { } diff --git a/pager.h b/pager.h index 9a3c022ca..df2d00d26 100644 --- a/pager.h +++ b/pager.h @@ -18,6 +18,8 @@ class page_rendering_t size_t selected_completion_idx; screen_data_t screen_data; + size_t remaining_to_disclose; + /* Returns a rendering with invalid data, useful to indicate "no rendering" */ page_rendering_t(); }; @@ -26,19 +28,25 @@ class page_rendering_t #define PAGER_SPACER_STRING L" " #define PAGER_SPACER_STRING_WIDTH 2 +/* How many rows we will show in the "initial" pager */ +#define PAGER_UNDISCLOSED_MAX_ROWS 4 + typedef std::vector completion_list_t; page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix); class pager_t { - int term_width; - int term_height; + int available_term_width; + int available_term_height; completion_list_t completions; size_t selected_completion_idx; size_t suggested_row_start; + /* Fully disclosed means that we show all completions */ + bool fully_disclosed; + /* Returns the index of the completion that should draw selected, using the given number of columns */ size_t visual_selected_completion_index(size_t rows, size_t cols) const; diff --git a/reader.cpp b/reader.cpp index fe06a386e..d1ad4bf4e 100644 --- a/reader.cpp +++ b/reader.cpp @@ -546,7 +546,8 @@ static void reader_repaint() indents.resize(len); // Re-render our completions page if necessary - data->pager.set_term_size(common_get_width(), 8 /* common_get_height() */); + // We set the term size to 1 less than the true term height. This means we will always show the (bottom) line of the prompt. + data->pager.set_term_size(maxi(1, common_get_width()), maxi(1, common_get_height() - 1)); data->pager.update_rendering(&data->current_page_rendering); s_write(&data->screen, From 0f2ee308deefcc4e796bece6deae1ad383a22427 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 22 Jan 2014 17:50:03 -0800 Subject: [PATCH 017/145] Use ellipsis in pager progress message --- pager.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pager.cpp b/pager.cpp index b08e8359e..40a5c9dd6 100644 --- a/pager.cpp +++ b/pager.cpp @@ -798,16 +798,19 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com assert(stop_row - start_row <= term_height); completion_print(cols, width, start_row, stop_row, prefix, lst, rendering); + /* Ellipsis helper string. Either empty or containing the ellipsis char */ + const wchar_t ellipsis_string[] = {ellipsis_char == L'\x2026' ? L'\x2026' : L'\0', L'\0'}; + /* Add the progress line. It's a "more to disclose" line if necessary. */ wcstring progress_text; if (rendering->remaining_to_disclose == 1) { /* I don't expect this case to ever happen */ - progress_text = L"and 1 more row"; + progress_text = format_string(L"%lsand 1 more row", ellipsis_string); } else if (rendering->remaining_to_disclose > 1) { - progress_text = format_string(L"and %lu more rows", (unsigned long)rendering->remaining_to_disclose); + progress_text = format_string(L"%lsand %lu more rows", ellipsis_string, (unsigned long)rendering->remaining_to_disclose); } else { From f6afddd94bd3f47e414033746d038c5b222b63a3 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 23 Jan 2014 18:07:21 -0800 Subject: [PATCH 018/145] Fix for tab-completing arguments. Closes #1261 --- complete.cpp | 8 ++++++-- fish_tests.cpp | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/complete.cpp b/complete.cpp index e5b775768..d38104dd5 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1847,9 +1847,13 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps parse_node_tree_t tree; parse_tree_from_string(cmd, parse_flag_continue_after_error | parse_flag_accept_incomplete_tokens, &tree, NULL); + + /* Find the plain statement that contains the position. We have to backtrack past spaces (#1261). So this will be at either the last space character, or after the end of the string */ + size_t adjusted_pos = pos; + while (adjusted_pos > 0 && cmd.at(adjusted_pos - 1) == L' ') + adjusted_pos--; - /* Find the plain statement that contains the position */ - const parse_node_t *plain_statement = tree.find_node_matching_source_location(symbol_plain_statement, pos, NULL); + const parse_node_t *plain_statement = tree.find_node_matching_source_location(symbol_plain_statement, adjusted_pos, NULL); if (plain_statement != NULL) { assert(plain_statement->has_source() && plain_statement->type == symbol_plain_statement); diff --git a/fish_tests.cpp b/fish_tests.cpp index 8b08365b9..c87bee69d 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -1510,6 +1510,14 @@ static void test_complete(void) completions.clear(); complete(L"echo (builtin scuttlebut", completions, COMPLETION_REQUEST_DEFAULT); assert(completions.size() == 0); + + /* Trailing spaces (#1261) */ + complete_add(L"foobarbaz", false, 0, NULL, 0, NO_FILES, NULL, L"qux", NULL, COMPLETE_AUTO_SPACE); + completions.clear(); + complete(L"foobarbaz ", completions, COMPLETION_REQUEST_DEFAULT); + assert(completions.size() == 1); + assert(completions.at(0).completion == L"qux"); + complete_set_variable_names(NULL); } From 535445a55523a142cdf34071ddb1f3a1c3af1376 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 23 Jan 2014 18:19:52 -0800 Subject: [PATCH 019/145] Replace assertions with new do_test macro in fish_tests.cpp --- fish_tests.cpp | 337 +++++++++++++++++++------------------------------ 1 file changed, 130 insertions(+), 207 deletions(-) diff --git a/fish_tests.cpp b/fish_tests.cpp index c87bee69d..13d111d31 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -146,6 +145,8 @@ static void err(const wchar_t *blah, ...) wprintf(L"\n"); } +#define do_test(e) do { if (! (e)) err(L"Test failed on line %lu: %s", __LINE__, #e); } while (0) + /* Test sane escapes */ static void test_unescape_sane() { @@ -249,7 +250,7 @@ static void test_format(void) { char buff[128]; format_size_safe(buff, tests[i].val); - assert(! strcmp(buff, tests[i].expected)); + do_test(! strcmp(buff, tests[i].expected)); } for (int j=-129; j <= 129; j++) @@ -257,14 +258,14 @@ static void test_format(void) char buff1[128], buff2[128]; format_long_safe(buff1, j); sprintf(buff2, "%d", j); - assert(! strcmp(buff1, buff2)); + do_test(! strcmp(buff1, buff2)); } long q = LONG_MIN; char buff1[128], buff2[128]; format_long_safe(buff1, q); sprintf(buff2, "%ld", q); - assert(! strcmp(buff1, buff2)); + do_test(! strcmp(buff1, buff2)); } @@ -457,83 +458,6 @@ static void test_tok() if (redirection_type_for_string(L"2>|") != TOK_NONE) err(L"redirection_type_for_string failed on line %ld", (long)__LINE__); } -static int test_fork_helper(void *unused) -{ - size_t i; - for (i=0; i < 1000; i++) - { - //delete [](new char[4 * 1024 * 1024]); - for (int j=0; j < 1024; j++) - { - strerror(j); - } - } - return 0; -} - -static void test_fork(void) -{ - return; - say(L"Testing fork"); - size_t i, max = 100; - for (i=0; i < 100; i++) - { - 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 -#define FORK_LOOP_COUNT 16 - signal_block(); - for (size_t i=0; i < THREAD_COUNT; i++) - { - iothread_perform(test_fork_helper, NULL, NULL); - } - for (size_t q = 0; q < FORK_LOOP_COUNT; q++) - { - pid_t pids[FORK_COUNT]; - for (size_t i=0; i < FORK_COUNT; i++) - { - pid_t pid = execute_fork(false); - if (pid > 0) - { - /* Parent */ - pids[i] = pid; - } - else if (pid == 0) - { - /* Child */ - //new char[4 * 1024 * 1024]; - for (size_t i=0; i < 1024 * 16; i++) - { - for (int j=0; j < 256; j++) - { - strerror(j); - } - } - exit_without_destructors(0); - } - else - { - perror("fork"); - } - } - for (size_t i=0; i < FORK_COUNT; i++) - { - int status = 0; - if (pids[i] != waitpid(pids[i], &status, 0)) - { - perror("waitpid"); - assert(0); - } - assert(WIFEXITED(status) && 0 == WEXITSTATUS(status)); - } - } - iothread_drain_all(); - signal_unblock(); - } -#undef FORK_COUNT -} - // Little function that runs in the main thread static int test_iothread_main_call(int *addr) { @@ -880,7 +804,7 @@ static void test_indents() text.append(components[i].txt); expected_indents.resize(text.size(), components[i].indent); } - assert(expected_indents.size() == text.size()); + do_test(expected_indents.size() == text.size()); // Compute the indents std::vector indents = parse_util_compute_indents(text); @@ -889,7 +813,7 @@ static void test_indents() { err(L"Indent vector has wrong size! Expected %lu, actual %lu", expected_indents.size(), indents.size()); } - assert(expected_indents.size() == indents.size()); + do_test(expected_indents.size() == indents.size()); for (size_t i=0; i < text.size(); i++) { if (expected_indents.at(i) != indents.at(i)) @@ -949,7 +873,7 @@ public: virtual void node_was_evicted(lru_node_test_t *node) { - assert(find(evicted_nodes.begin(), evicted_nodes.end(), node) == evicted_nodes.end()); + do_test(find(evicted_nodes.begin(), evicted_nodes.end(), node) == evicted_nodes.end()); evicted_nodes.push_back(node); } }; @@ -963,16 +887,16 @@ static void test_lru(void) size_t total_nodes = 20; for (size_t i=0; i < total_nodes; i++) { - assert(cache.size() == std::min(i, (size_t)16)); + do_test(cache.size() == std::min(i, (size_t)16)); lru_node_test_t *node = new lru_node_test_t(to_string(i)); if (i < 4) expected_evicted.push_back(node); // Adding the node the first time should work, and subsequent times should fail - assert(cache.add_node(node)); - assert(! cache.add_node(node)); + do_test(cache.add_node(node)); + do_test(! cache.add_node(node)); } - assert(cache.evicted_nodes == expected_evicted); + do_test(cache.evicted_nodes == expected_evicted); cache.evict_all_nodes(); - assert(cache.evicted_nodes.size() == total_nodes); + do_test(cache.evicted_nodes.size() == total_nodes); while (! cache.evicted_nodes.empty()) { lru_node_t *node = cache.evicted_nodes.back(); @@ -1286,24 +1210,24 @@ static void test_is_potential_path() const wcstring_list_t wds(1, wd); wcstring tmp; - assert(is_potential_path(L"al", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"alpha/"); - assert(is_potential_path(L"alpha/", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"alpha/"); - assert(is_potential_path(L"aard", wds, 0, &tmp) && tmp == L"aardvark"); + do_test(is_potential_path(L"al", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"alpha/"); + do_test(is_potential_path(L"alpha/", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"alpha/"); + do_test(is_potential_path(L"aard", wds, 0, &tmp) && tmp == L"aardvark"); - assert(! is_potential_path(L"balpha/", wds, PATH_REQUIRE_DIR, &tmp)); - assert(! is_potential_path(L"aard", wds, PATH_REQUIRE_DIR, &tmp)); - assert(! is_potential_path(L"aarde", wds, PATH_REQUIRE_DIR, &tmp)); - assert(! is_potential_path(L"aarde", wds, 0, &tmp)); + do_test(! is_potential_path(L"balpha/", wds, PATH_REQUIRE_DIR, &tmp)); + do_test(! is_potential_path(L"aard", wds, PATH_REQUIRE_DIR, &tmp)); + do_test(! is_potential_path(L"aarde", wds, PATH_REQUIRE_DIR, &tmp)); + do_test(! is_potential_path(L"aarde", wds, 0, &tmp)); - assert(is_potential_path(L"/tmp/is_potential_path_test/aardvark", wds, 0, &tmp) && tmp == L"/tmp/is_potential_path_test/aardvark"); - assert(is_potential_path(L"/tmp/is_potential_path_test/al", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"/tmp/is_potential_path_test/alpha/"); - assert(is_potential_path(L"/tmp/is_potential_path_test/aardv", wds, 0, &tmp) && tmp == L"/tmp/is_potential_path_test/aardvark"); + do_test(is_potential_path(L"/tmp/is_potential_path_test/aardvark", wds, 0, &tmp) && tmp == L"/tmp/is_potential_path_test/aardvark"); + do_test(is_potential_path(L"/tmp/is_potential_path_test/al", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"/tmp/is_potential_path_test/alpha/"); + do_test(is_potential_path(L"/tmp/is_potential_path_test/aardv", wds, 0, &tmp) && tmp == L"/tmp/is_potential_path_test/aardvark"); - assert(! is_potential_path(L"/tmp/is_potential_path_test/aardvark", wds, PATH_REQUIRE_DIR, &tmp)); - assert(! is_potential_path(L"/tmp/is_potential_path_test/al/", wds, 0, &tmp)); - assert(! is_potential_path(L"/tmp/is_potential_path_test/ar", wds, 0, &tmp)); + do_test(! is_potential_path(L"/tmp/is_potential_path_test/aardvark", wds, PATH_REQUIRE_DIR, &tmp)); + do_test(! is_potential_path(L"/tmp/is_potential_path_test/al/", wds, 0, &tmp)); + do_test(! is_potential_path(L"/tmp/is_potential_path_test/ar", wds, 0, &tmp)); - assert(is_potential_path(L"/usr", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"/usr/"); + do_test(is_potential_path(L"/usr", wds, PATH_REQUIRE_DIR, &tmp) && tmp == L"/usr/"); } @@ -1342,7 +1266,7 @@ static bool run_test_test(int expected, const wcstring &str) bool bracket = run_one_test_test(expected, lst, true); bool nonbracket = run_one_test_test(expected, lst, false); - assert(bracket == nonbracket); + do_test(bracket == nonbracket); return nonbracket; } @@ -1352,13 +1276,13 @@ static void test_test_brackets() parser_t parser(PARSER_TYPE_GENERAL, true); const wchar_t *argv1[] = {L"[", L"foo", NULL}; - assert(builtin_test(parser, (wchar_t **)argv1) != 0); + do_test(builtin_test(parser, (wchar_t **)argv1) != 0); const wchar_t *argv2[] = {L"[", L"foo", L"]", NULL}; - assert(builtin_test(parser, (wchar_t **)argv2) == 0); + do_test(builtin_test(parser, (wchar_t **)argv2) == 0); const wchar_t *argv3[] = {L"[", L"foo", L"]", L"bar", NULL}; - assert(builtin_test(parser, (wchar_t **)argv3) != 0); + do_test(builtin_test(parser, (wchar_t **)argv3) != 0); } @@ -1367,28 +1291,28 @@ static void test_test() say(L"Testing test builtin"); test_test_brackets(); - assert(run_test_test(0, L"5 -ne 6")); - assert(run_test_test(0, L"5 -eq 5")); - assert(run_test_test(0, L"0 -eq 0")); - assert(run_test_test(0, L"-1 -eq -1")); - assert(run_test_test(0, L"1 -ne -1")); - assert(run_test_test(1, L"-1 -ne -1")); - assert(run_test_test(0, L"abc != def")); - assert(run_test_test(1, L"abc = def")); - assert(run_test_test(0, L"5 -le 10")); - assert(run_test_test(0, L"10 -le 10")); - assert(run_test_test(1, L"20 -le 10")); - assert(run_test_test(0, L"-1 -le 0")); - assert(run_test_test(1, L"0 -le -1")); - assert(run_test_test(0, L"15 -ge 10")); - assert(run_test_test(0, L"15 -ge 10")); - assert(run_test_test(1, L"! 15 -ge 10")); - assert(run_test_test(0, L"! ! 15 -ge 10")); + do_test(run_test_test(0, L"5 -ne 6")); + do_test(run_test_test(0, L"5 -eq 5")); + do_test(run_test_test(0, L"0 -eq 0")); + do_test(run_test_test(0, L"-1 -eq -1")); + do_test(run_test_test(0, L"1 -ne -1")); + do_test(run_test_test(1, L"-1 -ne -1")); + do_test(run_test_test(0, L"abc != def")); + do_test(run_test_test(1, L"abc = def")); + do_test(run_test_test(0, L"5 -le 10")); + do_test(run_test_test(0, L"10 -le 10")); + do_test(run_test_test(1, L"20 -le 10")); + do_test(run_test_test(0, L"-1 -le 0")); + do_test(run_test_test(1, L"0 -le -1")); + do_test(run_test_test(0, L"15 -ge 10")); + do_test(run_test_test(0, L"15 -ge 10")); + do_test(run_test_test(1, L"! 15 -ge 10")); + do_test(run_test_test(0, L"! ! 15 -ge 10")); - assert(run_test_test(0, L"0 -ne 1 -a 0 -eq 0")); - assert(run_test_test(0, L"0 -ne 1 -a -n 5")); - assert(run_test_test(0, L"-n 5 -a 10 -gt 5")); - assert(run_test_test(0, L"-n 3 -a -n 5")); + do_test(run_test_test(0, L"0 -ne 1 -a 0 -eq 0")); + do_test(run_test_test(0, L"0 -ne 1 -a -n 5")); + do_test(run_test_test(0, L"-n 5 -a 10 -gt 5")); + do_test(run_test_test(0, L"-n 3 -a -n 5")); /* test precedence: '0 == 0 || 0 == 1 && 0 == 2' @@ -1397,55 +1321,55 @@ static void test_test() and therefore true. If it were '(0 == 0 || 0 == 1) && 0 == 2' it would be false. */ - assert(run_test_test(0, L"0 = 0 -o 0 = 1 -a 0 = 2")); - assert(run_test_test(0, L"-n 5 -o 0 = 1 -a 0 = 2")); - assert(run_test_test(1, L"( 0 = 0 -o 0 = 1 ) -a 0 = 2")); - assert(run_test_test(0, L"0 = 0 -o ( 0 = 1 -a 0 = 2 )")); + do_test(run_test_test(0, L"0 = 0 -o 0 = 1 -a 0 = 2")); + do_test(run_test_test(0, L"-n 5 -o 0 = 1 -a 0 = 2")); + do_test(run_test_test(1, L"( 0 = 0 -o 0 = 1 ) -a 0 = 2")); + do_test(run_test_test(0, L"0 = 0 -o ( 0 = 1 -a 0 = 2 )")); /* A few lame tests for permissions; these need to be a lot more complete. */ - assert(run_test_test(0, L"-e /bin/ls")); - assert(run_test_test(1, L"-e /bin/ls_not_a_path")); - assert(run_test_test(0, L"-x /bin/ls")); - assert(run_test_test(1, L"-x /bin/ls_not_a_path")); - assert(run_test_test(0, L"-d /bin/")); - assert(run_test_test(1, L"-d /bin/ls")); + do_test(run_test_test(0, L"-e /bin/ls")); + do_test(run_test_test(1, L"-e /bin/ls_not_a_path")); + do_test(run_test_test(0, L"-x /bin/ls")); + do_test(run_test_test(1, L"-x /bin/ls_not_a_path")); + do_test(run_test_test(0, L"-d /bin/")); + do_test(run_test_test(1, L"-d /bin/ls")); /* This failed at one point */ - assert(run_test_test(1, L"-d /bin -a 5 -eq 3")); - assert(run_test_test(0, L"-d /bin -o 5 -eq 3")); - assert(run_test_test(0, L"-d /bin -a ! 5 -eq 3")); + do_test(run_test_test(1, L"-d /bin -a 5 -eq 3")); + do_test(run_test_test(0, L"-d /bin -o 5 -eq 3")); + do_test(run_test_test(0, L"-d /bin -a ! 5 -eq 3")); /* We didn't properly handle multiple "just strings" either */ - assert(run_test_test(0, L"foo")); - assert(run_test_test(0, L"foo -a bar")); + do_test(run_test_test(0, L"foo")); + do_test(run_test_test(0, L"foo -a bar")); /* These should be errors */ - assert(run_test_test(1, L"foo bar")); - assert(run_test_test(1, L"foo bar baz")); + do_test(run_test_test(1, L"foo bar")); + do_test(run_test_test(1, L"foo bar baz")); /* This crashed */ - assert(run_test_test(1, L"1 = 1 -a = 1")); + do_test(run_test_test(1, L"1 = 1 -a = 1")); /* Make sure we can treat -S as a parameter instead of an operator. https://github.com/fish-shell/fish-shell/issues/601 */ - assert(run_test_test(0, L"-S = -S")); - assert(run_test_test(1, L"! ! ! A")); + do_test(run_test_test(0, L"-S = -S")); + do_test(run_test_test(1, L"! ! ! A")); } /** Testing colors */ static void test_colors() { say(L"Testing colors"); - assert(rgb_color_t(L"#FF00A0").is_rgb()); - assert(rgb_color_t(L"FF00A0").is_rgb()); - assert(rgb_color_t(L"#F30").is_rgb()); - assert(rgb_color_t(L"F30").is_rgb()); - assert(rgb_color_t(L"f30").is_rgb()); - assert(rgb_color_t(L"#FF30a5").is_rgb()); - assert(rgb_color_t(L"3f30").is_none()); - assert(rgb_color_t(L"##f30").is_none()); - assert(rgb_color_t(L"magenta").is_named()); - assert(rgb_color_t(L"MaGeNTa").is_named()); - assert(rgb_color_t(L"mooganta").is_none()); + do_test(rgb_color_t(L"#FF00A0").is_rgb()); + do_test(rgb_color_t(L"FF00A0").is_rgb()); + do_test(rgb_color_t(L"#F30").is_rgb()); + do_test(rgb_color_t(L"F30").is_rgb()); + do_test(rgb_color_t(L"f30").is_rgb()); + do_test(rgb_color_t(L"#FF30a5").is_rgb()); + do_test(rgb_color_t(L"3f30").is_none()); + do_test(rgb_color_t(L"##f30").is_none()); + do_test(rgb_color_t(L"magenta").is_named()); + do_test(rgb_color_t(L"MaGeNTa").is_named()); + do_test(rgb_color_t(L"mooganta").is_none()); } static void test_complete(void) @@ -1459,35 +1383,35 @@ static void test_complete(void) std::vector completions; complete(L"$F", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 3); - assert(completions.at(0).completion == L"oo1"); - assert(completions.at(1).completion == L"oo2"); - assert(completions.at(2).completion == L"oo3"); + do_test(completions.size() == 3); + do_test(completions.at(0).completion == L"oo1"); + do_test(completions.at(1).completion == L"oo2"); + do_test(completions.at(2).completion == L"oo3"); completions.clear(); complete(L"$1", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.empty()); + do_test(completions.empty()); completions.clear(); complete(L"$1", completions, COMPLETION_REQUEST_DEFAULT | COMPLETION_REQUEST_FUZZY_MATCH); - assert(completions.size() == 2); - assert(completions.at(0).completion == L"$Foo1"); - assert(completions.at(1).completion == L"$Bar1"); + do_test(completions.size() == 2); + do_test(completions.at(0).completion == L"$Foo1"); + do_test(completions.at(1).completion == L"$Bar1"); completions.clear(); complete(L"echo (/bin/mkdi", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 1); - assert(completions.at(0).completion == L"r"); + do_test(completions.size() == 1); + do_test(completions.at(0).completion == L"r"); completions.clear(); complete(L"echo (ls /bin/mkdi", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 1); - assert(completions.at(0).completion == L"r"); + do_test(completions.size() == 1); + do_test(completions.at(0).completion == L"r"); completions.clear(); complete(L"echo (command ls /bin/mkdi", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 1); - assert(completions.at(0).completion == L"r"); + do_test(completions.size() == 1); + do_test(completions.at(0).completion == L"r"); /* Add a function and test completing it in various ways */ struct function_data_t func_data; @@ -1498,25 +1422,25 @@ static void test_complete(void) /* Complete a function name */ completions.clear(); complete(L"echo (scuttlebut", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 1); - assert(completions.at(0).completion == L"t"); + do_test(completions.size() == 1); + do_test(completions.at(0).completion == L"t"); /* But not with the command prefix */ completions.clear(); complete(L"echo (command scuttlebut", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 0); + do_test(completions.size() == 0); /* Not with the builtin prefix */ completions.clear(); complete(L"echo (builtin scuttlebut", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 0); + do_test(completions.size() == 0); /* Trailing spaces (#1261) */ complete_add(L"foobarbaz", false, 0, NULL, 0, NO_FILES, NULL, L"qux", NULL, COMPLETE_AUTO_SPACE); completions.clear(); complete(L"foobarbaz ", completions, COMPLETION_REQUEST_DEFAULT); - assert(completions.size() == 1); - assert(completions.at(0).completion == L"qux"); + do_test(completions.size() == 1); + do_test(completions.at(0).completion == L"qux"); complete_set_variable_names(NULL); @@ -1527,11 +1451,11 @@ static void test_1_completion(wcstring line, const wcstring &completion, complet // str is given with a caret, which we use to represent the cursor position // find it const size_t in_cursor_pos = line.find(L'^'); - assert(in_cursor_pos != wcstring::npos); + do_test(in_cursor_pos != wcstring::npos); line.erase(in_cursor_pos, 1); const size_t out_cursor_pos = expected.find(L'^'); - assert(out_cursor_pos != wcstring::npos); + do_test(out_cursor_pos != wcstring::npos); expected.erase(out_cursor_pos, 1); size_t cursor_pos = in_cursor_pos; @@ -1540,8 +1464,8 @@ static void test_1_completion(wcstring line, const wcstring &completion, complet { fprintf(stderr, "line %ld: %ls + %ls -> [%ls], expected [%ls]\n", source_line, line.c_str(), completion.c_str(), result.c_str(), expected.c_str()); } - assert(result == expected); - assert(cursor_pos == out_cursor_pos); + do_test(result == expected); + do_test(cursor_pos == out_cursor_pos); } static void test_completion_insertions() @@ -1580,14 +1504,14 @@ static void perform_one_autosuggestion_test(const wcstring &command, const wcstr if (! success) { printf("line %ld: autosuggest_suggest_special() failed for command %ls\n", line, command.c_str()); - assert(success); + do_test(success); } if (suggestion != expected) { printf("line %ld: autosuggest_suggest_special() returned the wrong expected string for command %ls\n", line, command.c_str()); printf(" actual: %ls\n", suggestion.c_str()); printf("expected: %ls\n", expected.c_str()); - assert(suggestion == expected); + do_test(suggestion == expected); } } @@ -1657,17 +1581,17 @@ static void test_autosuggest_suggest_special() static void test_autosuggestion_combining() { say(L"Testing autosuggestion combining"); - assert(combine_command_and_autosuggestion(L"alpha", L"alphabeta") == L"alphabeta"); + do_test(combine_command_and_autosuggestion(L"alpha", L"alphabeta") == L"alphabeta"); // when the last token contains no capital letters, we use the case of the autosuggestion - assert(combine_command_and_autosuggestion(L"alpha", L"ALPHABETA") == L"ALPHABETA"); + do_test(combine_command_and_autosuggestion(L"alpha", L"ALPHABETA") == L"ALPHABETA"); // when the last token contains capital letters, we use its case - assert(combine_command_and_autosuggestion(L"alPha", L"alphabeTa") == L"alPhabeTa"); + do_test(combine_command_and_autosuggestion(L"alPha", L"alphabeTa") == L"alPhabeTa"); // if autosuggestion is not longer than input, use the input's case - assert(combine_command_and_autosuggestion(L"alpha", L"ALPHAA") == L"ALPHAA"); - assert(combine_command_and_autosuggestion(L"alpha", L"ALPHA") == L"alpha"); + do_test(combine_command_and_autosuggestion(L"alpha", L"ALPHAA") == L"ALPHAA"); + do_test(combine_command_and_autosuggestion(L"alpha", L"ALPHA") == L"alpha"); } @@ -1742,16 +1666,16 @@ static void test_history_matches(history_search_t &search, size_t matches) size_t i; for (i=0; i < matches; i++) { - assert(search.go_backwards()); + do_test(search.go_backwards()); wcstring item = search.current_string(); } - assert(! search.go_backwards()); + do_test(! search.go_backwards()); for (i=1; i < matches; i++) { - assert(search.go_forwards()); + do_test(search.go_forwards()); } - assert(! search.go_forwards()); + do_test(! search.go_forwards()); } static bool history_contains(history_t *history, const wcstring &txt) @@ -1810,12 +1734,12 @@ void history_tests_t::test_history(void) /* All three items match "a" */ history_search_t search1(history, L"a"); test_history_matches(search1, 3); - assert(search1.current_string() == L"Alpha"); + do_test(search1.current_string() == L"Alpha"); /* One item matches "et" */ history_search_t search2(history, L"et"); test_history_matches(search2, 1); - assert(search2.current_string() == L"Beta"); + do_test(search2.current_string() == L"Beta"); /* Test item removal */ history.remove(L"Alpha"); @@ -1855,16 +1779,16 @@ void history_tests_t::test_history(void) for (i=100; i >= 1; i--) { history_item_t item = history.item_at_index(i); - assert(! item.empty()); + do_test(! item.empty()); after.push_back(item); } - assert(before.size() == after.size()); + do_test(before.size() == after.size()); for (size_t i=0; i < before.size(); i++) { const history_item_t &bef = before.at(i), &aft = after.at(i); - assert(bef.contents == aft.contents); - assert(bef.creation_timestamp == aft.creation_timestamp); - assert(bef.required_paths == aft.required_paths); + do_test(bef.contents == aft.contents); + do_test(bef.creation_timestamp == aft.creation_timestamp); + do_test(bef.required_paths == aft.required_paths); } /* Clean up after our tests */ @@ -1994,7 +1918,7 @@ void history_tests_t::test_history_races(void) } } // every write should add at least one item - assert(hist_idx >= RACE_COUNT); + do_test(hist_idx >= RACE_COUNT); //hist->clear(); delete hist; @@ -2040,7 +1964,7 @@ void history_tests_t::test_history_merge(void) { bool does_contain = history_contains(hists[i], texts[j]); bool should_contain = (i == j); - assert(should_contain == does_contain); + do_test(should_contain == does_contain); } } @@ -2049,7 +1973,7 @@ void history_tests_t::test_history_merge(void) history_t *everything = new history_t(name); for (size_t i=0; i < count; i++) { - assert(history_contains(everything, texts[i])); + do_test(history_contains(everything, texts[i])); } /* Clean up */ @@ -2716,7 +2640,7 @@ static void test_highlighting(void) text.append(components[i].txt); expected_colors.resize(text.size(), components[i].color); } - assert(expected_colors.size() == text.size()); + do_test(expected_colors.size() == text.size()); std::vector colors(text.size()); highlight_shell(text, colors, 20, NULL, env_vars_snapshot_t()); @@ -2725,7 +2649,7 @@ static void test_highlighting(void) { err(L"Color vector has wrong size! Expected %lu, actual %lu", expected_colors.size(), colors.size()); } - assert(expected_colors.size() == colors.size()); + do_test(expected_colors.size() == colors.size()); for (size_t i=0; i < text.size(); i++) { // Hackish space handling. We don't care about the colors in spaces. @@ -2780,7 +2704,6 @@ int main(int argc, char **argv) if (should_test_function("convert")) test_convert(); if (should_test_function("convert_nulls")) test_convert_nulls(); if (should_test_function("tok")) test_tok(); - if (should_test_function("fork")) test_fork(); if (should_test_function("iothread")) test_iothread(); if (should_test_function("parser")) test_parser(); if (should_test_function("cancellation")) test_cancellation(); From 8cb051d44d86c19d6ccc9881e3711a1cc26db94c Mon Sep 17 00:00:00 2001 From: David Adam Date: Fri, 24 Jan 2014 20:51:06 +0800 Subject: [PATCH 020/145] use annotated tags only for version checking Note: if you have previously cloned the repository, the tags for previous versions have been edited. Use `git fetch --tags` to synchronise your local copy. --- build_tools/git_version_gen.sh | 2 +- build_tools/make_tarball.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build_tools/git_version_gen.sh b/build_tools/git_version_gen.sh index 3ffd0eb2a..a2c337be9 100755 --- a/build_tools/git_version_gen.sh +++ b/build_tools/git_version_gen.sh @@ -14,7 +14,7 @@ then VN=$(cat version) || VN="$DEF_VER" elif test -d .git -o -f .git && type git >/dev/null then - VN=$(git describe --tags --dirty 2>/dev/null) + VN=$(git describe --dirty 2>/dev/null) else VN="$DEF_VER" fi diff --git a/build_tools/make_tarball.sh b/build_tools/make_tarball.sh index f16171d14..a044d2f25 100755 --- a/build_tools/make_tarball.sh +++ b/build_tools/make_tarball.sh @@ -20,7 +20,7 @@ wd="$PWD" prefix="fish" # Get the version from git-describe -VERSION=`git describe --tags --dirty 2>/dev/null` +VERSION=`git describe --dirty 2>/dev/null` prefix="$prefix-$VERSION" # The path where we will output the tar file From 2e4b7b3d192224d460619194b3a184977c69ab64 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 10:47:30 -0800 Subject: [PATCH 021/145] Fix pager to correctly join completions with the same description. Closes #1263 --- fish_pager.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fish_pager.cpp b/fish_pager.cpp index 14135d4c7..f640e9959 100644 --- a/fish_pager.cpp +++ b/fish_pager.cpp @@ -864,13 +864,13 @@ static void mangle_descriptions(wcstring_list_t &lst) /** Merge multiple completions with the same description to the same line */ -static void join_completions(wcstring_list_t lst) +static void join_completions(wcstring_list_t *lst) { std::map desc_table; - for (size_t i=0; isize(); i++) { - const wchar_t *item = lst.at(i).c_str(); + const wchar_t *item = lst->at(i).c_str(); const wchar_t *desc = wcschr(item, COMPLETE_SEP); long prev_idx; @@ -884,7 +884,7 @@ static void join_completions(wcstring_list_t lst) } else { - const wchar_t *old = lst.at(i).c_str(); + const wchar_t *old = lst->at(prev_idx).c_str(); const wchar_t *old_end = wcschr(old, COMPLETE_SEP); if (old_end) @@ -895,8 +895,8 @@ static void join_completions(wcstring_list_t lst) foo.push_back(COMPLETE_ITEM_SEP); foo.append(item); - lst.at(prev_idx) = foo; - lst.at(i).clear(); + lst->at(prev_idx) = foo; + lst->at(i).clear(); } } @@ -904,7 +904,7 @@ static void join_completions(wcstring_list_t lst) } /* Remove empty strings */ - lst.erase(remove(lst.begin(), lst.end(), wcstring()), lst.end()); + lst->erase(remove(lst->begin(), lst->end(), wcstring()), lst->end()); } /** @@ -1380,7 +1380,7 @@ int main(int argc, char **argv) mangle_descriptions(comp); if (prefix == L"-") - join_completions(comp); + join_completions(&comp); std::vector completions = mangle_completions(comp, prefix.c_str()); From 0a1960865ed36e1e07615f72267b939459edebd4 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 15:59:18 -0800 Subject: [PATCH 022/145] Support for "merged completions" (multiple completions on the same line) in new pager. Support for using up-arrow to end pager navigation. --- common.h | 5 ++++- pager.cpp | 53 ++++++++++++++++++++++++++++++++--------------------- pager.h | 16 +++++++++------- reader.cpp | 45 +++++++++++++++++++++++++++++++++++++++------ 4 files changed, 84 insertions(+), 35 deletions(-) diff --git a/common.h b/common.h index 2a96b7498..3e9be1063 100644 --- a/common.h +++ b/common.h @@ -98,7 +98,10 @@ enum selection_direction_t /* logical directions */ direction_next, - direction_prev + direction_prev, + + /* special value that means deselect */ + direction_deselect }; inline bool selection_direction_is_cardinal(selection_direction_t dir) diff --git a/pager.cpp b/pager.cpp index 40a5c9dd6..bd9ed15b6 100644 --- a/pager.cpp +++ b/pager.cpp @@ -501,6 +501,9 @@ static comp_info_list_t process_completions_into_infos(const completion_list_t & // Append the mangled description comp_info->desc = comp.description; mangle_1_completion_description(&comp_info->desc); + + // Set the representative completion + comp_info->representative = comp; } return result; } @@ -591,8 +594,6 @@ page_rendering_t render_completions(const completion_list_t &raw_completions, co void pager_t::set_completions(const completion_list_t &raw_completions) { - completions = raw_completions; - // Get completion infos out of it completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); @@ -1012,13 +1013,13 @@ pager_t::pager_t() : available_term_width(0), available_term_height(0), selected bool pager_t::empty() const { - return completions.empty(); + return completion_infos.empty(); } const completion_t *pager_t::select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering) { /* Must have something to select */ - if (completions.empty()) + if (this->empty()) { return NULL; } @@ -1034,7 +1035,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc case direction_prev: if (direction == direction_prev) { - selected_completion_idx = completions.size() - 1; + selected_completion_idx = completion_infos.size() - 1; } else { @@ -1046,6 +1047,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc case direction_north: case direction_east: case direction_west: + case direction_deselect: default: return NULL; } @@ -1055,8 +1057,12 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc size_t new_selected_completion_idx = selected_completion_idx; if (! selection_direction_is_cardinal(direction)) { - /* Next / previous, easy */ - if (direction == direction_next) + /* Next, previous, or deselect, all easy */ + if (direction == direction_deselect) + { + new_selected_completion_idx = PAGER_SELECTION_NONE; + } + else if (direction == direction_next) { new_selected_completion_idx = selected_completion_idx + 1; if (new_selected_completion_idx >= completion_infos.size()) @@ -1082,9 +1088,9 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc } else { - /* Cardinal directions. We have a completion index; we wish to compute its row and column. Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ - size_t current_row = selected_completion_idx % rendering.rows; - size_t current_col = selected_completion_idx / rendering.rows; + /* Cardinal directions. We have a completion index; we wish to compute its row and column. */ + size_t current_row = this->get_selected_row(rendering); + size_t current_col = this->get_selected_column(rendering); switch (direction) { @@ -1171,8 +1177,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc if (visible_row_count > 0 && selected_completion_idx != PAGER_SELECTION_NONE) //paranoia { - size_t row_containing_selection = selected_completion_idx % rendering.rows; - + size_t row_containing_selection = this->get_selected_row(rendering); /* Ensure our suggested row start is not past the selected row */ if (suggested_row_start > row_containing_selection) @@ -1215,34 +1220,40 @@ size_t pager_t::visual_selected_completion_index(size_t rows, size_t cols) const if (result != PAGER_SELECTION_NONE) { /* If the selected completion is beyond the last selection, go left by columns until it's within it. This is how we implement "column memory." */ - while (result >= completions.size() && result >= rows) + while (result >= completion_infos.size() && result >= rows) { result -= rows; } } - assert(result == PAGER_SELECTION_NONE || result < completions.size()); + assert(result == PAGER_SELECTION_NONE || result < completion_infos.size()); return result; } -void pager_t::set_selected_completion_index(size_t completion_idx) -{ - selected_completion_idx = completion_idx; -} - const completion_t *pager_t::selected_completion(const page_rendering_t &rendering) const { const completion_t * result = NULL; size_t idx = visual_selected_completion_index(rendering.rows, rendering.cols); if (idx != PAGER_SELECTION_NONE) { - result = &completions.at(idx); + result = &completion_infos.at(idx).representative; } return result; } +/* Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ + +size_t pager_t::get_selected_row(const page_rendering_t &rendering) const +{ + return selected_completion_idx == PAGER_SELECTION_NONE ? PAGER_SELECTION_NONE : selected_completion_idx % rendering.rows; +} + +size_t pager_t::get_selected_column(const page_rendering_t &rendering) const +{ + return selected_completion_idx == PAGER_SELECTION_NONE ? PAGER_SELECTION_NONE : selected_completion_idx / rendering.rows; +} + void pager_t::clear() { - completions.clear(); completion_infos.clear(); prefix.clear(); selected_completion_idx = PAGER_SELECTION_NONE; diff --git a/pager.h b/pager.h index df2d00d26..a1fa5a42e 100644 --- a/pager.h +++ b/pager.h @@ -39,8 +39,6 @@ class pager_t int available_term_width; int available_term_height; - completion_list_t completions; - size_t selected_completion_idx; size_t suggested_row_start; @@ -60,19 +58,22 @@ class pager_t /** The description */ wcstring desc; + /** The representative completion */ + completion_t representative; + /** On-screen width of the completion string */ int comp_width; /** On-screen width of the description information */ int desc_width; - /** Preffered total width */ + /** Preferred total width */ int pref_width; /** Minimum acceptable width */ int min_width; - comp_t() : comp(), desc(), comp_width(0), desc_width(0), pref_width(0), min_width(0) + comp_t() : comp(), desc(), representative(L""), comp_width(0), desc_width(0), pref_width(0), min_width(0) { } }; @@ -103,15 +104,16 @@ class pager_t /* Sets the terminal width and height */ void set_term_size(int w, int h); - /* Sets the index of the selected completion */ - void set_selected_completion_index(size_t completion_idx); - /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns the newly selected completion if it changed, NULL if nothing was selected or it did not change. */ const completion_t *select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); /* Returns the currently selected completion for the given rendering */ const completion_t *selected_completion(const page_rendering_t &rendering) const; + /* Indicates the row and column for the given rendering. Returns -1 if no selection. */ + size_t get_selected_row(const page_rendering_t &rendering) const; + size_t get_selected_column(const page_rendering_t &rendering) const; + /* Produces a rendering of the completions, at the given term size */ page_rendering_t render() const; diff --git a/reader.cpp b/reader.cpp index d1ad4bf4e..1c313a63b 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1548,17 +1548,27 @@ static void clear_pager() static void select_completion_in_direction(enum selection_direction_t dir, const wcstring &cycle_command_line, size_t cycle_cursor_pos) { const completion_t *next_comp = data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); - if (next_comp != NULL) + if (next_comp != NULL || dir == direction_deselect) { + /* Update the cursor and command line */ size_t cursor_pos = cycle_cursor_pos; - const wcstring new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); + wcstring new_cmd_line; + if (dir == direction_deselect) + { + new_cmd_line = cycle_command_line; + } + else + { + new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); + } reader_set_buffer_maintaining_pager(new_cmd_line, cursor_pos); + /* Since we just inserted a completion, don't immediately do a new autosuggestion */ data->suppress_autosuggestion = true; /* Trigger repaint (see #765) */ - reader_repaint(); + reader_repaint_needed(); } } @@ -3653,10 +3663,33 @@ const wchar_t *reader_readline(void) case R_UP_LINE: case R_DOWN_LINE: { - /* If we are already navigating the pager, or if we pressed down with non-empty pager contents, begin navigation */ - if (is_navigating_pager_contents() || (c == R_DOWN_LINE && ! data->pager.empty())) + if (is_navigating_pager_contents()) { - select_completion_in_direction(c == R_UP_LINE ? direction_north : direction_south, cycle_command_line, cycle_cursor_pos); + /* We are already navigating pager contents. */ + selection_direction_t direction; + if (c == R_DOWN_LINE) + { + /* Down arrow is always south */ + direction = direction_south; + } + else if (data->pager.get_selected_row(data->current_page_rendering) == 0 && data->pager.get_selected_column(data->current_page_rendering) == 0) + { + /* Up arrow, but we are in the first column and first row. End navigation */ + direction = direction_deselect; + } + else + { + /* Up arrow, go north */ + direction = direction_north; + } + + /* Now do the selection */ + select_completion_in_direction(direction, cycle_command_line, cycle_cursor_pos); + } + else if (c == R_DOWN_LINE && ! data->pager.empty()) + { + /* We pressed down with a non-empty pager contents, begin navigation */ + select_completion_in_direction(direction_south, cycle_command_line, cycle_cursor_pos); } else { From 5849cd3a2e1f5bfc9192bd443749b44601c272af Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 16:51:52 -0800 Subject: [PATCH 023/145] Remove some unnecessary fish_pager.cpp specific code from the new pager --- pager.cpp | 376 ++++-------------------------------------------------- pager.h | 2 +- 2 files changed, 24 insertions(+), 354 deletions(-) diff --git a/pager.cpp b/pager.cpp index bd9ed15b6..fc2ae5cf2 100644 --- a/pager.cpp +++ b/pager.cpp @@ -2,6 +2,10 @@ #include "pager.h" #include "highlight.h" +#include "input_common.h" + + +#if 1 #include #include @@ -58,6 +62,7 @@ #include "env_universal.h" #include "print_help.h" #include "highlight.h" +#endif #define PAGER_SELECTION_NONE ((size_t)(-1)) @@ -75,55 +80,12 @@ enum ; -enum -{ - /* - Returnd by the pager if no more displaying is needed - */ - PAGER_DONE, - /* - Returned by the pager if the completions would not fit in the specified number of columns - */ - PAGER_RETRY, - /* - Returned by the pager if the terminal changes size - */ - PAGER_RESIZE -} -; - -/** - The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions -*/ +/** The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions */ #define PAGER_MIN_WIDTH 16 -/** - The maximum number of columns of completion to attempt to fit onto the screen -*/ +/** The maximum number of columns of completion to attempt to fit onto the screen */ #define PAGER_MAX_COLS 6 -/** - The string describing the single-character options accepted by fish_pager -*/ -#define GETOPT_STRING "c:hr:qvp:" - -/** - Error to use when given an invalid file descriptor for reading completions or writing output -*/ -#define ERR_NOT_FD _( L"%ls: Argument '%s' is not a valid file descriptor\n" ) - -/** - This buffer is used to buffer the output of the pager to improve - screen redraw performance bu cutting down the number of write() - calls to only one. -*/ -static std::vector pager_buffer; - -/** - This string contains the text that should be sent back to the calling program -*/ -static wcstring out_buff; - /* Returns numer / denom, rounding up */ static size_t divide_round_up(size_t numer, size_t denom) { @@ -148,100 +110,6 @@ void pager_t::recalc_min_widths(comp_info_list_t * lst) const } -/** - Test if the specified character sequence has been entered on the - keyboard -*/ -static int try_sequence(const char *seq) -{ - int j, k; - wint_t c=0; - - for (j=0; - seq[j] != '\0' && seq[j] == (c=input_common_readch(j>0)); - j++) - ; - - if (seq[j] == '\0') - { - return 1; - } - else - { - input_common_unreadch(c); - for (k=j-1; k>=0; k--) - input_common_unreadch(seq[k]); - } - return 0; -} - -/** - Read a character from keyboard -*/ -static wint_t readch() -{ - struct mapping - { - const char *seq; - wint_t bnd; - } - ; - - struct mapping m[]= - { - { - "\x1b[A", LINE_UP - } - , - { - key_up, LINE_UP - } - , - { - "\x1b[B", LINE_DOWN - } - , - { - key_down, LINE_DOWN - } - , - { - key_ppage, PAGE_UP - } - , - { - key_npage, PAGE_DOWN - } - , - { - " ", PAGE_DOWN - } - , - { - "\t", PAGE_DOWN - } - , - { - 0, 0 - } - - } - ; - int i; - - for (i=0; m[i].bnd; i++) - { - if (!m[i].seq) - { - continue; - } - - if (try_sequence(m[i].seq)) - return m[i].bnd; - } - return input_common_readch(0); -} - /** Print the specified string, but use at most the specified amount of space. If the whole string can't be fitted, ellipsize it. @@ -536,62 +404,6 @@ void pager_t::measure_completion_infos(comp_info_list_t *infos, const wcstring & recalc_min_widths(infos); } -#if 0 -page_rendering_t render_completions(const completion_list_t &raw_completions, const wcstring &prefix) -{ - // Save old output function so we can restore it - int (* const saved_writer_func)(char) = output_get_writer(); - output_set_writer(&pager_buffered_writer); - - // Get completion infos out of it - comp_info_list_t completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); - - // Maybe join them - if (prefix == L"-") - join_completions(&completion_infos); - - // Compute their various widths - measure_completion_infos(&completion_infos, prefix); - - /** - Try to print the completions. Start by trying to print the - list in PAGER_MAX_COLS columns, if the completions won't - fit, reduce the number of columns by one. Printing a single - column never fails. - */ - for (int i = PAGER_MAX_COLS; i>0; i--) - { - switch (completion_try_print(i, prefix, completion_infos)) - { - - case PAGER_RETRY: - break; - - case PAGER_DONE: - i=0; - break; - - case PAGER_RESIZE: - /* - This means we got a resize event, so we start - over from the beginning. Since it the screen got - bigger, we might be able to fit all completions - on-screen. - */ - i=PAGER_MAX_COLS+1; - break; - - } - } - - fwprintf(out_file, L"%ls", out_buff.c_str()); - - // Restore saved writer function - pager_buffer.clear(); - output_set_writer(saved_writer_func); -} -#endif - void pager_t::set_completions(const completion_list_t &raw_completions) { // Get completion infos out of it @@ -620,22 +432,12 @@ void pager_t::set_term_size(int w, int h) /** Try to print the list of completions l with the prefix prefix using - cols as the number of columns. Return 1 if the completion list was - printed, 0 if the terminal is to narrow for the specified number of + cols as the number of columns. Return true if the completion list was + printed, false if the terminal is to narrow for the specified number of columns. Always succeeds if cols is 1. - - If all the elements do not fit on the screen at once, make the list - scrollable using the up, down and space keys to move. The list will - exit when any other key is pressed. - - \param cols the number of columns to try to fit onto the screen - \param prefix the character string to prefix each completion with - \param l the list of completions - - \return one of PAGER_RETRY, PAGER_DONE and PAGER_RESIZE */ -int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const +bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const { /* The calculated preferred width of each column @@ -649,10 +451,9 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com If the list can be printed with this width, width will contain the width of each column */ int *width=pref_width; - /* - Set to one if the list should be printed at this width - */ - int print=0; + + /* Set to one if the list should be printed at this width */ + bool print = false; /* Compute the effective term width and term height, accounting for disclosure */ int term_width = this->available_term_width; @@ -674,11 +475,10 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com int pref_tot_width=0; int min_tot_width = 0; - int res=PAGER_RETRY; /* Skip completions on tiny terminals */ if (term_width < PAGER_MIN_WIDTH) - return PAGER_DONE; + return true; /* Calculate how wide the list would be */ for (long col = 0; col < cols; col++) @@ -717,13 +517,13 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com pref_width[0] = term_width; } width = pref_width; - print=1; + print = true; } else if (pref_tot_width <= term_width) { /* Terminal is wide enough. Print the list! */ width = pref_width; - print=1; + print = true; } else { @@ -770,7 +570,7 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com } } } - print=1; + print = true; } } @@ -820,118 +620,8 @@ int pager_t::completion_try_print(size_t cols, const wcstring &prefix, const com } line_t &line = rendering->screen_data.add_line(); print_max(progress_text.c_str(), highlight_spec_pager_progress | highlight_make_background(highlight_spec_pager_progress), term_width, true /* has_more */, &line); - - return PAGER_DONE; - - res=PAGER_DONE; - if (row_count < term_height) - { - completion_print(cols, width, 0, row_count, prefix, lst, rendering); - } - else - { - completion_print(cols, width, 0, term_height - 1, prefix, lst, rendering); - - assert(0); - int npos, pos = 0; - int do_loop = 1; - - completion_print(cols, width, 0, term_height-1, prefix, lst, rendering); - - /* List does not fit on screen. Print one screenful and leave a scrollable interface */ - while (do_loop) - { - set_color(rgb_color_t::black(), highlight_get_color(highlight_spec_pager_progress, true)); - wcstring msg = format_string(_(L" %d to %d of %d"), pos, pos+term_height-1, row_count); - msg.append(L" \r"); - - writestr(msg.c_str()); - set_color(rgb_color_t::normal(), rgb_color_t::normal()); - int c = readch(); - - switch (c) - { - case LINE_UP: - { - if (pos > 0) - { - pos--; - writembs(tparm(cursor_address, 0, 0)); - writembs(scroll_reverse); - completion_print(cols, width, pos, pos+1, prefix, lst, rendering); - writembs(tparm(cursor_address, term_height-1, 0)); - writembs(clr_eol); - - } - - break; - } - - case LINE_DOWN: - { - if (pos <= (row_count - term_height)) - { - pos++; - completion_print(cols, width, pos+term_height-2, pos+term_height-1, prefix, lst, rendering); - } - break; - } - - case PAGE_DOWN: - { - - npos = mini((int)(row_count - term_height+1), (int)(pos + term_height-1)); - if (npos != pos) - { - pos = npos; - completion_print(cols, width, pos, pos+term_height-1, prefix, lst, rendering); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - - break; - } - - case PAGE_UP: - { - npos = maxi(0, pos - term_height+1); - - if (npos != pos) - { - pos = npos; - completion_print(cols, width, pos, pos+term_height-1, prefix, lst, rendering); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - break; - } - - case R_NULL: - { - do_loop=0; - res=PAGER_RESIZE; - break; - - } - - default: - { - out_buff.push_back(c); - do_loop = 0; - break; - } - } - } - writembs(clr_eol); - } } - return res; + return print; } @@ -950,8 +640,7 @@ page_rendering_t pager_t::render() const if (! this->empty()) { - int cols; - for (cols = PAGER_MAX_COLS; cols > 0; cols--) + for (int cols = PAGER_MAX_COLS; cols > 0; cols--) { /* Initially empty rendering */ rendering.screen_data.resize(0); @@ -971,30 +660,11 @@ page_rendering_t pager_t::render() const rendering.rows = min_rows_required_for_cols; rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); - bool done = false; - switch (completion_try_print(cols, prefix, completion_infos, &rendering, suggested_row_start)) + if (completion_try_print(cols, prefix, completion_infos, &rendering, suggested_row_start)) { - case PAGER_RETRY: - break; - - case PAGER_DONE: - done = true; - break; - - case PAGER_RESIZE: - /* - This means we got a resize event, so we start - over from the beginning. Since it the screen got - bigger, we might be able to fit all completions - on-screen. - */ - cols=PAGER_MAX_COLS+1; - break; - } - if (done) break; + } } - assert(cols >= 0); } return rendering; } @@ -1240,8 +910,7 @@ const completion_t *pager_t::selected_completion(const page_rendering_t &renderi return result; } -/* Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ - +/* Get the selected row and column. Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ size_t pager_t::get_selected_row(const page_rendering_t &rendering) const { return selected_completion_idx == PAGER_SELECTION_NONE ? PAGER_SELECTION_NONE : selected_completion_idx % rendering.rows; @@ -1260,6 +929,7 @@ void pager_t::clear() fully_disclosed = false; } +/* Constructor */ page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1), remaining_to_disclose(0) { } diff --git a/pager.h b/pager.h index a1fa5a42e..1407e3624 100644 --- a/pager.h +++ b/pager.h @@ -84,7 +84,7 @@ class pager_t wcstring prefix; - int completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const; + bool completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const; void recalc_min_widths(comp_info_list_t * lst) const; void measure_completion_infos(std::vector *infos, const wcstring &prefix) const; From 4ffd2380c3956206e279d6d1deab8c680cf192b3 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 16:58:22 -0800 Subject: [PATCH 024/145] Remove yet more unnecessary fish_pager.cpp specific code from the new pager --- pager.cpp | 70 +------------------------------------------------------ 1 file changed, 1 insertion(+), 69 deletions(-) diff --git a/pager.cpp b/pager.cpp index fc2ae5cf2..91d7e7ad9 100644 --- a/pager.cpp +++ b/pager.cpp @@ -3,66 +3,8 @@ #include "pager.h" #include "highlight.h" #include "input_common.h" - - -#if 1 - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - -#include -#include -#include -#include - -#include - -#if HAVE_NCURSES_H -#include -#else -#include -#endif - -#if HAVE_TERM_H -#include -#elif HAVE_NCURSES_TERM_H -#include -#endif - -#include - -#ifdef HAVE_GETOPT_H -#include -#endif - -#include #include - -#include "fallback.h" -#include "util.h" - -#include "wutil.h" -#include "common.h" -#include "complete.h" -#include "output.h" -#include "input_common.h" -#include "env_universal.h" -#include "print_help.h" -#include "highlight.h" -#endif +#include #define PAGER_SELECTION_NONE ((size_t)(-1)) @@ -70,16 +12,6 @@ typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; typedef std::vector comp_info_list_t; -enum -{ - LINE_UP = R_NULL+1, - LINE_DOWN, - PAGE_UP, - PAGE_DOWN -} -; - - /** The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions */ #define PAGER_MIN_WIDTH 16 From 4c5c1fc9ef22fff4e03db4632b4692b0f7e77966 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 17:38:20 -0800 Subject: [PATCH 025/145] Suppress the pager progress message if the listing fits onscreen --- pager.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pager.cpp b/pager.cpp index 91d7e7ad9..f4ecce7c6 100644 --- a/pager.cpp +++ b/pager.cpp @@ -360,6 +360,7 @@ void pager_t::set_term_size(int w, int h) assert(h > 0); available_term_width = w; available_term_height = h; + recalc_min_widths(&completion_infos); } /** @@ -534,7 +535,7 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co /* Ellipsis helper string. Either empty or containing the ellipsis char */ const wchar_t ellipsis_string[] = {ellipsis_char == L'\x2026' ? L'\x2026' : L'\0', L'\0'}; - /* Add the progress line. It's a "more to disclose" line if necessary. */ + /* Add the progress line. It's a "more to disclose" line if necessary, or a row listing if it's scrollable; otherwise ignore it */ wcstring progress_text; if (rendering->remaining_to_disclose == 1) { @@ -545,13 +546,17 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co { progress_text = format_string(L"%lsand %lu more rows", ellipsis_string, (unsigned long)rendering->remaining_to_disclose); } - else + else if (start_row > 0 || stop_row < row_count) { - /* The +1 here is because we are zero indexed, but want to present things as 1-indexed. We do not add 1 to stop_row or row_count because these are the "past the last value" */ + /* We have a scrollable interface. The +1 here is because we are zero indexed, but want to present things as 1-indexed. We do not add 1 to stop_row or row_count because these are the "past the last value" */ progress_text = format_string(L"rows %lu to %lu of %lu", start_row + 1, stop_row, row_count); } - line_t &line = rendering->screen_data.add_line(); - print_max(progress_text.c_str(), highlight_spec_pager_progress | highlight_make_background(highlight_spec_pager_progress), term_width, true /* has_more */, &line); + + if (! progress_text.empty()) + { + line_t &line = rendering->screen_data.add_line(); + print_max(progress_text.c_str(), highlight_spec_pager_progress | highlight_make_background(highlight_spec_pager_progress), term_width, true /* has_more */, &line); + } } return print; } From 0fbddb0df1495e1cb275fa5ab15ba7f0ab3cc9fa Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 17:51:28 -0800 Subject: [PATCH 026/145] Add fish_new_pager variable to enable new pager on request, disabled by default. --- parser.cpp | 13 +++++++++++++ parser.h | 1 + reader.cpp | 5 +++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/parser.cpp b/parser.cpp index 9bb1e6490..4badfff83 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3122,3 +3122,16 @@ bool parser_use_ast(void) return from_string(var); } } + +bool pager_use_inline(void) +{ + env_var_t var = env_get_string(L"fish_new_pager"); + if (var.missing_or_empty()) + { + return 0; + } + else + { + return from_string(var); + } +} diff --git a/parser.h b/parser.h index 32add3fb1..6e43c8da0 100644 --- a/parser.h +++ b/parser.h @@ -547,6 +547,7 @@ public: /* Temporary */ bool parser_use_ast(void); +bool pager_use_inline(void); #endif diff --git a/reader.cpp b/reader.cpp index 1c313a63b..2bba5f971 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1876,8 +1876,9 @@ static bool handle_completions(const std::vector &comp) parse_util_get_parameter_info(data->command_line, data->buff_pos, "e, NULL, NULL); bool is_quoted = (quote != L'\0'); - if (1) + if (pager_use_inline()) { + /* Inline pager */ data->pager.set_prefix(prefix); data->pager.set_completions(surviving_completions); @@ -1886,7 +1887,7 @@ static bool handle_completions(const std::vector &comp) } else { - /* Clear the autosuggestion from the old commandline before abandoning it (see #561) */ + /* Classic pager. Clear the autosuggestion from the old commandline before abandoning it (see #561) */ if (! data->autosuggestion.empty()) reader_repaint_without_autosuggestion(); From 2d43517914a226d2549f7bbe3b677394ab9de061 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 18:37:04 -0800 Subject: [PATCH 027/145] Run 'make depend' to update header dependencies --- Makefile.in | 169 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 104 insertions(+), 65 deletions(-) diff --git a/Makefile.in b/Makefile.in index b67ffac01..b42561ab8 100644 --- a/Makefile.in +++ b/Makefile.in @@ -794,41 +794,50 @@ clean: # DO NOT DELETE THIS LINE -- make depend depends on it. autoload.o: config.h autoload.h common.h util.h lru.h wutil.h signal.h env.h -autoload.o: exec.h proc.h io.h +autoload.o: exec.h proc.h io.h parse_tree.h tokenizer.h parse_constants.h builtin.o: config.h signal.h fallback.h util.h wutil.h common.h builtin.h -builtin.o: io.h function.h event.h complete.h proc.h parser.h reader.h env.h -builtin.o: wgetopt.h sanity.h tokenizer.h wildcard.h expand.h input_common.h -builtin.o: input.h intern.h exec.h highlight.h screen.h color.h parse_util.h -builtin.o: autoload.h lru.h parser_keywords.h path.h history.h -builtin.o: builtin_set.cpp builtin_commandline.cpp builtin_complete.cpp -builtin.o: builtin_ulimit.cpp builtin_jobs.cpp builtin_printf.cpp +builtin.o: io.h function.h event.h complete.h proc.h parse_tree.h tokenizer.h +builtin.o: parse_constants.h parser.h reader.h highlight.h env.h color.h +builtin.o: wgetopt.h sanity.h wildcard.h expand.h input_common.h input.h +builtin.o: intern.h exec.h parse_util.h autoload.h lru.h parser_keywords.h +builtin.o: path.h history.h builtin_set.cpp builtin_commandline.cpp +builtin.o: builtin_complete.cpp builtin_ulimit.cpp builtin_jobs.cpp +builtin.o: builtin_set_color.cpp output.h screen.h builtin_printf.cpp builtin_commandline.o: config.h signal.h fallback.h util.h wutil.h common.h -builtin_commandline.o: builtin.h io.h wgetopt.h reader.h complete.h proc.h -builtin_commandline.o: parser.h event.h function.h tokenizer.h input_common.h -builtin_commandline.o: input.h parse_util.h autoload.h lru.h +builtin_commandline.o: builtin.h io.h wgetopt.h reader.h complete.h +builtin_commandline.o: highlight.h env.h color.h proc.h parse_tree.h +builtin_commandline.o: tokenizer.h parse_constants.h parser.h event.h +builtin_commandline.o: function.h input_common.h input.h parse_util.h +builtin_commandline.o: autoload.h lru.h builtin_complete.o: config.h signal.h fallback.h util.h wutil.h common.h builtin_complete.o: builtin.h io.h complete.h wgetopt.h parser.h proc.h -builtin_complete.o: event.h function.h reader.h +builtin_complete.o: parse_tree.h tokenizer.h parse_constants.h event.h +builtin_complete.o: function.h reader.h highlight.h env.h color.h builtin_jobs.o: config.h fallback.h signal.h util.h wutil.h common.h -builtin_jobs.o: builtin.h io.h proc.h parser.h event.h function.h wgetopt.h +builtin_jobs.o: builtin.h io.h proc.h parse_tree.h tokenizer.h +builtin_jobs.o: parse_constants.h parser.h event.h function.h wgetopt.h +builtin_printf.o: common.h util.h builtin_set.o: config.h signal.h fallback.h util.h wutil.h common.h builtin.h -builtin_set.o: io.h env.h expand.h wgetopt.h proc.h parser.h event.h -builtin_set.o: function.h +builtin_set.o: io.h env.h expand.h wgetopt.h proc.h parse_tree.h tokenizer.h +builtin_set.o: parse_constants.h parser.h event.h function.h +builtin_set_color.o: config.h builtin.h util.h io.h common.h color.h output.h +builtin_set_color.o: screen.h highlight.h env.h builtin_test.o: config.h common.h util.h builtin.h io.h wutil.h proc.h -builtin_test.o: signal.h +builtin_test.o: signal.h parse_tree.h tokenizer.h parse_constants.h builtin_ulimit.o: config.h fallback.h signal.h util.h builtin.h io.h common.h builtin_ulimit.o: wgetopt.h -builtin_printf.o: wgetopt.h color.o: color.h config.h common.h util.h fallback.h signal.h common.o: config.h fallback.h signal.h util.h wutil.h common.h expand.h -common.o: proc.h io.h wildcard.h parser.h event.h function.h complete.h -common.o: util.cpp fallback.cpp +common.o: proc.h io.h parse_tree.h tokenizer.h parse_constants.h wildcard.h +common.o: complete.h parser.h event.h function.h util.cpp fallback.cpp complete.o: config.h signal.h fallback.h util.h tokenizer.h common.h -complete.o: wildcard.h expand.h proc.h io.h parser.h event.h function.h -complete.o: complete.h builtin.h env.h exec.h reader.h history.h wutil.h -complete.o: intern.h parse_util.h autoload.h lru.h parser_keywords.h path.h -env.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h env.h -env.o: sanity.h expand.h history.h reader.h complete.h parser.h event.h +complete.o: wildcard.h expand.h complete.h proc.h io.h parse_tree.h +complete.o: parse_constants.h parser.h event.h function.h builtin.h env.h +complete.o: exec.h reader.h highlight.h color.h history.h wutil.h intern.h +complete.o: parse_util.h autoload.h lru.h parser_keywords.h path.h iothread.h +env.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h +env.o: parse_tree.h tokenizer.h parse_constants.h env.h sanity.h expand.h +env.o: history.h reader.h complete.h highlight.h color.h parser.h event.h env.o: function.h env_universal.h env_universal_common.h input.h env.o: input_common.h path.h env_universal.o: config.h signal.h fallback.h util.h common.h wutil.h @@ -836,89 +845,119 @@ env_universal.o: env_universal_common.h env_universal.h env_universal_common.o: config.h signal.h fallback.h util.h common.h wutil.h env_universal_common.o: env_universal_common.h event.o: config.h signal.h fallback.h util.h wutil.h common.h function.h -event.o: event.h proc.h io.h parser.h +event.o: event.h input_common.h proc.h io.h parse_tree.h tokenizer.h +event.o: parse_constants.h parser.h exec.o: config.h signal.h fallback.h util.h iothread.h postfork.h common.h -exec.o: proc.h io.h wutil.h exec.h parser.h event.h function.h builtin.h -exec.o: env.h wildcard.h expand.h sanity.h parse_util.h autoload.h lru.h +exec.o: proc.h io.h parse_tree.h tokenizer.h parse_constants.h wutil.h exec.h +exec.o: parser.h event.h function.h builtin.h env.h wildcard.h expand.h +exec.o: complete.h sanity.h parse_util.h autoload.h lru.h expand.o: config.h signal.h fallback.h util.h common.h wutil.h env.h proc.h -expand.o: io.h parser.h event.h function.h expand.h wildcard.h exec.h -expand.o: tokenizer.h complete.h parse_util.h autoload.h lru.h +expand.o: io.h parse_tree.h tokenizer.h parse_constants.h parser.h event.h +expand.o: function.h expand.h wildcard.h complete.h exec.h iothread.h +expand.o: parse_util.h autoload.h lru.h fallback.o: config.h fallback.h signal.h util.h fish.o: config.h signal.h fallback.h util.h common.h reader.h io.h complete.h -fish.o: builtin.h function.h event.h wutil.h env.h sanity.h proc.h parser.h -fish.o: expand.h intern.h exec.h output.h screen.h color.h history.h path.h +fish.o: highlight.h env.h color.h builtin.h function.h event.h wutil.h +fish.o: sanity.h proc.h parse_tree.h tokenizer.h parse_constants.h parser.h +fish.o: expand.h intern.h exec.h output.h screen.h history.h path.h input.h +fish.o: input_common.h fish_indent.o: config.h fallback.h signal.h util.h common.h wutil.h fish_indent.o: tokenizer.h print_help.h parser_keywords.h fish_pager.o: config.h signal.h fallback.h util.h wutil.h common.h complete.h -fish_pager.o: output.h screen.h color.h input_common.h env_universal.h -fish_pager.o: env_universal_common.h print_help.h +fish_pager.o: output.h screen.h highlight.h env.h color.h input_common.h +fish_pager.o: env_universal.h env_universal_common.h print_help.h fish_tests.o: config.h signal.h fallback.h util.h common.h proc.h io.h -fish_tests.o: reader.h complete.h builtin.h function.h event.h autoload.h -fish_tests.o: lru.h wutil.h env.h expand.h parser.h tokenizer.h output.h -fish_tests.o: screen.h color.h exec.h path.h history.h highlight.h iothread.h -fish_tests.o: postfork.h +fish_tests.o: parse_tree.h tokenizer.h parse_constants.h reader.h complete.h +fish_tests.o: highlight.h env.h color.h builtin.h function.h event.h +fish_tests.o: autoload.h lru.h wutil.h expand.h parser.h output.h screen.h +fish_tests.o: exec.h path.h history.h iothread.h postfork.h parse_util.h +fish_tests.o: pager.h fishd.o: config.h signal.h fallback.h util.h common.h wutil.h fishd.o: env_universal_common.h path.h env.h print_help.h function.o: config.h signal.h wutil.h common.h util.h fallback.h function.h -function.o: event.h proc.h io.h parser.h intern.h reader.h complete.h -function.o: parse_util.h autoload.h lru.h parser_keywords.h env.h expand.h +function.o: event.h proc.h io.h parse_tree.h tokenizer.h parse_constants.h +function.o: parser.h intern.h reader.h complete.h highlight.h env.h color.h +function.o: parse_util.h autoload.h lru.h parser_keywords.h expand.h highlight.o: config.h signal.h fallback.h util.h wutil.h common.h highlight.h -highlight.o: env.h screen.h color.h tokenizer.h proc.h io.h parser.h event.h -highlight.o: function.h parse_util.h autoload.h lru.h parser_keywords.h -highlight.o: builtin.h expand.h sanity.h complete.h output.h wildcard.h -highlight.o: path.h history.h +highlight.o: env.h color.h tokenizer.h proc.h io.h parse_tree.h +highlight.o: parse_constants.h parser.h event.h function.h parse_util.h +highlight.o: autoload.h lru.h parser_keywords.h builtin.h expand.h sanity.h +highlight.o: complete.h output.h screen.h wildcard.h path.h history.h history.o: config.h fallback.h signal.h util.h sanity.h tokenizer.h common.h -history.o: wutil.h history.h intern.h path.h env.h autoload.h lru.h -history.o: iothread.h +history.o: reader.h io.h complete.h highlight.h env.h color.h wutil.h +history.o: history.h intern.h path.h autoload.h lru.h iothread.h input.o: config.h signal.h fallback.h util.h wutil.h common.h reader.h io.h -input.o: complete.h proc.h sanity.h input_common.h input.h parser.h event.h -input.o: function.h env.h expand.h output.h screen.h color.h intern.h +input.o: complete.h highlight.h env.h color.h proc.h parse_tree.h tokenizer.h +input.o: parse_constants.h sanity.h input_common.h input.h parser.h event.h +input.o: function.h expand.h output.h screen.h intern.h input_common.o: config.h fallback.h signal.h util.h common.h wutil.h input_common.o: input_common.h env_universal.h env_universal_common.h input_common.o: iothread.h intern.o: config.h fallback.h signal.h util.h wutil.h common.h intern.h io.o: config.h fallback.h signal.h util.h wutil.h common.h exec.h proc.h io.h +io.o: parse_tree.h tokenizer.h parse_constants.h iothread.o: config.h iothread.h common.h util.h signal.h key_reader.o: config.h common.h util.h fallback.h signal.h input_common.h kill.o: config.h signal.h fallback.h util.h wutil.h common.h kill.h proc.h -kill.o: io.h sanity.h env.h exec.h path.h +kill.o: io.h parse_tree.h tokenizer.h parse_constants.h sanity.h env.h exec.h +kill.o: path.h mimedb.o: config.h xdgmime.h fallback.h signal.h util.h print_help.h output.o: config.h signal.h fallback.h util.h wutil.h common.h expand.h -output.o: output.h screen.h color.h highlight.h env.h +output.o: output.h screen.h highlight.h env.h color.h +pager.o: config.h pager.h complete.h util.h common.h screen.h highlight.h +pager.o: env.h color.h input_common.h +parse_execution.o: parse_execution.h config.h util.h parse_tree.h common.h +parse_execution.o: tokenizer.h parse_constants.h proc.h signal.h io.h +parse_execution.o: parse_util.h autoload.h lru.h complete.h wildcard.h +parse_execution.o: expand.h builtin.h parser.h event.h function.h reader.h +parse_execution.o: highlight.h env.h color.h wutil.h exec.h path.h +parse_productions.o: parse_productions.h parse_tree.h config.h util.h +parse_productions.o: common.h tokenizer.h parse_constants.h +parse_tree.o: parse_productions.h parse_tree.h config.h util.h common.h +parse_tree.o: tokenizer.h parse_constants.h fallback.h signal.h wutil.h +parse_tree.o: proc.h io.h parse_util.o: config.h fallback.h signal.h util.h wutil.h common.h -parse_util.o: tokenizer.h parse_util.h autoload.h lru.h expand.h intern.h -parse_util.o: exec.h proc.h io.h env.h wildcard.h +parse_util.o: tokenizer.h parse_util.h autoload.h lru.h parse_tree.h +parse_util.o: parse_constants.h expand.h intern.h exec.h proc.h io.h env.h +parse_util.o: wildcard.h complete.h parser.h event.h function.h parser.o: config.h signal.h fallback.h util.h common.h wutil.h proc.h io.h -parser.o: parser.h event.h function.h parser_keywords.h tokenizer.h exec.h -parser.o: wildcard.h expand.h builtin.h env.h reader.h complete.h sanity.h +parser.o: parse_tree.h tokenizer.h parse_constants.h parser.h event.h +parser.o: function.h parser_keywords.h exec.h wildcard.h expand.h complete.h +parser.o: builtin.h env.h reader.h highlight.h color.h sanity.h parser.o: env_universal.h env_universal_common.h intern.h parse_util.h -parser.o: autoload.h lru.h path.h +parser.o: autoload.h lru.h path.h parse_execution.h parser_keywords.o: config.h fallback.h signal.h common.h util.h parser_keywords.o: parser_keywords.h path.o: config.h fallback.h signal.h util.h common.h env.h wutil.h path.h path.o: expand.h -postfork.o: signal.h postfork.h config.h common.h util.h proc.h io.h wutil.h -postfork.o: iothread.h exec.h +postfork.o: signal.h postfork.h config.h common.h util.h proc.h io.h +postfork.o: parse_tree.h tokenizer.h parse_constants.h wutil.h iothread.h +postfork.o: exec.h print_help.o: print_help.h proc.o: config.h signal.h fallback.h util.h wutil.h common.h proc.h io.h -proc.o: reader.h complete.h sanity.h env.h parser.h event.h function.h -proc.o: output.h screen.h color.h +proc.o: parse_tree.h tokenizer.h parse_constants.h reader.h complete.h +proc.o: highlight.h env.h color.h sanity.h parser.h event.h function.h +proc.o: output.h screen.h reader.o: config.h signal.h fallback.h util.h wutil.h common.h highlight.h -reader.o: env.h screen.h color.h reader.h io.h complete.h proc.h parser.h -reader.o: event.h function.h history.h sanity.h exec.h expand.h tokenizer.h -reader.o: kill.h input_common.h input.h output.h iothread.h intern.h path.h -reader.o: parse_util.h autoload.h lru.h +reader.o: env.h color.h reader.h io.h complete.h proc.h parse_tree.h +reader.o: tokenizer.h parse_constants.h parser.h event.h function.h history.h +reader.o: sanity.h exec.h expand.h kill.h input_common.h input.h output.h +reader.o: screen.h iothread.h intern.h path.h parse_util.h autoload.h lru.h +reader.o: parser_keywords.h pager.h sanity.o: config.h signal.h fallback.h util.h common.h sanity.h proc.h io.h -sanity.o: history.h wutil.h reader.h complete.h kill.h +sanity.o: parse_tree.h tokenizer.h parse_constants.h history.h wutil.h +sanity.o: reader.h complete.h highlight.h env.h color.h kill.h screen.o: config.h fallback.h signal.h common.h util.h wutil.h output.h -screen.o: screen.h color.h highlight.h env.h +screen.o: screen.h highlight.h env.h color.h pager.h complete.h signal.o: config.h signal.h common.h util.h fallback.h wutil.h event.h -signal.o: reader.h io.h complete.h proc.h +signal.o: reader.h io.h complete.h highlight.h env.h color.h proc.h +signal.o: parse_tree.h tokenizer.h parse_constants.h tokenizer.o: config.h fallback.h signal.h util.h wutil.h common.h tokenizer.h util.o: config.h fallback.h signal.h util.h common.h wutil.h wgetopt.o: config.h wgetopt.h wutil.h common.h util.h fallback.h signal.h wildcard.o: config.h fallback.h signal.h util.h wutil.h common.h complete.h -wildcard.o: wildcard.h expand.h reader.h io.h exec.h proc.h +wildcard.o: wildcard.h expand.h reader.h io.h highlight.h env.h color.h +wildcard.o: exec.h proc.h parse_tree.h tokenizer.h parse_constants.h wutil.o: config.h fallback.h signal.h util.h common.h wutil.h xdgmime.o: xdgmime.h xdgmimeint.h xdgmimeglob.h xdgmimemagic.h xdgmimealias.h xdgmime.o: xdgmimeparent.h From 67bb12e569d110b4b32122c6e562c3988382e8c8 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 24 Jan 2014 18:53:12 -0800 Subject: [PATCH 028/145] Attempt to fix the Linux build by including stdint.h --- complete.h | 1 + 1 file changed, 1 insertion(+) diff --git a/complete.h b/complete.h index 30a01f721..be10d17bf 100644 --- a/complete.h +++ b/complete.h @@ -14,6 +14,7 @@ #include +#include #include "util.h" #include "common.h" From 2139334c36a0f169a129ae9dfb0be5bd3e07854b Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 25 Jan 2014 15:22:28 -0800 Subject: [PATCH 029/145] Fix for issue where wc on OS X would produce leading spaces, causing down-or-search to fail to match the case statement and therefore do the wrong thing. --- share/functions/down-or-search.fish | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/functions/down-or-search.fish b/share/functions/down-or-search.fish index 3f775bfbf..8bacfb4c7 100644 --- a/share/functions/down-or-search.fish +++ b/share/functions/down-or-search.fish @@ -9,7 +9,7 @@ function down-or-search -d "Depending on cursor position and current mode, eithe # If we are on the bottom line, start search mode, # otherwise move down set lineno (commandline -L) - set line_count (commandline|wc -l) + set line_count (commandline | wc -l | tr -d ' ') switch $lineno case $line_count From 6d13b8bbc0a797bd1403c3084c6152480c98ace4 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 25 Jan 2014 15:32:13 -0800 Subject: [PATCH 030/145] Teach down-or-search how to use down-arrow to begin pager navigation --- share/functions/down-or-search.fish | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/share/functions/down-or-search.fish b/share/functions/down-or-search.fish index 8bacfb4c7..e3a9ccb3d 100644 --- a/share/functions/down-or-search.fish +++ b/share/functions/down-or-search.fish @@ -5,6 +5,13 @@ function down-or-search -d "Depending on cursor position and current mode, eithe return end + # If we are navigating the pager, then up always navigates + if commandline --paging-mode + commandline -f down-line + return + end + + # We are not already in search mode. # If we are on the bottom line, start search mode, # otherwise move down From f58dff62c7888ec00f0c10e27b46c1347ecb85d3 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 26 Jan 2014 00:41:30 -0800 Subject: [PATCH 031/145] Beginnings of work for search field feature of new pager --- highlight.cpp | 6 + highlight.h | 3 +- pager.cpp | 13 +++ pager.h | 4 + reader.cpp | 314 ++++++++++++++++++++++++++------------------------ reader.h | 36 ++++++ screen.h | 6 + 7 files changed, 231 insertions(+), 151 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index f2ae460c0..8601ced9b 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -399,6 +399,12 @@ rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background) result.set_underline(true); } } + + if (highlight & highlight_modifier_force_underline) + { + result.set_underline(true); + } + return result; } diff --git a/highlight.h b/highlight.h index dfe3f9310..6ef411f94 100644 --- a/highlight.h +++ b/highlight.h @@ -40,7 +40,8 @@ enum /* The following values are modifiers */ highlight_modifier_valid_path = 0x100, - highlight_modifier_sloppy_background = 0x200, //hackish, indicates that we should treat a foreground color as background, per certain historical behavior + highlight_modifier_force_underline = 0x200, + highlight_modifier_sloppy_background = 0x300, //hackish, indicates that we should treat a foreground color as background, per certain historical behavior /* Very special value */ highlight_spec_invalid = 0xFFFF diff --git a/pager.cpp b/pager.cpp index f4ecce7c6..e05ac3809 100644 --- a/pager.cpp +++ b/pager.cpp @@ -557,6 +557,17 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co line_t &line = rendering->screen_data.add_line(); print_max(progress_text.c_str(), highlight_spec_pager_progress | highlight_make_background(highlight_spec_pager_progress), term_width, true /* has_more */, &line); } + + if (search_field_shown) + { + /* Add the search field */ + wcstring spaces(8, L' '); + spaces.insert(spaces.begin(), 1, L'h'); + line_t *search_field = &rendering->screen_data.insert_line_at_index(0); + int search_field_written = print_max(L"filter: ", highlight_spec_normal, term_width, false, search_field); + search_field_written += print_max(spaces, highlight_modifier_force_underline, term_width - search_field_written, false, search_field); + } + } return print; } @@ -864,6 +875,8 @@ void pager_t::clear() prefix.clear(); selected_completion_idx = PAGER_SELECTION_NONE; fully_disclosed = false; + search_field_shown = false; + search_field_string.clear(); } /* Constructor */ diff --git a/pager.h b/pager.h index 1407e3624..39af0335c 100644 --- a/pager.h +++ b/pager.h @@ -45,6 +45,10 @@ class pager_t /* Fully disclosed means that we show all completions */ bool fully_disclosed; + /* Whether we show the search field */ + bool search_field_shown; + wcstring search_field_string; + /* Returns the index of the completion that should draw selected, using the given number of columns */ size_t visual_selected_completion_index(size_t rows, size_t cols) const; diff --git a/reader.cpp b/reader.cpp index 2bba5f971..1a8675f9a 100644 --- a/reader.cpp +++ b/reader.cpp @@ -193,7 +193,7 @@ class reader_data_t public: /** String containing the whole current commandline */ - wcstring command_line; + editable_line_t command_line; /** String containing the autosuggestion */ wcstring autosuggestion; @@ -253,6 +253,17 @@ public: { return command_line.size(); } + + const wcstring &command_text() const + { + return command_line.get_text(); + } + + /** The current position of the cursor in buff. */ + size_t buff_pos() const + { + return command_line.position; + } /** Do what we need to do whenever our command line changes */ void command_line_changed(void); @@ -260,9 +271,6 @@ public: /** Expand abbreviations at the current cursor position, minus backtrack_amt. */ bool expand_abbreviation_as_necessary(size_t cursor_backtrack); - /** The current position of the cursor in buff. */ - size_t buff_pos; - /** Name of the current application */ wcstring app_name; @@ -347,7 +355,6 @@ public: history(0), token_history_pos(0), search_pos(0), - buff_pos(0), complete_func(0), highlight_function(0), test_func(0), @@ -530,10 +537,10 @@ wcstring combine_command_and_autosuggestion(const wcstring &cmdline, const wcstr static void reader_repaint() { // Update the indentation - data->indents = parse_util_compute_indents(data->command_line); + data->indents = parse_util_compute_indents(data->command_text()); // Combine the command and autosuggestion into one string - wcstring full_line = combine_command_and_autosuggestion(data->command_line, data->autosuggestion); + wcstring full_line = combine_command_and_autosuggestion(data->command_text(), data->autosuggestion); size_t len = full_line.size(); if (len < 1) @@ -557,7 +564,7 @@ static void reader_repaint() data->command_length(), &colors[0], &indents[0], - data->buff_pos, + data->buff_pos(), data->current_page_rendering); data->repaint_needed = false; @@ -575,7 +582,7 @@ static void reader_repaint_without_autosuggestion() /** Internal helper function for handling killing parts of text. */ static void reader_kill(size_t begin_idx, size_t length, int mode, int newv) { - const wchar_t *begin = data->command_line.c_str() + begin_idx; + const wchar_t *begin = data->command_text().c_str() + begin_idx; if (newv) { data->kill_item = wcstring(begin, length); @@ -598,19 +605,18 @@ static void reader_kill(size_t begin_idx, size_t length, int mode, int newv) kill_replace(old, data->kill_item); } - if (data->buff_pos > begin_idx) + if (data->buff_pos() > begin_idx) { /* Move the buff position back by the number of characters we deleted, but don't go past buff_pos */ - size_t backtrack = mini(data->buff_pos - begin_idx, length); - data->buff_pos -= backtrack; + size_t backtrack = mini(data->command_line.position - begin_idx, length); + data->command_line.position -= backtrack; } - data->command_line.erase(begin_idx, length); + data->command_line.text.erase(begin_idx, length); data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); - } @@ -741,14 +747,14 @@ bool reader_data_t::expand_abbreviation_as_necessary(size_t cursor_backtrack) { /* Try expanding abbreviations */ wcstring new_cmdline; - size_t cursor_pos = this->buff_pos - mini(this->buff_pos, cursor_backtrack); - if (reader_expand_abbreviation_in_command(this->command_line, cursor_pos, &new_cmdline)) + size_t cursor_pos = this->buff_pos() - mini(this->buff_pos(), cursor_backtrack); + if (reader_expand_abbreviation_in_command(this->command_text(), cursor_pos, &new_cmdline)) { /* We expanded an abbreviation! The cursor moves by the difference in the command line lengths. */ - size_t new_buff_pos = this->buff_pos + new_cmdline.size() - this->command_line.size(); + size_t new_buff_pos = this->buff_pos() + new_cmdline.size() - this->command_line.size(); - this->command_line.swap(new_cmdline); - data->buff_pos = new_buff_pos; + this->command_line.text.swap(new_cmdline); + this->command_line.position = new_buff_pos; data->command_line_changed(); result = true; } @@ -1028,22 +1034,22 @@ void reader_react_to_color_change() static void remove_backward() { - if (data->buff_pos <= 0) + if (data->buff_pos() <= 0) return; /* Fake composed character sequences by continuing to delete until we delete a character of width at least 1. */ int width; do { - data->buff_pos -= 1; - width = fish_wcwidth(data->command_line.at(data->buff_pos)); - data->command_line.erase(data->buff_pos, 1); + data->command_line.position -= 1; + width = fish_wcwidth(data->command_line.text.at(data->command_line.position)); + data->command_line.text.erase(data->command_line.position, 1); } - while (width == 0 && data->buff_pos > 0); + while (width == 0 && data->command_line.position > 0); data->command_line_changed(); data->suppress_autosuggestion = true; - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); @@ -1062,8 +1068,8 @@ static bool insert_string(const wcstring &str, bool should_expand_abbreviations if (len == 0) return false; - data->command_line.insert(data->buff_pos, str); - data->buff_pos += len; + data->command_line.text.insert(data->buff_pos(), str); + data->command_line.position += len; data->command_line_changed(); data->suppress_autosuggestion = false; @@ -1071,8 +1077,8 @@ static bool insert_string(const wcstring &str, bool should_expand_abbreviations data->expand_abbreviation_as_necessary(1); /* Syntax highlight. Note we must have that buff_pos > 0 because we just added something nonzero to its length */ - assert(data->buff_pos > 0); - reader_super_highlight_me_plenty(data->buff_pos-1); + assert(data->buff_pos() > 0); + reader_super_highlight_me_plenty(data->buff_pos()-1); reader_repaint(); return true; @@ -1213,8 +1219,8 @@ wcstring completion_apply_to_command_line(const wcstring &val_str, complete_flag */ static void completion_insert(const wchar_t *val, complete_flags_t flags) { - size_t cursor = data->buff_pos; - wcstring new_command_line = completion_apply_to_command_line(val, flags, data->command_line, &cursor, false /* not append only */); + size_t cursor = data->buff_pos(); + wcstring new_command_line = completion_apply_to_command_line(val, flags, data->command_text(), &cursor, false /* not append only */); reader_set_buffer_maintaining_pager(new_command_line, cursor); /* Since we just inserted a completion, don't immediately do a new autosuggestion */ @@ -1295,10 +1301,10 @@ static void run_pager(const wcstring &prefix, int is_quoted, const std::vectorcommand_line.c_str(); + const wchar_t *begin, *buff = data->command_text().c_str(); - parse_util_token_extent(buff, data->buff_pos, &begin, 0, 0, 0); - base_len = data->buff_pos - (begin-buff); + parse_util_token_extent(buff, data->buff_pos(), &begin, 0, 0, 0); + base_len = data->buff_pos() - (begin-buff); } completion_text = escape_string(el.completion.c_str() + base_len, ESCAPE_ALL | ESCAPE_NO_QUOTED); @@ -1469,14 +1475,14 @@ static bool can_autosuggest(void) const wchar_t *whitespace = L" \t\r\n\v"; return ! data->suppress_autosuggestion && data->history_search.is_at_end() && - data->command_line.find_first_not_of(whitespace) != wcstring::npos; + data->command_text().find_first_not_of(whitespace) != wcstring::npos; } static void autosuggest_completed(autosuggestion_context_t *ctx, int result) { if (result && can_autosuggest() && - ctx->search_string == data->command_line && + ctx->search_string == data->command_text() && string_prefixes_string_case_insensitive(ctx->search_string, ctx->autosuggestion)) { /* Autosuggestion is active and the search term has not changed, so we're good to go */ @@ -1494,7 +1500,7 @@ static void update_autosuggestion(void) data->autosuggestion.clear(); if (data->allow_autosuggestion && ! data->suppress_autosuggestion && ! data->command_line.empty() && data->history_search.is_at_end()) { - autosuggestion_context_t *ctx = new autosuggestion_context_t(data->history, data->command_line, data->buff_pos); + autosuggestion_context_t *ctx = new autosuggestion_context_t(data->history, data->command_text(), data->buff_pos()); iothread_perform(threaded_autosuggest, autosuggest_completed, ctx); } } @@ -1508,7 +1514,7 @@ static void accept_autosuggestion(bool full) if (full) { /* Just take the whole thing */ - data->command_line = data->autosuggestion; + data->command_line.text = data->autosuggestion; } else { @@ -1519,12 +1525,12 @@ static void accept_autosuggestion(bool full) wchar_t wc = data->autosuggestion.at(idx); if (! state.consume_char(wc)) break; - data->command_line.push_back(wc); + data->command_line.text.push_back(wc); } } - data->buff_pos = data->command_line.size(); + data->command_line.position = data->command_line.size(); data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); } } @@ -1581,7 +1587,7 @@ static void reader_flash() { struct timespec pollint; - for (size_t i=0; ibuff_pos; i++) + for (size_t i=0; ibuff_pos(); i++) { data->colors.at(i) = highlight_spec_search_match<<16; } @@ -1592,7 +1598,7 @@ static void reader_flash() pollint.tv_nsec = 100 * 1000000; nanosleep(&pollint, NULL); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); } @@ -1714,10 +1720,10 @@ static bool handle_completions(const std::vector &comp) { bool done = false; bool success = false; - const wchar_t *begin, *end, *buff = data->command_line.c_str(); + const wchar_t *begin, *end, *buff = data->command_text().c_str(); - parse_util_token_extent(buff, data->buff_pos, &begin, 0, 0, 0); - end = buff+data->buff_pos; + parse_util_token_extent(buff, data->buff_pos(), &begin, 0, 0, 0); + end = buff+data->buff_pos(); const wcstring tok(begin, end - begin); @@ -1851,10 +1857,10 @@ static bool handle_completions(const std::vector &comp) /* We didn't get a common prefix. Print the list. */ size_t len, prefix_start = 0; wcstring prefix; - parse_util_get_parameter_info(data->command_line, data->buff_pos, NULL, &prefix_start, NULL); + parse_util_get_parameter_info(data->command_text(), data->buff_pos(), NULL, &prefix_start, NULL); - assert(data->buff_pos >= prefix_start); - len = data->buff_pos - prefix_start; + assert(data->buff_pos() >= prefix_start); + len = data->buff_pos() - prefix_start; if (match_type_requires_full_replacement(best_match_type)) { @@ -1863,17 +1869,17 @@ static bool handle_completions(const std::vector &comp) } else if (len <= PREFIX_MAX_LEN) { - prefix.append(data->command_line, prefix_start, len); + prefix.append(data->command_text(), prefix_start, len); } else { // append just the end of the string prefix = wcstring(&ellipsis_char, 1); - prefix.append(data->command_line, prefix_start + len - PREFIX_MAX_LEN, PREFIX_MAX_LEN); + prefix.append(data->command_text(), prefix_start + len - PREFIX_MAX_LEN, PREFIX_MAX_LEN); } wchar_t quote; - parse_util_get_parameter_info(data->command_line, data->buff_pos, "e, NULL, NULL); + parse_util_get_parameter_info(data->command_text(), data->buff_pos(), "e, NULL, NULL); bool is_quoted = (quote != L'\0'); if (pager_use_inline()) @@ -2107,7 +2113,7 @@ void reader_sanity_check() /* Note: 'data' is non-null if we are interactive, except in the testing environment */ if (get_is_interactive() && data != NULL) { - if (!(data->buff_pos <= data->command_length())) + if (!(data->buff_pos() <= data->command_length())) sanity_lose(); if (data->colors.size() != data->command_length()) @@ -2124,10 +2130,10 @@ void reader_sanity_check() */ static void set_command_line_and_position(const wcstring &new_str, size_t pos) { - data->command_line = new_str; + data->command_line.text = new_str; + data->command_line.position = pos; data->command_line_changed(); - data->buff_pos = pos; - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); } @@ -2138,8 +2144,8 @@ static void reader_replace_current_token(const wchar_t *new_token) size_t new_pos; /* Find current token */ - const wchar_t *buff = data->command_line.c_str(); - parse_util_token_extent(buff, data->buff_pos, &begin, &end, 0, 0); + const wchar_t *buff = data->command_text().c_str(); + parse_util_token_extent(buff, data->buff_pos(), &begin, &end, 0, 0); if (!begin || !end) return; @@ -2160,8 +2166,8 @@ static void reader_replace_current_token(const wchar_t *new_token) static void reset_token_history() { const wchar_t *begin, *end; - const wchar_t *buff = data->command_line.c_str(); - parse_util_token_extent((wchar_t *)buff, data->buff_pos, &begin, &end, 0, 0); + const wchar_t *buff = data->command_text().c_str(); + parse_util_token_extent((wchar_t *)buff, data->buff_pos(), &begin, &end, 0, 0); data->search_buff.clear(); if (begin) @@ -2222,7 +2228,7 @@ static void handle_token_history(int forward, int reset) } reader_replace_current_token(str); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); } else @@ -2303,7 +2309,7 @@ static void handle_token_history(int forward, int reset) if (str) { reader_replace_current_token(str); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint(); data->search_pos = data->search_prev.size(); data->search_prev.push_back(str); @@ -2335,15 +2341,15 @@ static void move_word(bool move_right, bool erase, enum move_word_style_t style, { /* Return if we are already at the edge */ const size_t boundary = move_right ? data->command_length() : 0; - if (data->buff_pos == boundary) + if (data->buff_pos() == boundary) return; /* When moving left, a value of 1 means the character at index 0. */ move_word_state_machine_t state(style); - const wchar_t * const command_line = data->command_line.c_str(); - const size_t start_buff_pos = data->buff_pos; + const wchar_t * const command_line = data->command_text().c_str(); + const size_t start_buff_pos = data->buff_pos(); - size_t buff_pos = data->buff_pos; + size_t buff_pos = data->buff_pos(); while (buff_pos != boundary) { size_t idx = (move_right ? buff_pos : buff_pos - 1); @@ -2374,7 +2380,7 @@ static void move_word(bool move_right, bool erase, enum move_word_style_t style, } else { - data->buff_pos = buff_pos; + data->command_line.position = buff_pos; reader_repaint(); } @@ -2383,7 +2389,7 @@ static void move_word(bool move_right, bool erase, enum move_word_style_t style, const wchar_t *reader_get_buffer(void) { ASSERT_IS_MAIN_THREAD(); - return data?data->command_line.c_str():NULL; + return data ? data->command_text().c_str():NULL; } history_t *reader_get_history(void) @@ -2397,21 +2403,21 @@ static void reader_set_buffer_maintaining_pager(const wcstring &b, size_t pos) { /* Callers like to pass us pointers into ourselves, so be careful! I don't know if we can use operator= with a pointer to our interior, so use an intermediate. */ size_t command_line_len = b.size(); - data->command_line = b; + data->command_line.text = b; data->command_line_changed(); /* Don't set a position past the command line length */ if (pos > command_line_len) pos = command_line_len; - data->buff_pos = pos; + data->command_line.position = pos; /* Clear history search and pager contents */ data->search_mode = NO_SEARCH; data->search_buff.clear(); data->history_search.go_to_end(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint_needed(); } @@ -2431,7 +2437,7 @@ size_t reader_get_cursor_pos() if (!data) return (size_t)(-1); - return data->buff_pos; + return data->buff_pos(); } #define ENV_CMD_DURATION L"CMD_DURATION" @@ -2715,7 +2721,7 @@ static void highlight_search(void) if (! data->search_buff.empty() && ! data->history_search.is_at_end()) { const wcstring &needle = data->search_buff; - size_t match_pos = data->command_line.find(needle); + size_t match_pos = data->command_text().find(needle); if (match_pos != wcstring::npos) { size_t end = match_pos + needle.size(); @@ -2730,7 +2736,7 @@ static void highlight_search(void) static void highlight_complete(background_highlight_context_t *ctx, int result) { ASSERT_IS_MAIN_THREAD(); - if (ctx->string_to_highlight == data->command_line) + if (ctx->string_to_highlight == data->command_line.text) { /* The data hasn't changed, so swap in our colors. The colors may not have changed, so do nothing if they have not. */ assert(ctx->colors.size() == data->command_length()); @@ -2766,12 +2772,12 @@ static void reader_super_highlight_me_plenty(size_t match_highlight_pos) { reader_sanity_check(); - background_highlight_context_t *ctx = new background_highlight_context_t(data->command_line, match_highlight_pos, data->highlight_function); + background_highlight_context_t *ctx = new background_highlight_context_t(data->command_text(), match_highlight_pos, data->highlight_function); iothread_perform(threaded_highlight, highlight_complete, ctx); highlight_search(); /* Here's a hack. Check to see if our autosuggestion still applies; if so, don't recompute it. Since the autosuggestion computation is asynchronous, this avoids "flashing" as you type into the autosuggestion. */ - const wcstring &cmd = data->command_line, &suggest = data->autosuggestion; + const wcstring &cmd = data->command_text(), &suggest = data->autosuggestion; if (can_autosuggest() && ! suggest.empty() && string_prefixes_string_case_insensitive(cmd, suggest)) { /* The autosuggestion is still reasonable, so do nothing */ @@ -2902,8 +2908,8 @@ static int read_i(void) else if (tmp) { wcstring command = tmp; - data->buff_pos=0; - data->command_line.clear(); + data->command_line.position=0; + data->command_line.text.clear(); data->command_line_changed(); reader_run_command(parser, command); if (data->end_loop) @@ -3008,7 +3014,7 @@ const wchar_t *reader_readline(void) exec_prompt(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); s_reset(&data->screen, screen_reset_abandon_line); reader_repaint(); @@ -3104,17 +3110,17 @@ const wchar_t *reader_readline(void) //fprintf(stderr, "\n\nchar: %ls\n\n", describe_char(c).c_str()); - const wchar_t * const buff = data->command_line.c_str(); + const wchar_t * const buff = data->command_text().c_str(); switch (c) { /* go to beginning of line*/ case R_BEGINNING_OF_LINE: { - while ((data->buff_pos>0) && - (buff[data->buff_pos-1] != L'\n')) + while ((data->buff_pos()>0) && + (buff[data->buff_pos()-1] != L'\n')) { - data->buff_pos--; + data->command_line.position--; } reader_repaint_needed(); @@ -3123,12 +3129,12 @@ const wchar_t *reader_readline(void) case R_END_OF_LINE: { - if (data->buff_pos < data->command_length()) + if (data->buff_pos() < data->command_length()) { - while (buff[data->buff_pos] && - buff[data->buff_pos] != L'\n') + while (buff[data->buff_pos()] && + buff[data->buff_pos()] != L'\n') { - data->buff_pos++; + data->command_line.position++; } } else @@ -3143,7 +3149,7 @@ const wchar_t *reader_readline(void) case R_BEGINNING_OF_BUFFER: { - data->buff_pos = 0; + data->command_line.position = 0; reader_repaint_needed(); break; @@ -3152,7 +3158,7 @@ const wchar_t *reader_readline(void) /* go to EOL*/ case R_END_OF_BUFFER: { - data->buff_pos = data->command_length(); + data->command_line.position = data->command_length(); reader_repaint_needed(); break; @@ -3200,24 +3206,24 @@ const wchar_t *reader_readline(void) /* Either the user hit tab only once, or we had no visible completion list. */ /* Remove a trailing backslash. This may trigger an extra repaint, but this is rare. */ - if (is_backslashed(data->command_line, data->buff_pos)) + if (is_backslashed(data->command_text(), data->buff_pos())) { remove_backward(); } /* Get the string; we have to do this after removing any trailing backslash */ - const wchar_t * const buff = data->command_line.c_str(); + const wchar_t * const buff = data->command_text().c_str(); /* Clear the completion list */ comp.clear(); /* Figure out the extent of the command substitution surrounding the cursor. This is because we only look at the current command substitution to form completions - stuff happening outside of it is not interesting. */ const wchar_t *cmdsub_begin, *cmdsub_end; - parse_util_cmdsubst_extent(buff, data->buff_pos, &cmdsub_begin, &cmdsub_end); + parse_util_cmdsubst_extent(buff, data->buff_pos(), &cmdsub_begin, &cmdsub_end); /* Figure out the extent of the token within the command substitution. Note we pass cmdsub_begin here, not buff */ const wchar_t *token_begin, *token_end; - parse_util_token_extent(cmdsub_begin, data->buff_pos - (cmdsub_begin-buff), &token_begin, &token_end, 0, 0); + parse_util_token_extent(cmdsub_begin, data->buff_pos() - (cmdsub_begin-buff), &token_begin, &token_end, 0, 0); /* Hack: the token may extend past the end of the command substitution, e.g. in (echo foo) the last token is 'foo)'. Don't let that happen. */ if (token_end > cmdsub_end) token_end = cmdsub_end; @@ -3226,9 +3232,9 @@ const wchar_t *reader_readline(void) size_t end_of_token_offset = token_end - buff; /* Move the cursor to the end */ - if (data->buff_pos != end_of_token_offset) + if (data->buff_pos() != end_of_token_offset) { - data->buff_pos = end_of_token_offset; + data->command_line.position = end_of_token_offset; reader_repaint(); } @@ -3243,8 +3249,8 @@ const wchar_t *reader_readline(void) prioritize_completions(comp); /* Record our cycle_command_line */ - cycle_command_line = data->command_line; - cycle_cursor_pos = data->buff_pos; + cycle_command_line = data->command_text(); + cycle_cursor_pos = data->buff_pos(); comp_empty = handle_completions(comp); @@ -3258,8 +3264,8 @@ const wchar_t *reader_readline(void) /* kill */ case R_KILL_LINE: { - const wchar_t *buff = data->command_line.c_str(); - const wchar_t *begin = &buff[data->buff_pos]; + const wchar_t *buff = data->command_text().c_str(); + const wchar_t *begin = &buff[data->buff_pos()]; const wchar_t *end = begin; while (*end && *end != L'\n') @@ -3279,10 +3285,10 @@ const wchar_t *reader_readline(void) case R_BACKWARD_KILL_LINE: { - if (data->buff_pos > 0) + if (data->buff_pos() > 0) { - const wchar_t *buff = data->command_line.c_str(); - const wchar_t *end = &buff[data->buff_pos]; + const wchar_t *buff = data->command_text().c_str(); + const wchar_t *end = &buff[data->buff_pos()]; const wchar_t *begin = end; /* Make sure we delete at least one character (see #580) */ @@ -3308,8 +3314,8 @@ const wchar_t *reader_readline(void) case R_KILL_WHOLE_LINE: { - const wchar_t *buff = data->command_line.c_str(); - const wchar_t *end = &buff[data->buff_pos]; + const wchar_t *buff = data->command_text().c_str(); + const wchar_t *end = &buff[data->buff_pos()]; const wchar_t *begin = end; size_t len; @@ -3380,7 +3386,7 @@ const wchar_t *reader_readline(void) reader_replace_current_token(data->search_buff.c_str()); } data->search_buff.clear(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint_needed(); } @@ -3401,9 +3407,9 @@ const wchar_t *reader_readline(void) Remove the current character in the character buffer and on the screen using syntax highlighting, etc. */ - if (data->buff_pos < data->command_length()) + if (data->buff_pos() < data->command_length()) { - data->buff_pos++; + data->command_line.position++; remove_backward(); } break; @@ -3420,9 +3426,9 @@ const wchar_t *reader_readline(void) data->autosuggestion.clear(); /* Allow backslash-escaped newlines, but only if the following character is whitespace, or we're at the end of the text (see issue #163) */ - if (is_backslashed(data->command_line, data->buff_pos)) + if (is_backslashed(data->command_text(), data->buff_pos())) { - if (data->buff_pos >= data->command_length() || iswspace(data->command_line.at(data->buff_pos))) + if (data->buff_pos() >= data->command_length() || iswspace(data->command_text().at(data->buff_pos()))) { insert_char('\n'); break; @@ -3430,7 +3436,7 @@ const wchar_t *reader_readline(void) } /* See if this command is valid */ - int command_test_result = data->test_func(data->command_line.c_str()); + int command_test_result = data->test_func(data->command_text().c_str()); if (command_test_result == 0 || command_test_result == PARSER_TEST_INCOMPLETE) { /* This command is valid, but an abbreviation may make it invalid. If so, we will have to test again. */ @@ -3438,8 +3444,8 @@ const wchar_t *reader_readline(void) if (abbreviation_expanded) { /* It's our reponsibility to rehighlight and repaint. But everything we do below triggers a repaint. */ - reader_super_highlight_me_plenty(data->buff_pos); - command_test_result = data->test_func(data->command_line.c_str()); + reader_super_highlight_me_plenty(data->buff_pos()); + command_test_result = data->test_func(data->command_text().c_str()); } } @@ -3449,12 +3455,12 @@ const wchar_t *reader_readline(void) case 0: { /* Finished command, execute it. Don't add items that start with a leading space. */ - if (data->history != NULL && ! data->command_line.empty() && data->command_line.at(0) != L' ') + if (data->history != NULL && ! data->command_line.empty() && data->command_text().at(0) != L' ') { - data->history->add_with_file_detection(data->command_line); + data->history->add_with_file_detection(data->command_text()); } finished=1; - data->buff_pos=data->command_length(); + data->command_line.position = data->command_length(); reader_repaint_needed(); break; } @@ -3506,7 +3512,7 @@ const wchar_t *reader_readline(void) data->search_mode = TOKEN_SEARCH; } - data->search_buff.append(data->command_line); + data->search_buff.append(data->command_text()); data->history_search = history_search_t(*data->history, data->search_buff, HISTORY_SEARCH_TYPE_CONTAINS); /* Skip the autosuggestion as history unless it was truncated */ @@ -3577,9 +3583,9 @@ const wchar_t *reader_readline(void) { select_completion_in_direction(direction_west, cycle_command_line, cycle_cursor_pos); } - else if (data->buff_pos > 0) + else if (data->command_line.position > 0) { - data->buff_pos--; + data->command_line.position--; reader_repaint_needed(); } break; @@ -3592,9 +3598,9 @@ const wchar_t *reader_readline(void) { select_completion_in_direction(direction_east, cycle_command_line, cycle_cursor_pos); } - else if (data->buff_pos < data->command_length()) + else if (data->command_line.position < data->command_length()) { - data->buff_pos++; + data->command_line.position++; reader_repaint_needed(); } else @@ -3631,7 +3637,7 @@ const wchar_t *reader_readline(void) /* move one word right*/ case R_FORWARD_WORD: { - if (data->buff_pos < data->command_length()) + if (data->buff_pos() < data->command_length()) { move_word(MOVE_DIR_RIGHT, false /* do not erase */, move_word_style_punctuation, false); } @@ -3644,7 +3650,7 @@ const wchar_t *reader_readline(void) case R_BEGINNING_OF_HISTORY: { - data->history_search = history_search_t(*data->history, data->command_line, HISTORY_SEARCH_TYPE_PREFIX); + data->history_search = history_search_t(*data->history, data->command_text(), HISTORY_SEARCH_TYPE_PREFIX); data->history_search.go_to_beginning(); if (! data->history_search.is_at_end()) { @@ -3695,7 +3701,7 @@ const wchar_t *reader_readline(void) else { /* Not navigating the pager contents */ - int line_old = parse_util_get_line_from_offset(data->command_line, data->buff_pos); + int line_old = parse_util_get_line_from_offset(data->command_text(), data->buff_pos()); int line_new; if (c == R_UP_LINE) @@ -3703,7 +3709,7 @@ const wchar_t *reader_readline(void) else line_new = line_old+1; - int line_count = parse_util_lineno(data->command_line.c_str(), data->command_length())-1; + int line_count = parse_util_lineno(data->command_text().c_str(), data->command_length())-1; if (line_new >= 0 && line_new <= line_count) { @@ -3715,17 +3721,17 @@ const wchar_t *reader_readline(void) size_t line_offset_old; size_t total_offset_new; - base_pos_new = parse_util_get_offset_from_line(data->command_line, line_new); + base_pos_new = parse_util_get_offset_from_line(data->command_text(), line_new); - base_pos_old = parse_util_get_offset_from_line(data->command_line, line_old); + base_pos_old = parse_util_get_offset_from_line(data->command_text(), line_old); assert(base_pos_new != (size_t)(-1) && base_pos_old != (size_t)(-1)); indent_old = data->indents.at(base_pos_old); indent_new = data->indents.at(base_pos_new); - line_offset_old = data->buff_pos - parse_util_get_offset_from_line(data->command_line, line_old); - total_offset_new = parse_util_get_offset(data->command_line, line_new, line_offset_old - 4*(indent_new-indent_old)); - data->buff_pos = total_offset_new; + line_offset_old = data->buff_pos() - parse_util_get_offset_from_line(data->command_text(), line_old); + total_offset_new = parse_util_get_offset(data->command_text(), line_new, line_offset_old - 4*(indent_new-indent_old)); + data->command_line.position = total_offset_new; reader_repaint_needed(); } } @@ -3755,20 +3761,20 @@ const wchar_t *reader_readline(void) } /* If the cursor is at the end, transpose the last two characters of the line */ - if (data->buff_pos == data->command_length()) + if (data->command_line.position == data->command_length()) { - data->buff_pos--; + data->command_line.position--; } /* Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. */ - if (data->buff_pos > 0) + if (data->command_line.position > 0) { - wcstring local_cmd = data->command_line; - std::swap(local_cmd.at(data->buff_pos), local_cmd.at(data->buff_pos-1)); - set_command_line_and_position(local_cmd, data->buff_pos + 1); + wcstring local_cmd = data->command_text(); + std::swap(local_cmd.at(data->buff_pos()), local_cmd.at(data->buff_pos()-1)); + set_command_line_and_position(local_cmd, data->buff_pos() + 1); } break; } @@ -3776,14 +3782,14 @@ const wchar_t *reader_readline(void) case R_TRANSPOSE_WORDS: { size_t len = data->command_length(); - const wchar_t *buff = data->command_line.c_str(); + const wchar_t *buff = data->command_text().c_str(); const wchar_t *tok_begin, *tok_end, *prev_begin, *prev_end; /* If we are not in a token, look for one ahead */ - while (data->buff_pos != len && !iswalnum(buff[data->buff_pos])) - data->buff_pos++; + while (data->buff_pos() != len && !iswalnum(buff[data->buff_pos()])) + data->command_line.position++; - parse_util_token_extent(buff, data->buff_pos, &tok_begin, &tok_end, &prev_begin, &prev_end); + parse_util_token_extent(buff, data->buff_pos(), &tok_begin, &tok_end, &prev_begin, &prev_end); /* In case we didn't find a token at or after the cursor... */ if (tok_begin == &buff[len]) @@ -3821,11 +3827,11 @@ const wchar_t *reader_readline(void) bool capitalized_first = false; // We apply the operation from the current location to the end of the word - size_t pos = data->buff_pos; + size_t pos = data->buff_pos(); move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false); - for (; pos < data->buff_pos; pos++) + for (; pos < data->buff_pos(); pos++) { - wchar_t chr = data->command_line.at(pos); + wchar_t chr = data->command_text().at(pos); // We always change the case; this decides whether we go uppercase (true) or lowercase (false) bool make_uppercase; @@ -3840,11 +3846,11 @@ const wchar_t *reader_readline(void) else chr = towlower(chr); - data->command_line.at(pos) = chr; + data->command_line.text.at(pos) = chr; capitalized_first = capitalized_first || make_uppercase; } data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos); + reader_super_highlight_me_plenty(data->buff_pos()); reader_repaint_needed(); break; } @@ -3854,11 +3860,19 @@ const wchar_t *reader_readline(void) { if ((!wchar_private(c)) && (((c>31) || (c==L'\n'))&& (c != 127))) { - /* Expand abbreviations after space */ - bool should_expand_abbreviations = (c == L' '); + + if (is_navigating_pager_contents()) + { - /* Regular character */ - insert_char(c, should_expand_abbreviations); + } + else + { + /* Expand abbreviations after space */ + bool should_expand_abbreviations = (c == L' '); + + /* Regular character */ + insert_char(c, should_expand_abbreviations); + } } else { @@ -3911,7 +3925,7 @@ const wchar_t *reader_readline(void) set_color(rgb_color_t::reset(), rgb_color_t::reset()); } - return finished ? data->command_line.c_str() : 0; + return finished ? data->command_text().c_str() : NULL; } int reader_search_mode() diff --git a/reader.h b/reader.h index 82694e21b..cf8d5043e 100644 --- a/reader.h +++ b/reader.h @@ -22,6 +22,42 @@ class parser_t; class completion_t; class history_t; +/* Helper class for storing a command line */ +class editable_line_t +{ + public: + + /** The command line */ + wcstring text; + + /** The current position of the cursor in the command line */ + size_t position; + + const wcstring &get_text() const + { + return text; + } + + /* Gets the length of the text */ + size_t size() const + { + return text.size(); + } + + bool empty() const + { + return text.empty(); + } + + editable_line_t() : text(), position(0) + { + } + + /* Internal */ + void kill(size_t begin_idx, size_t length, int mode, int newv); + +}; + /** Read commands from \c fd until encountering EOF */ diff --git a/screen.h b/screen.h index 33eb58ab5..0733b8046 100644 --- a/screen.h +++ b/screen.h @@ -113,6 +113,12 @@ public: } return line_datas.at(idx); } + + line_t &insert_line_at_index(size_t idx) + { + assert(idx <= line_datas.size()); + return *line_datas.insert(line_datas.begin() + idx, line_t()); + } line_t &line(size_t idx) { From b9372944f5ec24156100042b73799f7298b8fb26 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 26 Jan 2014 14:47:15 -0800 Subject: [PATCH 032/145] Refactor reader to work on selectable 'editable_line_t' so that most commands can operate on pager search field --- reader.cpp | 370 +++++++++++++++++++++++++++++------------------------ reader.h | 5 +- 2 files changed, 208 insertions(+), 167 deletions(-) diff --git a/reader.cpp b/reader.cpp index 1a8675f9a..d73fa5af2 100644 --- a/reader.cpp +++ b/reader.cpp @@ -181,7 +181,13 @@ static volatile unsigned int s_generation_count; /* This pthreads generation count is set when an autosuggestion background thread starts up, so it can easily check if the work it is doing is no longer useful. */ static pthread_key_t generation_count_key; -static void set_command_line_and_position(const wcstring &new_str, size_t pos); +static void set_command_line_and_position(editable_line_t *el, const wcstring &new_str, size_t pos); + +void editable_line_t::insert_string(const wcstring &str) +{ + this->text.insert(this->position, str); + this->position += str.size(); +} /** A struct describing the state of the interactive reader. These @@ -254,15 +260,10 @@ public: return command_line.size(); } - const wcstring &command_text() const + /* The line that is currently being edited. Typically the command line, but may be the search field */ + editable_line_t *active_edit_line() { - return command_line.get_text(); - } - - /** The current position of the cursor in buff. */ - size_t buff_pos() const - { - return command_line.position; + return &command_line; } /** Do what we need to do whenever our command line changes */ @@ -418,7 +419,7 @@ static struct termios terminal_mode_on_startup; static struct termios terminal_mode_for_executing_programs; -static void reader_super_highlight_me_plenty(size_t pos); +static void reader_super_highlight_me_plenty(int highlight_pos_adjust = 0); /** Variable to keep track of forced exits - see \c reader_exit_forced(); @@ -536,11 +537,12 @@ wcstring combine_command_and_autosuggestion(const wcstring &cmdline, const wcstr static void reader_repaint() { + editable_line_t *el = &data->command_line; // Update the indentation - data->indents = parse_util_compute_indents(data->command_text()); + data->indents = parse_util_compute_indents(el->text); // Combine the command and autosuggestion into one string - wcstring full_line = combine_command_and_autosuggestion(data->command_text(), data->autosuggestion); + wcstring full_line = combine_command_and_autosuggestion(el->text, data->autosuggestion); size_t len = full_line.size(); if (len < 1) @@ -564,7 +566,7 @@ static void reader_repaint() data->command_length(), &colors[0], &indents[0], - data->buff_pos(), + el->position, data->current_page_rendering); data->repaint_needed = false; @@ -582,7 +584,8 @@ static void reader_repaint_without_autosuggestion() /** Internal helper function for handling killing parts of text. */ static void reader_kill(size_t begin_idx, size_t length, int mode, int newv) { - const wchar_t *begin = data->command_text().c_str() + begin_idx; + editable_line_t *el = data->active_edit_line(); + const wchar_t *begin = el->text.c_str() + begin_idx; if (newv) { data->kill_item = wcstring(begin, length); @@ -605,17 +608,17 @@ static void reader_kill(size_t begin_idx, size_t length, int mode, int newv) kill_replace(old, data->kill_item); } - if (data->buff_pos() > begin_idx) + if (el->position > begin_idx) { /* Move the buff position back by the number of characters we deleted, but don't go past buff_pos */ - size_t backtrack = mini(data->command_line.position - begin_idx, length); - data->command_line.position -= backtrack; + size_t backtrack = mini(el->position - begin_idx, length); + el->position -= backtrack; } - data->command_line.text.erase(begin_idx, length); + el->text.erase(begin_idx, length); data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); } @@ -743,18 +746,19 @@ bool reader_expand_abbreviation_in_command(const wcstring &cmdline, size_t curso bool reader_data_t::expand_abbreviation_as_necessary(size_t cursor_backtrack) { bool result = false; - if (this->expand_abbreviations) + editable_line_t *el = data->active_edit_line(); + if (this->expand_abbreviations && el == &data->command_line) { /* Try expanding abbreviations */ wcstring new_cmdline; - size_t cursor_pos = this->buff_pos() - mini(this->buff_pos(), cursor_backtrack); - if (reader_expand_abbreviation_in_command(this->command_text(), cursor_pos, &new_cmdline)) + size_t cursor_pos = el->position - mini(el->position, cursor_backtrack); + if (reader_expand_abbreviation_in_command(el->text, cursor_pos, &new_cmdline)) { /* We expanded an abbreviation! The cursor moves by the difference in the command line lengths. */ - size_t new_buff_pos = this->buff_pos() + new_cmdline.size() - this->command_line.size(); + size_t new_buff_pos = el->position + new_cmdline.size() - el->text.size(); - this->command_line.text.swap(new_cmdline); - this->command_line.position = new_buff_pos; + el->text.swap(new_cmdline); + el->position = new_buff_pos; data->command_line_changed(); result = true; } @@ -1033,23 +1037,24 @@ void reader_react_to_color_change() */ static void remove_backward() { - - if (data->buff_pos() <= 0) + editable_line_t *el = data->active_edit_line(); + + if (el->position <= 0) return; /* Fake composed character sequences by continuing to delete until we delete a character of width at least 1. */ int width; do { - data->command_line.position -= 1; - width = fish_wcwidth(data->command_line.text.at(data->command_line.position)); - data->command_line.text.erase(data->command_line.position, 1); + el->position -= 1; + width = fish_wcwidth(el->text.at(el->position)); + el->text.erase(el->position, 1); } - while (width == 0 && data->command_line.position > 0); + while (width == 0 && el->position > 0); data->command_line_changed(); data->suppress_autosuggestion = true; - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); @@ -1067,18 +1072,23 @@ static bool insert_string(const wcstring &str, bool should_expand_abbreviations size_t len = str.size(); if (len == 0) return false; - - data->command_line.text.insert(data->buff_pos(), str); - data->command_line.position += len; + + editable_line_t *el = data->active_edit_line(); + el->insert_string(str); + data->command_line_changed(); - data->suppress_autosuggestion = false; + + if (el == &data->command_line) + { + data->suppress_autosuggestion = false; - if (should_expand_abbreviations) - data->expand_abbreviation_as_necessary(1); + if (should_expand_abbreviations) + data->expand_abbreviation_as_necessary(1); - /* Syntax highlight. Note we must have that buff_pos > 0 because we just added something nonzero to its length */ - assert(data->buff_pos() > 0); - reader_super_highlight_me_plenty(data->buff_pos()-1); + /* Syntax highlight. Note we must have that buff_pos > 0 because we just added something nonzero to its length */ + assert(el->position > 0); + reader_super_highlight_me_plenty(-1); + } reader_repaint(); return true; @@ -1219,8 +1229,9 @@ wcstring completion_apply_to_command_line(const wcstring &val_str, complete_flag */ static void completion_insert(const wchar_t *val, complete_flags_t flags) { - size_t cursor = data->buff_pos(); - wcstring new_command_line = completion_apply_to_command_line(val, flags, data->command_text(), &cursor, false /* not append only */); + editable_line_t *el = data->active_edit_line(); + size_t cursor = el->position; + wcstring new_command_line = completion_apply_to_command_line(val, flags, el->text, &cursor, false /* not append only */); reader_set_buffer_maintaining_pager(new_command_line, cursor); /* Since we just inserted a completion, don't immediately do a new autosuggestion */ @@ -1287,37 +1298,39 @@ static void run_pager(const wcstring &prefix, int is_quoted, const std::vectorcommand_line; + for (size_t i=0; i< comp.size(); i++) { long base_len=-1; - const completion_t &el = comp.at(i); + const completion_t &cmpl = comp.at(i); wcstring completion_text; wcstring description_text; // Note that an empty completion is perfectly sensible here, e.g. tab-completing 'foo' with a file called 'foo' and another called 'foobar' - if ((el.flags & COMPLETE_REPLACES_TOKEN) && match_type_shares_prefix(el.match.type)) + if ((cmpl.flags & COMPLETE_REPLACES_TOKEN) && match_type_shares_prefix(cmpl.match.type)) { // Compute base_len if we have not yet if (base_len == -1) { - const wchar_t *begin, *buff = data->command_text().c_str(); + const wchar_t *begin, *buff = el->text.c_str(); - parse_util_token_extent(buff, data->buff_pos(), &begin, 0, 0, 0); - base_len = data->buff_pos() - (begin-buff); + parse_util_token_extent(buff, el->position, &begin, 0, 0, 0); + base_len = el->position - (begin-buff); } - completion_text = escape_string(el.completion.c_str() + base_len, ESCAPE_ALL | ESCAPE_NO_QUOTED); + completion_text = escape_string(cmpl.completion.c_str() + base_len, ESCAPE_ALL | ESCAPE_NO_QUOTED); } else { - completion_text = escape_string(el.completion, ESCAPE_ALL | ESCAPE_NO_QUOTED); + completion_text = escape_string(cmpl.completion, ESCAPE_ALL | ESCAPE_NO_QUOTED); } - if (! el.description.empty()) + if (! cmpl.description.empty()) { - description_text = escape_string(el.description, true); + description_text = escape_string(cmpl.description, true); } /* It's possible (even common) to have an empty completion with no description. An example would be completing 'foo' with extant files 'foo' and 'foobar'. But fish_pager ignores blank lines. So if our completion text is empty, always include a description, even if it's empty. @@ -1472,17 +1485,19 @@ static int threaded_autosuggest(autosuggestion_context_t *ctx) static bool can_autosuggest(void) { /* We autosuggest if suppress_autosuggestion is not set, if we're not doing a history search, and our command line contains a non-whitespace character. */ + const editable_line_t *el = data->active_edit_line(); const wchar_t *whitespace = L" \t\r\n\v"; return ! data->suppress_autosuggestion && data->history_search.is_at_end() && - data->command_text().find_first_not_of(whitespace) != wcstring::npos; + el == &data->command_line && + el->text.find_first_not_of(whitespace) != wcstring::npos; } static void autosuggest_completed(autosuggestion_context_t *ctx, int result) { if (result && can_autosuggest() && - ctx->search_string == data->command_text() && + ctx->search_string == data->command_line.text && string_prefixes_string_case_insensitive(ctx->search_string, ctx->autosuggestion)) { /* Autosuggestion is active and the search term has not changed, so we're good to go */ @@ -1500,7 +1515,8 @@ static void update_autosuggestion(void) data->autosuggestion.clear(); if (data->allow_autosuggestion && ! data->suppress_autosuggestion && ! data->command_line.empty() && data->history_search.is_at_end()) { - autosuggestion_context_t *ctx = new autosuggestion_context_t(data->history, data->command_text(), data->buff_pos()); + const editable_line_t *el = data->active_edit_line(); + autosuggestion_context_t *ctx = new autosuggestion_context_t(data->history, el->text, el->position); iothread_perform(threaded_autosuggest, autosuggest_completed, ctx); } } @@ -1530,7 +1546,7 @@ static void accept_autosuggestion(bool full) } data->command_line.position = data->command_line.size(); data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); } } @@ -1586,8 +1602,9 @@ static void select_completion_in_direction(enum selection_direction_t dir, const static void reader_flash() { struct timespec pollint; - - for (size_t i=0; ibuff_pos(); i++) + + editable_line_t *el = &data->command_line; + for (size_t i=0; iposition; i++) { data->colors.at(i) = highlight_spec_search_match<<16; } @@ -1598,7 +1615,7 @@ static void reader_flash() pollint.tv_nsec = 100 * 1000000; nanosleep(&pollint, NULL); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); } @@ -1720,10 +1737,11 @@ static bool handle_completions(const std::vector &comp) { bool done = false; bool success = false; - const wchar_t *begin, *end, *buff = data->command_text().c_str(); + const editable_line_t *el = &data->command_line; + const wchar_t *begin, *end, *buff = el->text.c_str(); - parse_util_token_extent(buff, data->buff_pos(), &begin, 0, 0, 0); - end = buff+data->buff_pos(); + parse_util_token_extent(buff, el->position, &begin, 0, 0, 0); + end = buff+el->position; const wcstring tok(begin, end - begin); @@ -1857,10 +1875,10 @@ static bool handle_completions(const std::vector &comp) /* We didn't get a common prefix. Print the list. */ size_t len, prefix_start = 0; wcstring prefix; - parse_util_get_parameter_info(data->command_text(), data->buff_pos(), NULL, &prefix_start, NULL); + parse_util_get_parameter_info(el->text, el->position, NULL, &prefix_start, NULL); - assert(data->buff_pos() >= prefix_start); - len = data->buff_pos() - prefix_start; + assert(el->position >= prefix_start); + len = el->position - prefix_start; if (match_type_requires_full_replacement(best_match_type)) { @@ -1869,17 +1887,17 @@ static bool handle_completions(const std::vector &comp) } else if (len <= PREFIX_MAX_LEN) { - prefix.append(data->command_text(), prefix_start, len); + prefix.append(el->text, prefix_start, len); } else { // append just the end of the string prefix = wcstring(&ellipsis_char, 1); - prefix.append(data->command_text(), prefix_start + len - PREFIX_MAX_LEN, PREFIX_MAX_LEN); + prefix.append(el->text, prefix_start + len - PREFIX_MAX_LEN, PREFIX_MAX_LEN); } wchar_t quote; - parse_util_get_parameter_info(data->command_text(), data->buff_pos(), "e, NULL, NULL); + parse_util_get_parameter_info(el->text, el->position, "e, NULL, NULL); bool is_quoted = (quote != L'\0'); if (pager_use_inline()) @@ -2113,7 +2131,7 @@ void reader_sanity_check() /* Note: 'data' is non-null if we are interactive, except in the testing environment */ if (get_is_interactive() && data != NULL) { - if (!(data->buff_pos() <= data->command_length())) + if (data->command_line.position > data->command_line.size()) sanity_lose(); if (data->colors.size() != data->command_length()) @@ -2128,12 +2146,12 @@ void reader_sanity_check() /** Set the specified string as the current buffer. */ -static void set_command_line_and_position(const wcstring &new_str, size_t pos) +static void set_command_line_and_position(editable_line_t *el, const wcstring &new_str, size_t pos) { - data->command_line.text = new_str; - data->command_line.position = pos; + el->text = new_str; + el->position = pos; data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); } @@ -2144,8 +2162,9 @@ static void reader_replace_current_token(const wchar_t *new_token) size_t new_pos; /* Find current token */ - const wchar_t *buff = data->command_text().c_str(); - parse_util_token_extent(buff, data->buff_pos(), &begin, &end, 0, 0); + editable_line_t *el = data->active_edit_line(); + const wchar_t *buff = el->text.c_str(); + parse_util_token_extent(buff, el->position, &begin, &end, 0, 0); if (!begin || !end) return; @@ -2156,7 +2175,7 @@ static void reader_replace_current_token(const wchar_t *new_token) new_buff.append(end); new_pos = (begin-buff) + wcslen(new_token); - set_command_line_and_position(new_buff, new_pos); + set_command_line_and_position(el, new_buff, new_pos); } @@ -2165,9 +2184,10 @@ static void reader_replace_current_token(const wchar_t *new_token) */ static void reset_token_history() { + const editable_line_t *el = data->active_edit_line(); const wchar_t *begin, *end; - const wchar_t *buff = data->command_text().c_str(); - parse_util_token_extent((wchar_t *)buff, data->buff_pos(), &begin, &end, 0, 0); + const wchar_t *buff = el->text.c_str(); + parse_util_token_extent((wchar_t *)buff, el->position, &begin, &end, 0, 0); data->search_buff.clear(); if (begin) @@ -2228,7 +2248,7 @@ static void handle_token_history(int forward, int reset) } reader_replace_current_token(str); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); } else @@ -2309,7 +2329,7 @@ static void handle_token_history(int forward, int reset) if (str) { reader_replace_current_token(str); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint(); data->search_pos = data->search_prev.size(); data->search_prev.push_back(str); @@ -2337,19 +2357,19 @@ enum move_word_dir_t MOVE_DIR_RIGHT }; -static void move_word(bool move_right, bool erase, enum move_word_style_t style, bool newv) +static void move_word(editable_line_t *el, bool move_right, bool erase, enum move_word_style_t style, bool newv) { /* Return if we are already at the edge */ const size_t boundary = move_right ? data->command_length() : 0; - if (data->buff_pos() == boundary) + if (el->position == boundary) return; /* When moving left, a value of 1 means the character at index 0. */ move_word_state_machine_t state(style); - const wchar_t * const command_line = data->command_text().c_str(); - const size_t start_buff_pos = data->buff_pos(); + const wchar_t * const command_line = el->text.c_str(); + const size_t start_buff_pos = el->position; - size_t buff_pos = data->buff_pos(); + size_t buff_pos = el->position; while (buff_pos != boundary) { size_t idx = (move_right ? buff_pos : buff_pos - 1); @@ -2389,7 +2409,7 @@ static void move_word(bool move_right, bool erase, enum move_word_style_t style, const wchar_t *reader_get_buffer(void) { ASSERT_IS_MAIN_THREAD(); - return data ? data->command_text().c_str():NULL; + return data ? data->command_line.text.c_str() : NULL; } history_t *reader_get_history(void) @@ -2417,7 +2437,7 @@ static void reader_set_buffer_maintaining_pager(const wcstring &b, size_t pos) data->search_buff.clear(); data->history_search.go_to_end(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint_needed(); } @@ -2437,7 +2457,7 @@ size_t reader_get_cursor_pos() if (!data) return (size_t)(-1); - return data->buff_pos(); + return data->command_line.position; } #define ENV_CMD_DURATION L"CMD_DURATION" @@ -2720,8 +2740,9 @@ static void highlight_search(void) { if (! data->search_buff.empty() && ! data->history_search.is_at_end()) { + const editable_line_t *el = &data->command_line; const wcstring &needle = data->search_buff; - size_t match_pos = data->command_text().find(needle); + size_t match_pos = el->text.find(needle); if (match_pos != wcstring::npos) { size_t end = match_pos + needle.size(); @@ -2765,19 +2786,23 @@ static int threaded_highlight(background_highlight_context_t *ctx) to avoid repaint issues on terminals where e.g. syntax highlighting maykes characters under the sursor unreadable. - \param match_highlight_pos the position to use for bracket matching. This need not be the same as the surrent cursor position + \param match_highlight_pos_adjust the adjustment to the position to use for bracket matching. This is added to the current cursor position and may be negative. \param error if non-null, any possible errors in the buffer are further descibed by the strings inserted into the specified arraylist */ -static void reader_super_highlight_me_plenty(size_t match_highlight_pos) +static void reader_super_highlight_me_plenty(int match_highlight_pos_adjust) { + const editable_line_t *el = &data->command_line; + long match_highlight_pos = (long)el->position + match_highlight_pos_adjust; + assert(match_highlight_pos >= 0); + reader_sanity_check(); - background_highlight_context_t *ctx = new background_highlight_context_t(data->command_text(), match_highlight_pos, data->highlight_function); + background_highlight_context_t *ctx = new background_highlight_context_t(el->text, match_highlight_pos, data->highlight_function); iothread_perform(threaded_highlight, highlight_complete, ctx); highlight_search(); /* Here's a hack. Check to see if our autosuggestion still applies; if so, don't recompute it. Since the autosuggestion computation is asynchronous, this avoids "flashing" as you type into the autosuggestion. */ - const wcstring &cmd = data->command_text(), &suggest = data->autosuggestion; + const wcstring &cmd = el->text, &suggest = data->autosuggestion; if (can_autosuggest() && ! suggest.empty() && string_prefixes_string_case_insensitive(cmd, suggest)) { /* The autosuggestion is still reasonable, so do nothing */ @@ -3014,7 +3039,7 @@ const wchar_t *reader_readline(void) exec_prompt(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); s_reset(&data->screen, screen_reset_abandon_line); reader_repaint(); @@ -3110,17 +3135,16 @@ const wchar_t *reader_readline(void) //fprintf(stderr, "\n\nchar: %ls\n\n", describe_char(c).c_str()); - const wchar_t * const buff = data->command_text().c_str(); switch (c) { /* go to beginning of line*/ case R_BEGINNING_OF_LINE: { - while ((data->buff_pos()>0) && - (buff[data->buff_pos()-1] != L'\n')) + editable_line_t *el = data->active_edit_line(); + while (el->position > 0 && el->text.at(el->position - 1) != L'\n') { - data->command_line.position--; + el->position--; } reader_repaint_needed(); @@ -3129,12 +3153,14 @@ const wchar_t *reader_readline(void) case R_END_OF_LINE: { - if (data->buff_pos() < data->command_length()) + editable_line_t *el = data->active_edit_line(); + if (el->position < el->size()) { - while (buff[data->buff_pos()] && - buff[data->buff_pos()] != L'\n') + const wchar_t *buff = el->text.c_str(); + while (buff[el->position] && + buff[el->position] != L'\n') { - data->command_line.position++; + el->position++; } } else @@ -3195,7 +3221,9 @@ const wchar_t *reader_readline(void) if (!data->complete_func) break; - + + /* Use the command line only; it doesn't make sense to complete in any other line */ + editable_line_t *el = &data->command_line; if (is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) { /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ @@ -3206,24 +3234,24 @@ const wchar_t *reader_readline(void) /* Either the user hit tab only once, or we had no visible completion list. */ /* Remove a trailing backslash. This may trigger an extra repaint, but this is rare. */ - if (is_backslashed(data->command_text(), data->buff_pos())) + if (is_backslashed(el->text, el->position)) { remove_backward(); } /* Get the string; we have to do this after removing any trailing backslash */ - const wchar_t * const buff = data->command_text().c_str(); + const wchar_t * const buff = el->text.c_str(); /* Clear the completion list */ comp.clear(); /* Figure out the extent of the command substitution surrounding the cursor. This is because we only look at the current command substitution to form completions - stuff happening outside of it is not interesting. */ const wchar_t *cmdsub_begin, *cmdsub_end; - parse_util_cmdsubst_extent(buff, data->buff_pos(), &cmdsub_begin, &cmdsub_end); + parse_util_cmdsubst_extent(buff, el->position, &cmdsub_begin, &cmdsub_end); /* Figure out the extent of the token within the command substitution. Note we pass cmdsub_begin here, not buff */ const wchar_t *token_begin, *token_end; - parse_util_token_extent(cmdsub_begin, data->buff_pos() - (cmdsub_begin-buff), &token_begin, &token_end, 0, 0); + parse_util_token_extent(cmdsub_begin, el->position - (cmdsub_begin-buff), &token_begin, &token_end, 0, 0); /* Hack: the token may extend past the end of the command substitution, e.g. in (echo foo) the last token is 'foo)'. Don't let that happen. */ if (token_end > cmdsub_end) token_end = cmdsub_end; @@ -3232,9 +3260,9 @@ const wchar_t *reader_readline(void) size_t end_of_token_offset = token_end - buff; /* Move the cursor to the end */ - if (data->buff_pos() != end_of_token_offset) + if (el->position != end_of_token_offset) { - data->command_line.position = end_of_token_offset; + el->position = end_of_token_offset; reader_repaint(); } @@ -3249,8 +3277,8 @@ const wchar_t *reader_readline(void) prioritize_completions(comp); /* Record our cycle_command_line */ - cycle_command_line = data->command_text(); - cycle_cursor_pos = data->buff_pos(); + cycle_command_line = el->text; + cycle_cursor_pos = el->position; comp_empty = handle_completions(comp); @@ -3264,8 +3292,9 @@ const wchar_t *reader_readline(void) /* kill */ case R_KILL_LINE: { - const wchar_t *buff = data->command_text().c_str(); - const wchar_t *begin = &buff[data->buff_pos()]; + const editable_line_t *el = data->active_edit_line(); + const wchar_t *buff = el->text.c_str(); + const wchar_t *begin = &buff[el->position]; const wchar_t *end = begin; while (*end && *end != L'\n') @@ -3285,10 +3314,11 @@ const wchar_t *reader_readline(void) case R_BACKWARD_KILL_LINE: { - if (data->buff_pos() > 0) + const editable_line_t *el = data->active_edit_line(); + if (el->position > 0) { - const wchar_t *buff = data->command_text().c_str(); - const wchar_t *end = &buff[data->buff_pos()]; + const wchar_t *buff = el->text.c_str(); + const wchar_t *end = &buff[el->position]; const wchar_t *begin = end; /* Make sure we delete at least one character (see #580) */ @@ -3314,8 +3344,9 @@ const wchar_t *reader_readline(void) case R_KILL_WHOLE_LINE: { - const wchar_t *buff = data->command_text().c_str(); - const wchar_t *end = &buff[data->buff_pos()]; + const editable_line_t *el = data->active_edit_line(); + const wchar_t *buff = el->text.c_str(); + const wchar_t *end = &buff[el->position]; const wchar_t *begin = end; size_t len; @@ -3386,7 +3417,7 @@ const wchar_t *reader_readline(void) reader_replace_current_token(data->search_buff.c_str()); } data->search_buff.clear(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint_needed(); } @@ -3407,9 +3438,10 @@ const wchar_t *reader_readline(void) Remove the current character in the character buffer and on the screen using syntax highlighting, etc. */ - if (data->buff_pos() < data->command_length()) + editable_line_t *el = data->active_edit_line(); + if (el->position < el->size()) { - data->command_line.position++; + el->position++; remove_backward(); } break; @@ -3424,11 +3456,14 @@ const wchar_t *reader_readline(void) { /* Delete any autosuggestion */ data->autosuggestion.clear(); + + /* We only execute the command line */ + const editable_line_t *el = &data->command_line; /* Allow backslash-escaped newlines, but only if the following character is whitespace, or we're at the end of the text (see issue #163) */ - if (is_backslashed(data->command_text(), data->buff_pos())) + if (is_backslashed(el->text, el->position)) { - if (data->buff_pos() >= data->command_length() || iswspace(data->command_text().at(data->buff_pos()))) + if (el->position >= el->size() || iswspace(el->text.at(el->position))) { insert_char('\n'); break; @@ -3436,7 +3471,7 @@ const wchar_t *reader_readline(void) } /* See if this command is valid */ - int command_test_result = data->test_func(data->command_text().c_str()); + int command_test_result = data->test_func(el->text.c_str()); if (command_test_result == 0 || command_test_result == PARSER_TEST_INCOMPLETE) { /* This command is valid, but an abbreviation may make it invalid. If so, we will have to test again. */ @@ -3444,8 +3479,8 @@ const wchar_t *reader_readline(void) if (abbreviation_expanded) { /* It's our reponsibility to rehighlight and repaint. But everything we do below triggers a repaint. */ - reader_super_highlight_me_plenty(data->buff_pos()); - command_test_result = data->test_func(data->command_text().c_str()); + reader_super_highlight_me_plenty(); + command_test_result = data->test_func(el->text.c_str()); } } @@ -3455,9 +3490,10 @@ const wchar_t *reader_readline(void) case 0: { /* Finished command, execute it. Don't add items that start with a leading space. */ - if (data->history != NULL && ! data->command_line.empty() && data->command_text().at(0) != L' ') + const editable_line_t *el = &data->command_line; + if (data->history != NULL && ! el->empty() && el->text.at(0) != L' ') { - data->history->add_with_file_detection(data->command_text()); + data->history->add_with_file_detection(el->text); } finished=1; data->command_line.position = data->command_length(); @@ -3498,7 +3534,6 @@ const wchar_t *reader_readline(void) case R_HISTORY_TOKEN_SEARCH_FORWARD: { int reset = 0; - if (data->search_mode == NO_SEARCH) { reset = 1; @@ -3512,7 +3547,8 @@ const wchar_t *reader_readline(void) data->search_mode = TOKEN_SEARCH; } - data->search_buff.append(data->command_text()); + const editable_line_t *el = &data->command_line; + data->search_buff.append(el->text); data->history_search = history_search_t(*data->history, data->search_buff, HISTORY_SEARCH_TYPE_CONTAINS); /* Skip the autosuggestion as history unless it was truncated */ @@ -3551,7 +3587,7 @@ const wchar_t *reader_readline(void) { new_text = data->history_search.current_string(); } - set_command_line_and_position(new_text, new_text.size()); + set_command_line_and_position(&data->command_line, new_text, new_text.size()); break; } @@ -3616,30 +3652,31 @@ const wchar_t *reader_readline(void) { move_word_style_t style = (c == R_BACKWARD_KILL_PATH_COMPONENT ? move_word_style_path_components : move_word_style_punctuation); bool newv = (last_char != R_BACKWARD_KILL_WORD && last_char != R_BACKWARD_KILL_PATH_COMPONENT); - move_word(MOVE_DIR_LEFT, true /* erase */, style, newv); + move_word(data->active_edit_line(), MOVE_DIR_LEFT, true /* erase */, style, newv); break; } /* kill one word right */ case R_KILL_WORD: { - move_word(MOVE_DIR_RIGHT, true /* erase */, move_word_style_punctuation, last_char!=R_KILL_WORD); + move_word(data->active_edit_line(), MOVE_DIR_RIGHT, true /* erase */, move_word_style_punctuation, last_char!=R_KILL_WORD); break; } /* move one word left*/ case R_BACKWARD_WORD: { - move_word(MOVE_DIR_LEFT, false /* do not erase */, move_word_style_punctuation, false); + move_word(data->active_edit_line(), MOVE_DIR_LEFT, false /* do not erase */, move_word_style_punctuation, false); break; } /* move one word right*/ case R_FORWARD_WORD: { - if (data->buff_pos() < data->command_length()) + editable_line_t *el = data->active_edit_line(); + if (el->position < el->size()) { - move_word(MOVE_DIR_RIGHT, false /* do not erase */, move_word_style_punctuation, false); + move_word(el, MOVE_DIR_RIGHT, false /* do not erase */, move_word_style_punctuation, false); } else { @@ -3650,12 +3687,13 @@ const wchar_t *reader_readline(void) case R_BEGINNING_OF_HISTORY: { - data->history_search = history_search_t(*data->history, data->command_text(), HISTORY_SEARCH_TYPE_PREFIX); + const editable_line_t *el = &data->command_line; + data->history_search = history_search_t(*data->history, el->text, HISTORY_SEARCH_TYPE_PREFIX); data->history_search.go_to_beginning(); if (! data->history_search.is_at_end()) { wcstring new_text = data->history_search.current_string(); - set_command_line_and_position(new_text, new_text.size()); + set_command_line_and_position(&data->command_line, new_text, new_text.size()); } break; @@ -3701,7 +3739,8 @@ const wchar_t *reader_readline(void) else { /* Not navigating the pager contents */ - int line_old = parse_util_get_line_from_offset(data->command_text(), data->buff_pos()); + editable_line_t *el = data->active_edit_line(); + int line_old = parse_util_get_line_from_offset(el->text, el->position); int line_new; if (c == R_UP_LINE) @@ -3709,7 +3748,7 @@ const wchar_t *reader_readline(void) else line_new = line_old+1; - int line_count = parse_util_lineno(data->command_text().c_str(), data->command_length())-1; + int line_count = parse_util_lineno(el->text.c_str(), el->size())-1; if (line_new >= 0 && line_new <= line_count) { @@ -3721,17 +3760,17 @@ const wchar_t *reader_readline(void) size_t line_offset_old; size_t total_offset_new; - base_pos_new = parse_util_get_offset_from_line(data->command_text(), line_new); + base_pos_new = parse_util_get_offset_from_line(el->text, line_new); - base_pos_old = parse_util_get_offset_from_line(data->command_text(), line_old); + base_pos_old = parse_util_get_offset_from_line(el->text, line_old); assert(base_pos_new != (size_t)(-1) && base_pos_old != (size_t)(-1)); indent_old = data->indents.at(base_pos_old); indent_new = data->indents.at(base_pos_new); - line_offset_old = data->buff_pos() - parse_util_get_offset_from_line(data->command_text(), line_old); - total_offset_new = parse_util_get_offset(data->command_text(), line_new, line_offset_old - 4*(indent_new-indent_old)); - data->command_line.position = total_offset_new; + line_offset_old = el->position - parse_util_get_offset_from_line(el->text, line_old); + total_offset_new = parse_util_get_offset(el->text, line_new, line_offset_old - 4*(indent_new-indent_old)); + el->position = total_offset_new; reader_repaint_needed(); } } @@ -3755,41 +3794,43 @@ const wchar_t *reader_readline(void) case R_TRANSPOSE_CHARS: { - if (data->command_length() < 2) + editable_line_t *el = data->active_edit_line(); + if (el->size() < 2) { break; } /* If the cursor is at the end, transpose the last two characters of the line */ - if (data->command_line.position == data->command_length()) + if (el->position == el->size()) { - data->command_line.position--; + el->position--; } /* Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. */ - if (data->command_line.position > 0) + if (el->position > 0) { - wcstring local_cmd = data->command_text(); - std::swap(local_cmd.at(data->buff_pos()), local_cmd.at(data->buff_pos()-1)); - set_command_line_and_position(local_cmd, data->buff_pos() + 1); + wcstring local_cmd = el->text; + std::swap(local_cmd.at(el->position), local_cmd.at(el->position-1)); + set_command_line_and_position(el, local_cmd, el->position + 1); } break; } case R_TRANSPOSE_WORDS: { - size_t len = data->command_length(); - const wchar_t *buff = data->command_text().c_str(); + editable_line_t *el = data->active_edit_line(); + size_t len = el->size(); + const wchar_t *buff = el->text.c_str(); const wchar_t *tok_begin, *tok_end, *prev_begin, *prev_end; /* If we are not in a token, look for one ahead */ - while (data->buff_pos() != len && !iswalnum(buff[data->buff_pos()])) - data->command_line.position++; + while (el->position != len && !iswalnum(buff[el->position])) + el->position++; - parse_util_token_extent(buff, data->buff_pos(), &tok_begin, &tok_end, &prev_begin, &prev_end); + parse_util_token_extent(buff, el->position, &tok_begin, &tok_end, &prev_begin, &prev_end); /* In case we didn't find a token at or after the cursor... */ if (tok_begin == &buff[len]) @@ -3814,7 +3855,7 @@ const wchar_t *reader_readline(void) new_buff.append(prev); new_buff.append(trail); /* Put cursor right after the second token */ - set_command_line_and_position(new_buff, tok_end - buff); + set_command_line_and_position(el, new_buff, tok_end - buff); } break; } @@ -3823,15 +3864,16 @@ const wchar_t *reader_readline(void) case R_DOWNCASE_WORD: case R_CAPITALIZE_WORD: { + editable_line_t *el = data->active_edit_line(); // 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++) + size_t pos = el->position; + move_word(el, MOVE_DIR_RIGHT, false, move_word_style_punctuation, false); + for (; pos < el->position; pos++) { - wchar_t chr = data->command_text().at(pos); + wchar_t chr = el->text.at(pos); // We always change the case; this decides whether we go uppercase (true) or lowercase (false) bool make_uppercase; @@ -3850,7 +3892,7 @@ const wchar_t *reader_readline(void) capitalized_first = capitalized_first || make_uppercase; } data->command_line_changed(); - reader_super_highlight_me_plenty(data->buff_pos()); + reader_super_highlight_me_plenty(); reader_repaint_needed(); break; } @@ -3925,7 +3967,7 @@ const wchar_t *reader_readline(void) set_color(rgb_color_t::reset(), rgb_color_t::reset()); } - return finished ? data->command_text().c_str() : NULL; + return finished ? data->command_line.text.c_str() : NULL; } int reader_search_mode() diff --git a/reader.h b/reader.h index cf8d5043e..025358c06 100644 --- a/reader.h +++ b/reader.h @@ -53,9 +53,8 @@ class editable_line_t { } - /* Internal */ - void kill(size_t begin_idx, size_t length, int mode, int newv); - + /* Inserts the string at the cursor position */ + void insert_string(const wcstring &str); }; /** From ce4c145f1c6ca1e6e2171d5e6f0a9b423f6fb9a6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 26 Jan 2014 14:55:41 -0800 Subject: [PATCH 033/145] Eliminate dangerous command_length() function. Use editable_line_t in a few places we missed. --- reader.cpp | 61 ++++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/reader.cpp b/reader.cpp index d73fa5af2..4eb3b0ee7 100644 --- a/reader.cpp +++ b/reader.cpp @@ -253,12 +253,6 @@ public: /** The current position in search_prev */ size_t search_pos; - - /** Length of the command */ - size_t command_length() const - { - return command_line.size(); - } /* The line that is currently being edited. Typically the command line, but may be the search field */ editable_line_t *active_edit_line() @@ -563,7 +557,7 @@ static void reader_repaint() data->left_prompt_buff, data->right_prompt_buff, full_line, - data->command_length(), + el->size(), &colors[0], &indents[0], el->position, @@ -582,9 +576,8 @@ static void reader_repaint_without_autosuggestion() } /** Internal helper function for handling killing parts of text. */ -static void reader_kill(size_t begin_idx, size_t length, int mode, int newv) +static void reader_kill(editable_line_t *el, size_t begin_idx, size_t length, int mode, int newv) { - editable_line_t *el = data->active_edit_line(); const wchar_t *begin = el->text.c_str() + begin_idx; if (newv) { @@ -660,7 +653,7 @@ void reader_pop_current_filename() void reader_data_t::command_line_changed() { ASSERT_IS_MAIN_THREAD(); - size_t len = command_length(); + size_t len = this->command_line.size(); /* When we grow colors, propagate the last color (if any), under the assumption that usually it will be correct. If it is, it avoids a repaint. */ highlight_spec_t last_color = colors.empty() ? highlight_spec_t() : colors.back(); @@ -2134,10 +2127,10 @@ void reader_sanity_check() if (data->command_line.position > data->command_line.size()) sanity_lose(); - if (data->colors.size() != data->command_length()) + if (data->colors.size() != data->command_line.size()) sanity_lose(); - if (data->indents.size() != data->command_length()) + if (data->indents.size() != data->command_line.size()) sanity_lose(); } @@ -2360,7 +2353,7 @@ enum move_word_dir_t static void move_word(editable_line_t *el, bool move_right, bool erase, enum move_word_style_t style, bool newv) { /* Return if we are already at the edge */ - const size_t boundary = move_right ? data->command_length() : 0; + const size_t boundary = move_right ? el->size() : 0; if (el->position == boundary) return; @@ -2383,24 +2376,27 @@ static void move_word(editable_line_t *el, bool move_right, bool erase, enum mov if (buff_pos == start_buff_pos) buff_pos = (move_right ? buff_pos + 1 : buff_pos - 1); - /* If we are moving left, buff_pos-1 is the index of the first character we do not delete (possibly -1). If we are moving right, then buff_pos is that index - possibly data->command_length(). */ + /* If we are moving left, buff_pos-1 is the index of the first character we do not delete (possibly -1). If we are moving right, then buff_pos is that index - possibly el->size(). */ if (erase) { /* Don't autosuggest after a kill */ - data->suppress_autosuggestion = true; + if (el == &data->command_line) + { + data->suppress_autosuggestion = true; + } if (move_right) { - reader_kill(start_buff_pos, buff_pos - start_buff_pos, KILL_APPEND, newv); + reader_kill(el, start_buff_pos, buff_pos - start_buff_pos, KILL_APPEND, newv); } else { - reader_kill(buff_pos, start_buff_pos - buff_pos, KILL_PREPEND, newv); + reader_kill(el, buff_pos, start_buff_pos - buff_pos, KILL_PREPEND, newv); } } else { - data->command_line.position = buff_pos; + el->position = buff_pos; reader_repaint(); } @@ -2760,7 +2756,7 @@ static void highlight_complete(background_highlight_context_t *ctx, int result) if (ctx->string_to_highlight == data->command_line.text) { /* The data hasn't changed, so swap in our colors. The colors may not have changed, so do nothing if they have not. */ - assert(ctx->colors.size() == data->command_length()); + assert(ctx->colors.size() == data->command_line.size()); if (data->colors != ctx->colors) { data->colors.swap(ctx->colors); @@ -3184,7 +3180,7 @@ const wchar_t *reader_readline(void) /* go to EOL*/ case R_END_OF_BUFFER: { - data->command_line.position = data->command_length(); + data->command_line.position = data->command_line.size(); reader_repaint_needed(); break; @@ -3292,7 +3288,7 @@ const wchar_t *reader_readline(void) /* kill */ case R_KILL_LINE: { - const editable_line_t *el = data->active_edit_line(); + editable_line_t *el = data->active_edit_line(); const wchar_t *buff = el->text.c_str(); const wchar_t *begin = &buff[el->position]; const wchar_t *end = begin; @@ -3306,7 +3302,7 @@ const wchar_t *reader_readline(void) size_t len = end-begin; if (len) { - reader_kill(begin - buff, len, KILL_APPEND, last_char!=R_KILL_LINE); + reader_kill(el, begin - buff, len, KILL_APPEND, last_char!=R_KILL_LINE); } break; @@ -3314,7 +3310,7 @@ const wchar_t *reader_readline(void) case R_BACKWARD_KILL_LINE: { - const editable_line_t *el = data->active_edit_line(); + editable_line_t *el = data->active_edit_line(); if (el->position > 0) { const wchar_t *buff = el->text.c_str(); @@ -3336,7 +3332,7 @@ const wchar_t *reader_readline(void) size_t len = maxi(end-begin, 1); begin = end - len; - reader_kill(begin - buff, len, KILL_PREPEND, last_char!=R_BACKWARD_KILL_LINE); + reader_kill(el, begin - buff, len, KILL_PREPEND, last_char!=R_BACKWARD_KILL_LINE); } break; @@ -3344,7 +3340,7 @@ const wchar_t *reader_readline(void) case R_KILL_WHOLE_LINE: { - const editable_line_t *el = data->active_edit_line(); + editable_line_t *el = data->active_edit_line(); const wchar_t *buff = el->text.c_str(); const wchar_t *end = &buff[el->position]; const wchar_t *begin = end; @@ -3369,7 +3365,7 @@ const wchar_t *reader_readline(void) if (len) { - reader_kill(begin - buff, len, KILL_APPEND, last_char!=R_KILL_WHOLE_LINE); + reader_kill(el, begin - buff, len, KILL_APPEND, last_char!=R_KILL_WHOLE_LINE); } break; @@ -3496,7 +3492,7 @@ const wchar_t *reader_readline(void) data->history->add_with_file_detection(el->text); } finished=1; - data->command_line.position = data->command_length(); + data->command_line.position = data->command_line.size(); reader_repaint_needed(); break; } @@ -3561,7 +3557,6 @@ const wchar_t *reader_readline(void) switch (data->search_mode) { - case LINE_SEARCH: { if ((c == R_HISTORY_SEARCH_BACKWARD) || @@ -3615,13 +3610,14 @@ const wchar_t *reader_readline(void) /* Move left*/ case R_BACKWARD_CHAR: { + editable_line_t *el = data->active_edit_line(); if (is_navigating_pager_contents()) { select_completion_in_direction(direction_west, cycle_command_line, cycle_cursor_pos); } - else if (data->command_line.position > 0) + else if (el->position > 0) { - data->command_line.position--; + el->position--; reader_repaint_needed(); } break; @@ -3630,13 +3626,14 @@ const wchar_t *reader_readline(void) /* Move right*/ case R_FORWARD_CHAR: { + editable_line_t *el = data->active_edit_line(); if (is_navigating_pager_contents()) { select_completion_in_direction(direction_east, cycle_command_line, cycle_cursor_pos); } - else if (data->command_line.position < data->command_length()) + else if (el->position < el->size()) { - data->command_line.position++; + el->position++; reader_repaint_needed(); } else From 5be3606236bd2185d93162fcad097d8c30f84885 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 27 Jan 2014 00:56:13 -0800 Subject: [PATCH 034/145] Increased support for completion search field. Use btab (shift-tab) to complete-and-search. --- builtin.cpp | 37 +-- input.cpp | 2 + input.h | 1 + input_common.cpp | 1 - pager.cpp | 200 +++++++++--- pager.h | 32 +- reader.cpp | 284 ++++++++++++------ reader.h | 9 + screen.cpp | 17 +- screen.h | 5 +- .../functions/fish_default_key_bindings.fish | 4 + 11 files changed, 425 insertions(+), 167 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index 17b0caaa8..81738ffb3 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -571,35 +571,14 @@ static int builtin_bind(parser_t &parser, wchar_t **argv) static const struct woption long_options[] = { - { - L"all", no_argument, 0, 'a' - } - , - { - L"erase", no_argument, 0, 'e' - } - , - { - L"function-names", no_argument, 0, 'f' - } - , - { - L"help", no_argument, 0, 'h' - } - , - { - L"key", no_argument, 0, 'k' - } - , - { - L"key-names", no_argument, 0, 'K' - } - , - { - 0, 0, 0, 0 - } - } - ; + { L"all", no_argument, 0, 'a' }, + { L"erase", no_argument, 0, 'e' }, + { L"function-names", no_argument, 0, 'f' }, + { L"help", no_argument, 0, 'h' }, + { L"key", no_argument, 0, 'k' }, + { L"key-names", no_argument, 0, 'K' }, + { 0, 0, 0, 0 } + }; while (1) { diff --git a/input.cpp b/input.cpp index 8327de38d..ccdbc2406 100644 --- a/input.cpp +++ b/input.cpp @@ -104,6 +104,7 @@ static const wchar_t * const name_arr[] = L"yank", L"yank-pop", L"complete", + L"complete-and-search", L"beginning-of-history", L"end-of-history", L"backward-kill-line", @@ -201,6 +202,7 @@ static const wchar_t code_arr[] = R_YANK, R_YANK_POP, R_COMPLETE, + R_COMPLETE_AND_SEARCH, R_BEGINNING_OF_HISTORY, R_END_OF_HISTORY, R_BACKWARD_KILL_LINE, diff --git a/input.h b/input.h index 3818859ba..2d71a5ae0 100644 --- a/input.h +++ b/input.h @@ -33,6 +33,7 @@ enum R_YANK, R_YANK_POP, R_COMPLETE, + R_COMPLETE_AND_SEARCH, R_BEGINNING_OF_HISTORY, R_END_OF_HISTORY, R_BACKWARD_KILL_LINE, diff --git a/input_common.cpp b/input_common.cpp index 77c8f168a..d26f30b97 100644 --- a/input_common.cpp +++ b/input_common.cpp @@ -251,7 +251,6 @@ wchar_t input_common_readch(int timed) case 0: return 0; default: - return res; } } diff --git a/pager.cpp b/pager.cpp index e05ac3809..49fc6a8e4 100644 --- a/pager.cpp +++ b/pager.cpp @@ -3,6 +3,7 @@ #include "pager.h" #include "highlight.h" #include "input_common.h" +#include "wutil.h" #include #include @@ -18,9 +19,19 @@ typedef std::vector comp_info_list_t; /** The maximum number of columns of completion to attempt to fit onto the screen */ #define PAGER_MAX_COLS 6 -/* Returns numer / denom, rounding up */ +/** Width of the search field */ +#define PAGER_SEARCH_FIELD_WIDTH 12 + +/** Text we use for the search field */ +#define SEARCH_FIELD_PROMPT _(L"search: ") + +/* Returns numer / denom, rounding up. As a "courtesy" 0/0 is 0. */ static size_t divide_round_up(size_t numer, size_t denom) { + if (numer == 0) + return 0; + + assert(denom > 0); return numer / denom + (numer % denom ? 1 : 0); } @@ -336,17 +347,66 @@ void pager_t::measure_completion_infos(comp_info_list_t *infos, const wcstring & recalc_min_widths(infos); } +/* Indicates if the given completion info passes any filtering we have */ +bool pager_t::completion_info_passes_filter(const comp_t &info) const +{ + /* If we have no filter, everything passes */ + if (! search_field_shown || this->search_field_line.empty()) + return true; + + const wcstring &needle = this->search_field_line.text; + + /* We do substring matching */ + const fuzzy_match_type_t limit = fuzzy_match_substring; + + /* Match against the description */ + if (string_fuzzy_match_string(needle, info.desc, limit).type != fuzzy_match_none) + { + return true; + } + + /* Match against the completion strings */ + for (size_t i=0; i < info.comp.size(); i++) + { + if (string_fuzzy_match_string(needle, info.comp.at(i), limit).type != fuzzy_match_none) + { + return true; + } + } + + /* No match */ + return false; +} + +/* Update completion_infos from unfiltered_completion_infos, to reflect the filter */ +void pager_t::refilter_completions() +{ + this->completion_infos.clear(); + for (size_t i=0; i < this->unfiltered_completion_infos.size(); i++) + { + const comp_t &info = this->unfiltered_completion_infos.at(i); + if (this->completion_info_passes_filter(info)) + { + this->completion_infos.push_back(info); + } + } + note_selection_changed(); +} + void pager_t::set_completions(const completion_list_t &raw_completions) { // Get completion infos out of it - completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); + unfiltered_completion_infos = process_completions_into_infos(raw_completions, prefix.c_str()); // Maybe join them if (prefix == L"-") - join_completions(&completion_infos); + join_completions(&unfiltered_completion_infos); // Compute their various widths - measure_completion_infos(&completion_infos, prefix); + measure_completion_infos(&unfiltered_completion_infos, prefix); + + // Refilter them + this->refilter_completions(); } void pager_t::set_prefix(const wcstring &pref) @@ -390,7 +450,7 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co /* Compute the effective term width and term height, accounting for disclosure */ int term_width = this->available_term_width; - int term_height = this->available_term_height - 1; // we always subtract 1 to make room for a comment row + int term_height = this->available_term_height - 1 - (search_field_shown ? 1 : 0); // we always subtract 1 to make room for a comment row if (! this->fully_disclosed) term_height = mini(term_height, PAGER_UNDISCLOSED_MAX_ROWS); @@ -551,6 +611,11 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co /* We have a scrollable interface. The +1 here is because we are zero indexed, but want to present things as 1-indexed. We do not add 1 to stop_row or row_count because these are the "past the last value" */ progress_text = format_string(L"rows %lu to %lu of %lu", start_row + 1, stop_row, row_count); } + else if (completion_infos.empty() && ! unfiltered_completion_infos.empty()) + { + /* Everything is filtered */ + progress_text = L"(no matches)"; + } if (! progress_text.empty()) { @@ -561,11 +626,17 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co if (search_field_shown) { /* Add the search field */ - wcstring spaces(8, L' '); - spaces.insert(spaces.begin(), 1, L'h'); + wcstring search_field_text = search_field_line.text; + /* Append spaces to make it at least the required width */ + if (search_field_text.size() < PAGER_SEARCH_FIELD_WIDTH) + { + search_field_text.append(PAGER_SEARCH_FIELD_WIDTH - search_field_text.size(), L' '); + } line_t *search_field = &rendering->screen_data.insert_line_at_index(0); - int search_field_written = print_max(L"filter: ", highlight_spec_normal, term_width, false, search_field); - search_field_written += print_max(spaces, highlight_modifier_force_underline, term_width - search_field_written, false, search_field); + + /* We limit the width to term_width - 1 */ + int search_field_written = print_max(SEARCH_FIELD_PROMPT, highlight_spec_normal, term_width - 1, false, search_field); + search_field_written += print_max(search_field_text, highlight_modifier_force_underline, term_width - search_field_written - 1, false, search_field); } } @@ -585,33 +656,32 @@ page_rendering_t pager_t::render() const page_rendering_t rendering; rendering.term_width = this->available_term_width; rendering.term_height = this->available_term_height; + rendering.search_field_shown = this->search_field_shown; + rendering.search_field_line = this->search_field_line; - if (! this->empty()) + for (int cols = PAGER_MAX_COLS; cols > 0; cols--) { - for (int cols = PAGER_MAX_COLS; cols > 0; cols--) + /* Initially empty rendering */ + rendering.screen_data.resize(0); + + /* Determine how many rows we would need if we had 'cols' columns. Then determine how many columns we want from that. For example, say we had 19 completions. We can fit them into 6 columns, 4 rows, with the last row containing only 1 entry. Or we can fit them into 5 columns, 4 rows, the last row containing 4 entries. Since fewer columns with the same number of rows is better, skip cases where we know we can do better. */ + size_t min_rows_required_for_cols = divide_round_up(completion_infos.size(), cols); + size_t min_cols_required_for_rows = divide_round_up(completion_infos.size(), min_rows_required_for_cols); + + assert(min_cols_required_for_rows <= cols); + if (cols > 1 && min_cols_required_for_rows < cols) { - /* Initially empty rendering */ - rendering.screen_data.resize(0); - - /* Determine how many rows we would need if we had 'cols' columns. Then determine how many columns we want from that. For example, say we had 19 completions. We can fit them into 6 columns, 4 rows, with the last row containing only 1 entry. Or we can fit them into 5 columns, 4 rows, the last row containing 4 entries. Since fewer columns with the same number of rows is better, skip cases where we know we can do better. */ - size_t min_rows_required_for_cols = divide_round_up(completion_infos.size(), cols); - size_t min_cols_required_for_rows = divide_round_up(completion_infos.size(), min_rows_required_for_cols); - - assert(min_cols_required_for_rows <= cols); - if (min_cols_required_for_rows < cols) - { - /* Next iteration will be better, so skip this one */ - continue; - } - - rendering.cols = (size_t)cols; - rendering.rows = min_rows_required_for_cols; - rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); - - if (completion_try_print(cols, prefix, completion_infos, &rendering, suggested_row_start)) - { - break; - } + /* Next iteration will be better, so skip this one */ + continue; + } + + rendering.cols = (size_t)cols; + rendering.rows = min_rows_required_for_cols; + rendering.selected_completion_idx = this->visual_selected_completion_index(rendering.rows, rendering.cols); + + if (completion_try_print(cols, prefix, completion_infos, &rendering, suggested_row_start)) + { + break; } } return rendering; @@ -619,7 +689,12 @@ page_rendering_t pager_t::render() const void pager_t::update_rendering(page_rendering_t *rendering) const { - if (rendering->term_width != this->available_term_width || rendering->term_height != this->available_term_height || rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols)) + if (rendering->term_width != this->available_term_width || + rendering->term_height != this->available_term_height || + rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols) || + rendering->search_field_shown != this->search_field_shown || + rendering->search_field_line.text != this->search_field_line.text || + rendering->search_field_line.position != this->search_field_line.position) { *rendering = this->render(); } @@ -631,13 +706,13 @@ pager_t::pager_t() : available_term_width(0), available_term_height(0), selected bool pager_t::empty() const { - return completion_infos.empty(); + return unfiltered_completion_infos.empty(); } const completion_t *pager_t::select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering) { /* Must have something to select */ - if (this->empty()) + if (this->completion_infos.empty()) { return NULL; } @@ -834,6 +909,12 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc size_t pager_t::visual_selected_completion_index(size_t rows, size_t cols) const { + /* No completions -> no selection */ + if (completion_infos.empty()) + { + return PAGER_SELECTION_NONE; + } + size_t result = selected_completion_idx; if (result != PAGER_SELECTION_NONE) { @@ -842,11 +923,21 @@ size_t pager_t::visual_selected_completion_index(size_t rows, size_t cols) const { result -= rows; } + + /* If we are still beyond the last selection, clamp it */ + if (result >= completion_infos.size()) + result = completion_infos.size() - 1; } assert(result == PAGER_SELECTION_NONE || result < completion_infos.size()); return result; } +/* It's possible we have no visual selection but are still navigating the contents, e.g. every completion is filtered */ +bool pager_t::is_navigating_contents() const +{ + return selected_completion_idx != PAGER_SELECTION_NONE; +} + const completion_t *pager_t::selected_completion(const page_rendering_t &rendering) const { const completion_t * result = NULL; @@ -861,25 +952,58 @@ const completion_t *pager_t::selected_completion(const page_rendering_t &renderi /* Get the selected row and column. Completions are rendered column first, i.e. we go south before we go west. So if we have N rows, and our selected index is N + 2, then our row is 2 (mod by N) and our column is 1 (divide by N) */ size_t pager_t::get_selected_row(const page_rendering_t &rendering) const { + if (rendering.rows == 0) + return PAGER_SELECTION_NONE; + return selected_completion_idx == PAGER_SELECTION_NONE ? PAGER_SELECTION_NONE : selected_completion_idx % rendering.rows; } size_t pager_t::get_selected_column(const page_rendering_t &rendering) const { + if (rendering.rows == 0) + return PAGER_SELECTION_NONE; + return selected_completion_idx == PAGER_SELECTION_NONE ? PAGER_SELECTION_NONE : selected_completion_idx / rendering.rows; } void pager_t::clear() { + unfiltered_completion_infos.clear(); completion_infos.clear(); prefix.clear(); selected_completion_idx = PAGER_SELECTION_NONE; fully_disclosed = false; search_field_shown = false; - search_field_string.clear(); + search_field_line.clear(); +} + +void pager_t::set_search_field_shown(bool flag) +{ + this->search_field_shown = flag; +} + +bool pager_t::is_search_field_shown() const +{ + return this->search_field_shown; +} + +size_t pager_t::cursor_position() const +{ + size_t result = wcslen(SEARCH_FIELD_PROMPT) + this->search_field_line.position; + /* Clamp it to the right edge */ + if (available_term_width > 0 && result + 1 > available_term_width) + { + result = available_term_width - 1; + } + return result; +} + +void pager_t::note_selection_changed() +{ + reader_selected_completion_changed(this); } /* Constructor */ -page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1), remaining_to_disclose(0) +page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1), remaining_to_disclose(0), search_field_shown(false) { } diff --git a/pager.h b/pager.h index 39af0335c..922e95035 100644 --- a/pager.h +++ b/pager.h @@ -4,6 +4,7 @@ #include "complete.h" #include "screen.h" +#include "reader.h" /* Represents rendering from the pager */ class page_rendering_t @@ -20,6 +21,9 @@ class page_rendering_t size_t remaining_to_disclose; + bool search_field_shown; + editable_line_t search_field_line; + /* Returns a rendering with invalid data, useful to indicate "no rendering" */ page_rendering_t(); }; @@ -47,7 +51,6 @@ class pager_t /* Whether we show the search field */ bool search_field_shown; - wcstring search_field_string; /* Returns the index of the completion that should draw selected, using the given number of columns */ size_t visual_selected_completion_index(size_t rows, size_t cols) const; @@ -84,21 +87,33 @@ class pager_t private: typedef std::vector comp_info_list_t; + + /* The filtered list of completion infos */ comp_info_list_t completion_infos; + /* The unfiltered list. Note there's a lot of duplication here. */ + comp_info_list_t unfiltered_completion_infos; + wcstring prefix; + void note_selection_changed(); + bool completion_try_print(size_t cols, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering, size_t suggested_start_row) const; void recalc_min_widths(comp_info_list_t * lst) const; void measure_completion_infos(std::vector *infos, const wcstring &prefix) const; + bool completion_info_passes_filter(const comp_t &info) const; + void completion_print(size_t cols, int *width_per_column, size_t row_start, size_t row_stop, const wcstring &prefix, const comp_info_list_t &lst, page_rendering_t *rendering) const; line_t completion_print_item(const wcstring &prefix, const comp_t *c, size_t row, size_t column, int width, bool secondary, bool selected, page_rendering_t *rendering) const; public: + /* The text of the search field */ + editable_line_t search_field_line; + /* Sets the set of completions */ void set_completions(const completion_list_t &comp); @@ -130,6 +145,21 @@ class pager_t /* Clears all completions and the prefix */ void clear(); + /* Updates the completions list per the filter */ + void refilter_completions(); + + /* Sets whether the search field is shown */ + void set_search_field_shown(bool flag); + + /* Gets whether the search field shown */ + bool is_search_field_shown() const; + + /* Indicates if we are navigating our contents */ + bool is_navigating_contents() const; + + /* Position of the cursor */ + size_t cursor_position() const; + /* Constructor */ pager_t(); }; diff --git a/reader.cpp b/reader.cpp index 4eb3b0ee7..492d8fb71 100644 --- a/reader.cpp +++ b/reader.cpp @@ -210,9 +210,6 @@ public: /** Current page rendering */ page_rendering_t current_page_rendering; - /** Whether we are navigating the pager */ - bool is_navigating_pager; - /** Whether autosuggesting is allowed at all */ bool allow_autosuggestion; @@ -254,14 +251,26 @@ public: /** The current position in search_prev */ size_t search_pos; + bool is_navigating_pager_contents() const + { + return this->pager.is_navigating_contents(); + } + /* The line that is currently being edited. Typically the command line, but may be the search field */ editable_line_t *active_edit_line() { - return &command_line; + if (this->is_navigating_pager_contents() && this->pager.is_search_field_shown()) + { + return &this->pager.search_field_line; + } + else + { + return &this->command_line; + } } /** Do what we need to do whenever our command line changes */ - void command_line_changed(void); + void command_line_changed(const editable_line_t *el); /** Expand abbreviations at the current cursor position, minus backtrack_amt. */ bool expand_abbreviation_as_necessary(size_t cursor_backtrack); @@ -278,6 +287,10 @@ public: /** The output of the last evaluation of the right prompt command */ wcstring right_prompt_buff; + + /* Completion support */ + wcstring cycle_command_line; + size_t cycle_cursor_pos; /** Color is the syntax highlighting for buff. The format is that @@ -343,13 +356,13 @@ public: /** Constructor */ reader_data_t() : - is_navigating_pager(0), allow_autosuggestion(0), suppress_autosuggestion(0), expand_abbreviations(0), history(0), token_history_pos(0), search_pos(0), + cycle_cursor_pos(0), complete_func(0), highlight_function(0), test_func(0), @@ -531,12 +544,12 @@ wcstring combine_command_and_autosuggestion(const wcstring &cmdline, const wcstr static void reader_repaint() { - editable_line_t *el = &data->command_line; + editable_line_t *cmd_line = &data->command_line; // Update the indentation - data->indents = parse_util_compute_indents(el->text); + data->indents = parse_util_compute_indents(cmd_line->text); // Combine the command and autosuggestion into one string - wcstring full_line = combine_command_and_autosuggestion(el->text, data->autosuggestion); + wcstring full_line = combine_command_and_autosuggestion(cmd_line->text, data->autosuggestion); size_t len = full_line.size(); if (len < 1) @@ -552,16 +565,20 @@ static void reader_repaint() // We set the term size to 1 less than the true term height. This means we will always show the (bottom) line of the prompt. data->pager.set_term_size(maxi(1, common_get_width()), maxi(1, common_get_height() - 1)); data->pager.update_rendering(&data->current_page_rendering); + + bool focused_on_pager = data->active_edit_line() == &data->pager.search_field_line; + size_t cursor_position = focused_on_pager ? data->pager.cursor_position() : cmd_line->position; s_write(&data->screen, data->left_prompt_buff, data->right_prompt_buff, full_line, - el->size(), + cmd_line->size(), &colors[0], &indents[0], - el->position, - data->current_page_rendering); + cursor_position, + data->current_page_rendering, + focused_on_pager); data->repaint_needed = false; } @@ -609,7 +626,7 @@ static void reader_kill(editable_line_t *el, size_t begin_idx, size_t length, in } el->text.erase(begin_idx, length); - data->command_line_changed(); + data->command_line_changed(el); reader_super_highlight_me_plenty(); reader_repaint(); @@ -650,19 +667,26 @@ void reader_pop_current_filename() /** Make sure buffers are large enough to hold the current string length */ -void reader_data_t::command_line_changed() +void reader_data_t::command_line_changed(const editable_line_t *el) { ASSERT_IS_MAIN_THREAD(); - size_t len = this->command_line.size(); + if (el == &this->command_line) + { + size_t len = this->command_line.size(); - /* When we grow colors, propagate the last color (if any), under the assumption that usually it will be correct. If it is, it avoids a repaint. */ - highlight_spec_t last_color = colors.empty() ? highlight_spec_t() : colors.back(); - colors.resize(len, last_color); + /* When we grow colors, propagate the last color (if any), under the assumption that usually it will be correct. If it is, it avoids a repaint. */ + highlight_spec_t last_color = colors.empty() ? highlight_spec_t() : colors.back(); + colors.resize(len, last_color); - indents.resize(len); + indents.resize(len); - /* Update the gen count */ - s_generation_count++; + /* Update the gen count */ + s_generation_count++; + } + else if (el == &this->pager.search_field_line) + { + this->pager.refilter_completions(); + } } /* Expand abbreviations at the given cursor position. Does NOT inspect 'data'. */ @@ -752,7 +776,7 @@ bool reader_data_t::expand_abbreviation_as_necessary(size_t cursor_backtrack) el->text.swap(new_cmdline); el->position = new_buff_pos; - data->command_line_changed(); + data->command_line_changed(el); result = true; } } @@ -1024,6 +1048,64 @@ void reader_react_to_color_change() } +/* Indicates if the given command char ends paging */ +static bool command_ends_paging(wchar_t c, bool focused_on_search_field) +{ + switch (c) + { + /* These commands always end paging */ + case R_HISTORY_SEARCH_BACKWARD: + case R_HISTORY_SEARCH_FORWARD: + case R_BEGINNING_OF_HISTORY: + case R_END_OF_HISTORY: + case R_HISTORY_TOKEN_SEARCH_BACKWARD: + case R_HISTORY_TOKEN_SEARCH_FORWARD: + case R_EXECUTE: + case R_ACCEPT_AUTOSUGGESTION: + return true; + + /* These commands never do */ + case R_COMPLETE: + case R_COMPLETE_AND_SEARCH: + case R_BACKWARD_CHAR: + case R_FORWARD_CHAR: + case R_UP_LINE: + case R_DOWN_LINE: + case R_NULL: + case R_REPAINT: + case R_SUPPRESS_AUTOSUGGESTION: + default: + return false; + + /* These commands operate on the search field if that's where the focus is */ + case R_BEGINNING_OF_LINE: + case R_END_OF_LINE: + case R_FORWARD_WORD: + case R_BACKWARD_WORD: + case R_DELETE_CHAR: + case R_BACKWARD_DELETE_CHAR: + case R_KILL_LINE: + case R_YANK: + case R_YANK_POP: + case R_BACKWARD_KILL_LINE: + case R_KILL_WHOLE_LINE: + case R_KILL_WORD: + case R_BACKWARD_KILL_WORD: + case R_BACKWARD_KILL_PATH_COMPONENT: + case R_SELF_INSERT: + case R_TRANSPOSE_CHARS: + case R_TRANSPOSE_WORDS: + case R_UPCASE_WORD: + case R_DOWNCASE_WORD: + case R_CAPITALIZE_WORD: + case R_VI_ARG_DIGIT: + case R_VI_DELETE_TO: + case R_BEGINNING_OF_BUFFER: + case R_END_OF_BUFFER: + return ! focused_on_search_field; + } +} + /** Remove the previous character in the character buffer and on the screen using syntax highlighting, etc. @@ -1044,7 +1126,7 @@ static void remove_backward() el->text.erase(el->position, 1); } while (width == 0 && el->position > 0); - data->command_line_changed(); + data->command_line_changed(el); data->suppress_autosuggestion = true; reader_super_highlight_me_plenty(); @@ -1060,16 +1142,15 @@ static void remove_backward() Optionally also expand abbreviations. Returns true if the string changed. */ -static bool insert_string(const wcstring &str, bool should_expand_abbreviations = false) +static bool insert_string(editable_line_t *el, const wcstring &str, bool should_expand_abbreviations = false) { size_t len = str.size(); if (len == 0) return false; - editable_line_t *el = data->active_edit_line(); el->insert_string(str); - data->command_line_changed(); + data->command_line_changed(el); if (el == &data->command_line) { @@ -1091,9 +1172,9 @@ static bool insert_string(const wcstring &str, bool should_expand_abbreviations Insert the character into the command line buffer and print it to the screen using syntax highlighting, etc. */ -static bool insert_char(wchar_t c, bool should_expand_abbreviations = false) +static bool insert_char(editable_line_t *el, wchar_t c, bool should_expand_abbreviations = false) { - return insert_string(wcstring(1, c), should_expand_abbreviations); + return insert_string(el, wcstring(1, c), should_expand_abbreviations); } @@ -1538,17 +1619,12 @@ static void accept_autosuggestion(bool full) } } data->command_line.position = data->command_line.size(); - data->command_line_changed(); + data->command_line_changed(&data->command_line); reader_super_highlight_me_plenty(); reader_repaint(); } } -static bool is_navigating_pager_contents() -{ - return data && data->pager.selected_completion(data->current_page_rendering) != NULL; -} - /* Ensure we have no pager contents */ static void clear_pager() { @@ -1901,6 +1977,7 @@ static bool handle_completions(const std::vector &comp) /* Invalidate our rendering */ data->current_page_rendering = page_rendering_t(); + } else { @@ -1913,9 +1990,10 @@ static bool handle_completions(const std::vector &comp) run_pager(prefix, is_quoted, surviving_completions); s_reset(&data->screen, screen_reset_abandon_line); - } - reader_repaint(); + + reader_repaint_needed(); + success = false; } } @@ -2143,7 +2221,7 @@ static void set_command_line_and_position(editable_line_t *el, const wcstring &n { el->text = new_str; el->position = pos; - data->command_line_changed(); + data->command_line_changed(el); reader_super_highlight_me_plenty(); reader_repaint(); } @@ -2420,7 +2498,7 @@ static void reader_set_buffer_maintaining_pager(const wcstring &b, size_t pos) /* Callers like to pass us pointers into ourselves, so be careful! I don't know if we can use operator= with a pointer to our interior, so use an intermediate. */ size_t command_line_len = b.size(); data->command_line.text = b; - data->command_line_changed(); + data->command_line_changed(&data->command_line); /* Don't set a position past the command line length */ if (pos > command_line_len) @@ -2580,7 +2658,7 @@ void reader_push(const wchar_t *name) data=n; - data->command_line_changed(); + data->command_line_changed(&data->command_line); if (data->next == 0) { @@ -2931,7 +3009,7 @@ static int read_i(void) wcstring command = tmp; data->command_line.position=0; data->command_line.text.clear(); - data->command_line_changed(); + data->command_line_changed(&data->command_line); reader_run_command(parser, command); if (data->end_loop) { @@ -3023,12 +3101,9 @@ const wchar_t *reader_readline(void) /* Coalesce redundant repaints. When we get a repaint, we set this to true, and skip repaints until we get something else. */ bool coalescing_repaints = false; - /* The cycle index in our completion list */ - size_t completion_cycle_idx = (size_t)(-1); - /* The command line before completion */ - wcstring cycle_command_line; - size_t cycle_cursor_pos = 0; + data->cycle_command_line.clear(); + data->cycle_cursor_pos = 0; data->search_buff.clear(); data->search_mode = NO_SEARCH; @@ -3095,7 +3170,7 @@ const wchar_t *reader_readline(void) break; } - insert_string(arr); + insert_string(&data->command_line, arr); } } @@ -3111,30 +3186,18 @@ const wchar_t *reader_readline(void) if (last_char != R_YANK && last_char != R_YANK_POP) yank_len=0; - /* We clear pager contents for most events, except for a few */ - switch (c) + /* Clear the pager if necessary */ + bool focused_on_search_field = (data->active_edit_line() == &data->pager.search_field_line); + if (command_ends_paging(c, focused_on_search_field)) { - case R_COMPLETE: - case R_BACKWARD_CHAR: - case R_FORWARD_CHAR: - case R_UP_LINE: - case R_DOWN_LINE: - case R_NULL: - case R_REPAINT: - case R_SUPPRESS_AUTOSUGGESTION: - break; - - default: - clear_pager(); - break; + clear_pager(); } //fprintf(stderr, "\n\nchar: %ls\n\n", describe_char(c).c_str()); switch (c) { - - /* go to beginning of line*/ + /* go to beginning of line*/ case R_BEGINNING_OF_LINE: { editable_line_t *el = data->active_edit_line(); @@ -3213,6 +3276,7 @@ const wchar_t *reader_readline(void) /* complete */ case R_COMPLETE: + case R_COMPLETE_AND_SEARCH: { if (!data->complete_func) @@ -3220,10 +3284,10 @@ const wchar_t *reader_readline(void) /* Use the command line only; it doesn't make sense to complete in any other line */ editable_line_t *el = &data->command_line; - if (is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) + if (data->is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) { /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ - select_completion_in_direction(direction_next, cycle_command_line, cycle_cursor_pos); + select_completion_in_direction(c == R_COMPLETE ? direction_next : direction_prev, data->cycle_command_line, data->cycle_cursor_pos); } else { @@ -3273,13 +3337,19 @@ const wchar_t *reader_readline(void) prioritize_completions(comp); /* Record our cycle_command_line */ - cycle_command_line = el->text; - cycle_cursor_pos = el->position; - + data->cycle_command_line = el->text; + data->cycle_cursor_pos = el->position; + comp_empty = handle_completions(comp); + + /* Show the search field if requested and if we printed a list of completions */ + if (c == R_COMPLETE_AND_SEARCH && ! comp_empty && ! data->pager.empty()) + { + data->pager.set_search_field_shown(true); + select_completion_in_direction(direction_next, data->cycle_command_line, data->cycle_cursor_pos); + reader_repaint_needed(); + } - /* Start the cycle at the beginning */ - completion_cycle_idx = (size_t)(-1); } break; @@ -3375,7 +3445,7 @@ const wchar_t *reader_readline(void) case R_YANK: { yank_str = kill_yank(); - insert_string(yank_str); + insert_string(data->active_edit_line(), yank_str); yank_len = wcslen(yank_str); break; } @@ -3389,7 +3459,7 @@ const wchar_t *reader_readline(void) remove_backward(); yank_str = kill_yank_rotate(); - insert_string(yank_str); + insert_string(data->active_edit_line(), yank_str); yank_len = wcslen(yank_str); } break; @@ -3454,14 +3524,14 @@ const wchar_t *reader_readline(void) data->autosuggestion.clear(); /* We only execute the command line */ - const editable_line_t *el = &data->command_line; + editable_line_t *el = &data->command_line; /* Allow backslash-escaped newlines, but only if the following character is whitespace, or we're at the end of the text (see issue #163) */ if (is_backslashed(el->text, el->position)) { if (el->position >= el->size() || iswspace(el->text.at(el->position))) { - insert_char('\n'); + insert_char(el, '\n'); break; } } @@ -3502,7 +3572,7 @@ const wchar_t *reader_readline(void) */ case PARSER_TEST_INCOMPLETE: { - insert_char('\n'); + insert_char(el, '\n'); break; } @@ -3611,9 +3681,9 @@ const wchar_t *reader_readline(void) case R_BACKWARD_CHAR: { editable_line_t *el = data->active_edit_line(); - if (is_navigating_pager_contents()) + if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) { - select_completion_in_direction(direction_west, cycle_command_line, cycle_cursor_pos); + select_completion_in_direction(direction_west, data->cycle_command_line, data->cycle_cursor_pos); } else if (el->position > 0) { @@ -3627,9 +3697,9 @@ const wchar_t *reader_readline(void) case R_FORWARD_CHAR: { editable_line_t *el = data->active_edit_line(); - if (is_navigating_pager_contents()) + if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) { - select_completion_in_direction(direction_east, cycle_command_line, cycle_cursor_pos); + select_completion_in_direction(direction_east, data->cycle_command_line, data->cycle_cursor_pos); } else if (el->position < el->size()) { @@ -3705,7 +3775,7 @@ const wchar_t *reader_readline(void) case R_UP_LINE: case R_DOWN_LINE: { - if (is_navigating_pager_contents()) + if (data->is_navigating_pager_contents()) { /* We are already navigating pager contents. */ selection_direction_t direction; @@ -3718,6 +3788,10 @@ const wchar_t *reader_readline(void) { /* Up arrow, but we are in the first column and first row. End navigation */ direction = direction_deselect; + + /* Also hide the search field */ + data->pager.search_field_line.clear(); + data->pager.set_search_field_shown(false); } else { @@ -3726,12 +3800,12 @@ const wchar_t *reader_readline(void) } /* Now do the selection */ - select_completion_in_direction(direction, cycle_command_line, cycle_cursor_pos); + select_completion_in_direction(direction, data->cycle_command_line, data->cycle_cursor_pos); } else if (c == R_DOWN_LINE && ! data->pager.empty()) { /* We pressed down with a non-empty pager contents, begin navigation */ - select_completion_in_direction(direction_south, cycle_command_line, cycle_cursor_pos); + select_completion_in_direction(direction_south, data->cycle_command_line, data->cycle_cursor_pos); } else { @@ -3888,7 +3962,7 @@ const wchar_t *reader_readline(void) data->command_line.text.at(pos) = chr; capitalized_first = capitalized_first || make_uppercase; } - data->command_line_changed(); + data->command_line_changed(el); reader_super_highlight_me_plenty(); reader_repaint_needed(); break; @@ -3899,19 +3973,20 @@ const wchar_t *reader_readline(void) { if ((!wchar_private(c)) && (((c>31) || (c==L'\n'))&& (c != 127))) { - - if (is_navigating_pager_contents()) + bool should_expand_abbreviations = false; + if (data->is_navigating_pager_contents()) { - + data->pager.set_search_field_shown(true); } else { /* Expand abbreviations after space */ - bool should_expand_abbreviations = (c == L' '); - - /* Regular character */ - insert_char(c, should_expand_abbreviations); + should_expand_abbreviations = (c == L' '); } + + /* Regular character */ + insert_char(data->active_edit_line(), c, should_expand_abbreviations); + } else { @@ -3987,6 +4062,35 @@ int reader_has_pager_contents() return ! data->current_page_rendering.screen_data.empty(); } +void reader_selected_completion_changed(pager_t *pager) +{ + /* Only interested in the top level pager */ + if (data == NULL || pager != &data->pager) + return; + + const completion_t *completion = pager->selected_completion(data->current_page_rendering); + + /* Update the cursor and command line */ + size_t cursor_pos = data->cycle_cursor_pos; + wcstring new_cmd_line; + + if (completion == NULL) + { + new_cmd_line = data->cycle_command_line; + } + else + { + new_cmd_line = completion_apply_to_command_line(completion->completion, completion->flags, data->cycle_command_line, &cursor_pos, false); + } + reader_set_buffer_maintaining_pager(new_cmd_line, cursor_pos); + + /* Since we just inserted a completion, don't immediately do a new autosuggestion */ + data->suppress_autosuggestion = true; + + /* Trigger repaint (see #765) */ + reader_repaint_needed(); +} + /** Read non-interactively. Read input from stdin without displaying diff --git a/reader.h b/reader.h index 025358c06..1519aee84 100644 --- a/reader.h +++ b/reader.h @@ -49,6 +49,12 @@ class editable_line_t return text.empty(); } + void clear() + { + text.clear(); + position = 0; + } + editable_line_t() : text(), position(0) { } @@ -295,5 +301,8 @@ bool reader_expand_abbreviation_in_command(const wcstring &cmdline, size_t curso /* Apply a completion string. Exposed for testing only. */ wcstring completion_apply_to_command_line(const wcstring &val_str, complete_flags_t flags, const wcstring &command_line, size_t *inout_cursor_pos, bool append_only); +/* Called by pager */ +class pager_t; +void reader_selected_completion_changed(pager_t *pager); #endif diff --git a/screen.cpp b/screen.cpp index 24c10d105..7c02c3841 100644 --- a/screen.cpp +++ b/screen.cpp @@ -1237,7 +1237,8 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const page_rendering_t &pager) + const page_rendering_t &pager, + bool cursor_position_is_within_pager) { screen_data_t::cursor_t cursor_arr; @@ -1306,25 +1307,27 @@ void s_write(screen_t *s, { int color = colors[i]; - if (i == cursor_pos) + if (! cursor_position_is_within_pager && i == cursor_pos) { color = 0; - } - - if (i == cursor_pos) - { cursor_arr = s->desired.cursor; } s_desired_append_char(s, effective_commandline.at(i), color, indent[i], first_line_prompt_space); } - if (i == cursor_pos) + if (! cursor_position_is_within_pager && i == cursor_pos) { cursor_arr = s->desired.cursor; } s->desired.cursor = cursor_arr; + if (cursor_position_is_within_pager) + { + s->desired.cursor.x = (int)cursor_pos; + s->desired.cursor.y = (int)s->desired.line_count(); + } + /* Append pager_data (none if empty) */ s->desired.append_lines(pager.screen_data); diff --git a/screen.h b/screen.h index 0733b8046..8a16fad03 100644 --- a/screen.h +++ b/screen.h @@ -218,6 +218,8 @@ public: \param colors the colors to use for the comand line \param indent the indent to use for the command line \param cursor_pos where the cursor is + \param pager_data any pager data, to append to the screen + \param position_is_within_pager whether the position is within the pager line (first line) */ void s_write(screen_t *s, const wcstring &left_prompt, @@ -227,7 +229,8 @@ void s_write(screen_t *s, const highlight_spec_t *colors, const int *indent, size_t cursor_pos, - const page_rendering_t &pager_data); + const page_rendering_t &pager_data, + bool position_is_within_pager); /** This function resets the screen buffers internal knowledge about diff --git a/share/functions/fish_default_key_bindings.fish b/share/functions/fish_default_key_bindings.fish index a03faaba4..63903f66d 100644 --- a/share/functions/fish_default_key_bindings.fish +++ b/share/functions/fish_default_key_bindings.fish @@ -114,6 +114,9 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis # 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' + # shift-tab does a tab complete followed by a search + bind --key btab complete-and-search + # term-specific special bindings switch "$TERM" case 'rxvt*' @@ -122,3 +125,4 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind \eOd backward-word end end + From 7d8766980b0b3604d9fe77850faa62092ff5c786 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 27 Jan 2014 02:17:31 -0800 Subject: [PATCH 035/145] Support escape or up-arrow to cancel the completion search field. --- input.cpp | 6 +- input.h | 3 +- pager.cpp | 15 ++--- pager.h | 6 +- reader.cpp | 65 ++++++++++--------- .../functions/fish_default_key_bindings.fish | 5 +- 6 files changed, 55 insertions(+), 45 deletions(-) diff --git a/input.cpp b/input.cpp index ccdbc2406..bd855c2b5 100644 --- a/input.cpp +++ b/input.cpp @@ -129,7 +129,8 @@ static const wchar_t * const name_arr[] = L"up-line", L"down-line", L"suppress-autosuggestion", - L"accept-autosuggestion" + L"accept-autosuggestion", + L"cancel" }; wcstring describe_char(wchar_t c) @@ -227,7 +228,8 @@ static const wchar_t code_arr[] = R_UP_LINE, R_DOWN_LINE, R_SUPPRESS_AUTOSUGGESTION, - R_ACCEPT_AUTOSUGGESTION + R_ACCEPT_AUTOSUGGESTION, + R_CANCEL }; /** Mappings for the current input mode */ diff --git a/input.h b/input.h index 2d71a5ae0..56f6e2495 100644 --- a/input.h +++ b/input.h @@ -58,7 +58,8 @@ enum R_UP_LINE, R_DOWN_LINE, R_SUPPRESS_AUTOSUGGESTION, - R_ACCEPT_AUTOSUGGESTION + R_ACCEPT_AUTOSUGGESTION, + R_CANCEL }; wcstring describe_char(wchar_t c); diff --git a/pager.cpp b/pager.cpp index 49fc6a8e4..1dd4ecc4f 100644 --- a/pager.cpp +++ b/pager.cpp @@ -7,8 +7,6 @@ #include #include -#define PAGER_SELECTION_NONE ((size_t)(-1)) - typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; typedef std::vector comp_info_list_t; @@ -709,7 +707,7 @@ bool pager_t::empty() const return unfiltered_completion_infos.empty(); } -const completion_t *pager_t::select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering) +bool pager_t::select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering) { /* Must have something to select */ if (this->completion_infos.empty()) @@ -734,7 +732,8 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc { selected_completion_idx = 0; } - return selected_completion(rendering); + note_selection_changed(); + return true; /* These do nothing */ case direction_north: @@ -742,7 +741,7 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc case direction_west: case direction_deselect: default: - return NULL; + return false; } } @@ -898,12 +897,12 @@ const completion_t *pager_t::select_next_completion_in_direction(selection_direc } } - - return selected_completion(rendering); + this->note_selection_changed(); + return true; } else { - return NULL; + return false; } } diff --git a/pager.h b/pager.h index 922e95035..8253dc113 100644 --- a/pager.h +++ b/pager.h @@ -6,6 +6,8 @@ #include "screen.h" #include "reader.h" +#define PAGER_SELECTION_NONE ((size_t)(-1)) + /* Represents rendering from the pager */ class page_rendering_t { @@ -123,8 +125,8 @@ class pager_t /* Sets the terminal width and height */ void set_term_size(int w, int h); - /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns the newly selected completion if it changed, NULL if nothing was selected or it did not change. */ - const completion_t *select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); + /* Changes the selected completion in the given direction according to the layout of the given rendering. Returns true if the selection changed. */ + bool select_next_completion_in_direction(selection_direction_t direction, const page_rendering_t &rendering); /* Returns the currently selected completion for the given rendering */ const completion_t *selected_completion(const page_rendering_t &rendering) const; diff --git a/reader.cpp b/reader.cpp index 492d8fb71..9b09ae832 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1062,6 +1062,7 @@ static bool command_ends_paging(wchar_t c, bool focused_on_search_field) case R_HISTORY_TOKEN_SEARCH_FORWARD: case R_EXECUTE: case R_ACCEPT_AUTOSUGGESTION: + case R_CANCEL: return true; /* These commands never do */ @@ -1636,31 +1637,11 @@ static void clear_pager() } } -static void select_completion_in_direction(enum selection_direction_t dir, const wcstring &cycle_command_line, size_t cycle_cursor_pos) +static void select_completion_in_direction(enum selection_direction_t dir) { - const completion_t *next_comp = data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); - if (next_comp != NULL || dir == direction_deselect) - { - /* Update the cursor and command line */ - size_t cursor_pos = cycle_cursor_pos; - wcstring new_cmd_line; - if (dir == direction_deselect) - { - new_cmd_line = cycle_command_line; - } - else - { - new_cmd_line = completion_apply_to_command_line(next_comp->completion, next_comp->flags, cycle_command_line, &cursor_pos, false); - } - reader_set_buffer_maintaining_pager(new_cmd_line, cursor_pos); - - - /* Since we just inserted a completion, don't immediately do a new autosuggestion */ - data->suppress_autosuggestion = true; - - /* Trigger repaint (see #765) */ - reader_repaint_needed(); - } + assert(data != NULL); + /* Note: this will probably trigger reader_selected_completion_changed, which will cause us to update stuff */ + data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); } /** @@ -2960,6 +2941,21 @@ static void handle_end_loop() } } +static bool selection_is_at_top() +{ + const pager_t *pager = &data->pager; + size_t row = pager->get_selected_row(data->current_page_rendering); + if (row != 0 && row != PAGER_SELECTION_NONE) + return false; + + size_t col = pager->get_selected_column(data->current_page_rendering); + if (col != 0 && col != PAGER_SELECTION_NONE) + return false; + + return true; +} + + /** Read interactively. Read input from stdin while providing editing facilities. @@ -3253,6 +3249,12 @@ const wchar_t *reader_readline(void) { break; } + + case R_CANCEL: + { + // The only thing we can cancel right now is paging, which we handled up above + break; + } case R_REPAINT: { @@ -3287,7 +3289,7 @@ const wchar_t *reader_readline(void) if (data->is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) { /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ - select_completion_in_direction(c == R_COMPLETE ? direction_next : direction_prev, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(c == R_COMPLETE ? direction_next : direction_prev); } else { @@ -3346,7 +3348,7 @@ const wchar_t *reader_readline(void) if (c == R_COMPLETE_AND_SEARCH && ! comp_empty && ! data->pager.empty()) { data->pager.set_search_field_shown(true); - select_completion_in_direction(direction_next, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(direction_next); reader_repaint_needed(); } @@ -3683,7 +3685,7 @@ const wchar_t *reader_readline(void) editable_line_t *el = data->active_edit_line(); if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) { - select_completion_in_direction(direction_west, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(direction_west); } else if (el->position > 0) { @@ -3699,7 +3701,7 @@ const wchar_t *reader_readline(void) editable_line_t *el = data->active_edit_line(); if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) { - select_completion_in_direction(direction_east, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(direction_east); } else if (el->position < el->size()) { @@ -3784,7 +3786,7 @@ const wchar_t *reader_readline(void) /* Down arrow is always south */ direction = direction_south; } - else if (data->pager.get_selected_row(data->current_page_rendering) == 0 && data->pager.get_selected_column(data->current_page_rendering) == 0) + else if (selection_is_at_top()) { /* Up arrow, but we are in the first column and first row. End navigation */ direction = direction_deselect; @@ -3792,6 +3794,7 @@ const wchar_t *reader_readline(void) /* Also hide the search field */ data->pager.search_field_line.clear(); data->pager.set_search_field_shown(false); + data->pager.refilter_completions(); } else { @@ -3800,12 +3803,12 @@ const wchar_t *reader_readline(void) } /* Now do the selection */ - select_completion_in_direction(direction, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(direction); } else if (c == R_DOWN_LINE && ! data->pager.empty()) { /* We pressed down with a non-empty pager contents, begin navigation */ - select_completion_in_direction(direction_south, data->cycle_command_line, data->cycle_cursor_pos); + select_completion_in_direction(direction_south); } else { diff --git a/share/functions/fish_default_key_bindings.fish b/share/functions/fish_default_key_bindings.fish index 63903f66d..2fec74da3 100644 --- a/share/functions/fish_default_key_bindings.fish +++ b/share/functions/fish_default_key_bindings.fish @@ -115,7 +115,10 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis bind \ep '__fish_paginate' # shift-tab does a tab complete followed by a search - bind --key btab complete-and-search + bind --key btab complete-and-search + + # escape cancels stuff + bind \e cancel # term-specific special bindings switch "$TERM" From 15a63805d9e51259868c3799c9b697b86ab9bbff Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 27 Jan 2014 02:22:34 -0800 Subject: [PATCH 036/145] Make arrow keys navigate completions instead of manipulate completion search field --- reader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reader.cpp b/reader.cpp index 9b09ae832..7adafbaf8 100644 --- a/reader.cpp +++ b/reader.cpp @@ -3683,7 +3683,7 @@ const wchar_t *reader_readline(void) case R_BACKWARD_CHAR: { editable_line_t *el = data->active_edit_line(); - if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) + if (data->is_navigating_pager_contents()) { select_completion_in_direction(direction_west); } @@ -3699,7 +3699,7 @@ const wchar_t *reader_readline(void) case R_FORWARD_CHAR: { editable_line_t *el = data->active_edit_line(); - if (data->is_navigating_pager_contents() && ! data->pager.is_search_field_shown()) + if (data->is_navigating_pager_contents()) { select_completion_in_direction(direction_east); } From 369229ea71ef41710ef1ea3a4e39ed8ce08dc778 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 27 Jan 2014 02:28:19 -0800 Subject: [PATCH 037/145] Make escape clear the current completion --- reader.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/reader.cpp b/reader.cpp index 7adafbaf8..dea58f431 100644 --- a/reader.cpp +++ b/reader.cpp @@ -2204,7 +2204,7 @@ static void set_command_line_and_position(editable_line_t *el, const wcstring &n el->position = pos; data->command_line_changed(el); reader_super_highlight_me_plenty(); - reader_repaint(); + reader_repaint_needed(); } static void reader_replace_current_token(const wchar_t *new_token) @@ -3182,6 +3182,13 @@ const wchar_t *reader_readline(void) if (last_char != R_YANK && last_char != R_YANK_POP) yank_len=0; + /* Restore the text */ + if (c == R_CANCEL && data->is_navigating_pager_contents()) + { + set_command_line_and_position(&data->command_line, data->cycle_command_line, data->cycle_cursor_pos); + } + + /* Clear the pager if necessary */ bool focused_on_search_field = (data->active_edit_line() == &data->pager.search_field_line); if (command_ends_paging(c, focused_on_search_field)) From 441522f97bfc80e4c5dd54538437a923619cc124 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 27 Jan 2014 22:01:38 -0800 Subject: [PATCH 038/145] Make return not execute the selected completion in the pager, instead just accept it --- reader.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/reader.cpp b/reader.cpp index dea58f431..51fb0ab28 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1060,7 +1060,6 @@ static bool command_ends_paging(wchar_t c, bool focused_on_search_field) case R_END_OF_HISTORY: case R_HISTORY_TOKEN_SEARCH_BACKWARD: case R_HISTORY_TOKEN_SEARCH_FORWARD: - case R_EXECUTE: case R_ACCEPT_AUTOSUGGESTION: case R_CANCEL: return true; @@ -1077,6 +1076,10 @@ static bool command_ends_paging(wchar_t c, bool focused_on_search_field) case R_SUPPRESS_AUTOSUGGESTION: default: return false; + + /* R_EXECUTE does end paging, but only executes if it was not paging. So it's handled specially */ + case R_EXECUTE: + return false; /* These commands operate on the search field if that's where the focus is */ case R_BEGINNING_OF_LINE: @@ -3532,6 +3535,13 @@ const wchar_t *reader_readline(void) /* Delete any autosuggestion */ data->autosuggestion.clear(); + /* If the user hits return while navigating the pager, it only clears the pager */ + if (data->is_navigating_pager_contents()) + { + clear_pager(); + break; + } + /* We only execute the command line */ editable_line_t *el = &data->command_line; From afd6ca314c14f45d9fc646737270f4a3dc284b88 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 28 Jan 2014 07:30:05 -0800 Subject: [PATCH 039/145] Make COMPLETE_AND_SEARCH always show the search field. Also end paging upon modifying the command line contents. --- reader.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/reader.cpp b/reader.cpp index 51fb0ab28..d51b1f976 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1782,11 +1782,12 @@ static void prioritize_completions(std::vector &comp) completions. \param comp the list of completion strings + \param continue_after_prefix_insertion If we have a shared prefix, whether to print the list of completions after inserting it. Return true if we inserted text into the command line, false if we did not. */ -static bool handle_completions(const std::vector &comp) +static bool handle_completions(const std::vector &comp, bool continue_after_prefix_insertion) { bool done = false; bool success = false; @@ -1923,9 +1924,10 @@ static bool handle_completions(const std::vector &comp) completion_insert(common_prefix.c_str(), flags); success = true; } - else + + if (continue_after_prefix_insertion || common_prefix.empty()) { - /* We didn't get a common prefix. Print the list. */ + /* We didn't get a common prefix, or we want to print the list anyways. */ size_t len, prefix_start = 0; wcstring prefix; parse_util_get_parameter_info(el->text, el->position, NULL, &prefix_start, NULL); @@ -3352,7 +3354,8 @@ const wchar_t *reader_readline(void) data->cycle_command_line = el->text; data->cycle_cursor_pos = el->position; - comp_empty = handle_completions(comp); + bool continue_after_prefix_insertion = (c == R_COMPLETE_AND_SEARCH); + comp_empty = handle_completions(comp, continue_after_prefix_insertion); /* Show the search field if requested and if we printed a list of completions */ if (c == R_COMPLETE_AND_SEARCH && ! comp_empty && ! data->pager.empty()) @@ -3807,11 +3810,6 @@ const wchar_t *reader_readline(void) { /* Up arrow, but we are in the first column and first row. End navigation */ direction = direction_deselect; - - /* Also hide the search field */ - data->pager.search_field_line.clear(); - data->pager.set_search_field_shown(false); - data->pager.refilter_completions(); } else { @@ -4005,7 +4003,15 @@ const wchar_t *reader_readline(void) } /* Regular character */ + editable_line_t *el = data->active_edit_line(); insert_char(data->active_edit_line(), c, should_expand_abbreviations); + + /* End paging upon inserting into the normal command line */ + if (el == &data->command_line) + { + clear_pager(); + } + } else From d5cb16aa1ff20040042ac58eaa31ce1d7dc9cbd0 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 28 Jan 2014 08:19:24 -0800 Subject: [PATCH 040/145] NULL -> false --- pager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pager.cpp b/pager.cpp index 1dd4ecc4f..d7025bc87 100644 --- a/pager.cpp +++ b/pager.cpp @@ -712,7 +712,7 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio /* Must have something to select */ if (this->completion_infos.empty()) { - return NULL; + return false; } /* Handle the case of nothing selected yet */ From 60808a4820b1714499f601ed78f0ae903bdb779f Mon Sep 17 00:00:00 2001 From: Geoff Nixon Date: Tue, 7 Jan 2014 19:57:49 -0800 Subject: [PATCH 041/145] Enhance/fix `isatty` using `command test`. Presently, `isatty` only works on a handful of keywords. Here it is rewritten to be able to take any path, device or fd number as an argument, and eliminates errors printed to stdout. Per discussion in #1228, using `builtin test -c` within a pipe to test special file descriptors is not viable, so this implementation specifcially uses `command test`. Additionally, a note has been added to the documentation of `test` regarding this potential aberration from the expected output of the test utility under the 'Standards' section. --- doc_src/isatty.txt | 29 ++++++++++++++++++++++------- doc_src/test.txt | 7 +++++++ share/functions/isatty.fish | 37 ++++++++++++++++++------------------- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/doc_src/isatty.txt b/doc_src/isatty.txt index d3b52892c..0a0caf739 100644 --- a/doc_src/isatty.txt +++ b/doc_src/isatty.txt @@ -1,14 +1,29 @@ -\section isatty isatty - test if the specified file descriptor is a tty +\section isatty isatty - test if a file or file descriptor is a tty. \subsection isatty-synopsis Synopsis - isatty [FILE DESCRIPTOR] +isatty [FILE | DEVICE | FILE DESCRIPTOR NUMBER] \subsection isatty-description Description -isatty tests if a file descriptor is a tty. +isatty tests if a file or file descriptor is a tty. +The argument may be in the form of a file path, device, or file descriptor +number. Without an argument, standard input is implied. -FILE DESCRIPTOR may be either the number of a file descriptor, or one of the -strings stdin, \c stdout and stderr. +If the resolved file descriptor is a tty, the command returns zero. Otherwise, the command exits one. No messages are printed to standard error. -If the specified file descriptor is a tty, the exit status of the command is -zero. Otherwise, it is non-zero. +\subsection isatty-examples Examples +From an interactive shell, the commands below exit with a return value of zero: +
+isatty
+isatty stdout
+isatty 2
+echo | isatty /dev/fd/1
+
+ +And these will exit non-zero: +
+echo | isatty
+isatty /dev/fd/9
+isatty stdout > file
+isatty 2 2> file
+
diff --git a/doc_src/test.txt b/doc_src/test.txt index 946c53307..892848d11 100644 --- a/doc_src/test.txt +++ b/doc_src/test.txt @@ -97,4 +97,11 @@ end. IEEE Std 1003.1-2008 (POSIX.1) standard. The following exceptions apply: - The \c < and \c > operators for comparing strings are not implemented. +- Because this test is a shell builtin and not a standalone utility, using + the -c flag on a special file descriptors like standard input and output + may not return the same result when invoked from within a pipe as one + would expect when invoking the \c test utility in another shell. + + In cases such as this, one can use \c command \c test to explicitly + use the system's standalone \c test rather than this \c builtin \c test. diff --git a/share/functions/isatty.fish b/share/functions/isatty.fish index d4f2c43e3..f49b3aa4e 100644 --- a/share/functions/isatty.fish +++ b/share/functions/isatty.fish @@ -1,28 +1,27 @@ +function isatty -d "Test if a file or file descriptor is a tty." -function isatty -d "Tests if a file descriptor is a tty" - set -l fd 0 - if count $argv >/dev/null - switch $argv[1] +# Use `command test` because `builtin test` doesn't open the regular fd's. - case -h --h --he --hel --help - __fish_print_help isatty - return 0 + switch "$argv" - case stdin - set fd 0 + case '-h*' '--h*' + __fish_print_help isatty - case stdout - set fd 1 + case '' + command test -c /dev/stdin - case stderr - set fd 2 + case '*' + if test -e "$argv" # The eval here is needed for symlinks. Unsure why. + command test -c "$argv"; and eval tty 0>"$argv" >/dev/null - case '*' - set fd $argv[1] + else if test -e /dev/"$argv" + command test -c /dev/"$argv"; and tty 0>/dev/"$argv" >/dev/null - end - end - - eval "tty 0>&$fd >/dev/null" + else if test -e /dev/fd/"$argv" + command test -c /dev/fd/"$argv"; and tty 0>/dev/fd/"$argv" >/dev/null + else + return 1 + end + end end From 8fbffe250a18e0bd468f2d3c894917c3d9eaa5c0 Mon Sep 17 00:00:00 2001 From: David Adam Date: Wed, 29 Jan 2014 12:47:56 +0800 Subject: [PATCH 042/145] __fish_print_packages: correct syntax for yum, improve yum/rpm pipelines Closes #1269 (output to cache file). Reworks the editing pipeline for both yum and rpm completions down to a single sed command. --- share/functions/__fish_print_packages.fish | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/functions/__fish_print_packages.fish b/share/functions/__fish_print_packages.fish index 95d5d6cae..f732a51ff 100644 --- a/share/functions/__fish_print_packages.fish +++ b/share/functions/__fish_print_packages.fish @@ -46,7 +46,7 @@ function __fish_print_packages end # Remove package version information from output and pipe into cache file - /usr/share/yum-cli/completion-helper.py list all -d 0 -C >$cache_file | cut -d '.' -f 1 | sed '1d' | sed '/^\s/d' | sed -e 's/$/'\t$package'/' & + /usr/share/yum-cli/completion-helper.py list all -d 0 -C | sed "s/\..*/\t$package/" >$cache_file & end # Rpm is too slow for this job, so we set it up to do completions @@ -67,7 +67,7 @@ function __fish_print_packages end # Remove package version information from output and pipe into cache file - rpm -qa | sed -e 's/-[^-]*-[^-]*$//' | sed -e 's/$/'\t$package'/' >$cache_file & + rpm -qa |sed -e 's/-[^-]*-[^-]*$/\t'$package'/' >$cache_file & end # This completes the package name from the portage tree. From 8490aac025566e8f88f71d8bfb1a3789d725eda3 Mon Sep 17 00:00:00 2001 From: David Adam Date: Wed, 29 Jan 2014 13:33:27 +0800 Subject: [PATCH 043/145] sshfs completions: use all directories as mount points Closes #1268. --- share/completions/sshfs.fish | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/completions/sshfs.fish b/share/completions/sshfs.fish index 6c742b9c2..adece8c3d 100644 --- a/share/completions/sshfs.fish +++ b/share/completions/sshfs.fish @@ -15,9 +15,9 @@ complete -x -c sshfs -d Hostname -a " (__fish_print_users)@ " # -# Mount Points, for neatness, I am only mounting under ~/mnt/ +# Mount Points # -complete -c sshfs --description "Mount point" -x -a '(find ~/mnt -type d)' +complete -c sshfs -x -a '(__fish_complete_directories (commandline -ct) "Mount point")' # # Command options # From 20130d89dc2c33faefd4e3bec9acbbe2e2cded0b Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 29 Jan 2014 15:42:52 -0800 Subject: [PATCH 044/145] Support for escaped colons in makefile targets in __fish_print_make_targets, as part of #1259 --- share/functions/__fish_print_make_targets.fish | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/share/functions/__fish_print_make_targets.fish b/share/functions/__fish_print_make_targets.fish index 5be984b8c..8848f2701 100644 --- a/share/functions/__fish_print_make_targets.fish +++ b/share/functions/__fish_print_make_targets.fish @@ -1,8 +1,15 @@ function __fish_print_make_targets - set files Makefile makefile GNUmakefile # Some seds (e.g. on Mac OS X), don't support \n in the RHS # Use a literal newline instead # http://sed.sourceforge.net/sedfaq4.html#s4.1 - sgrep -h -E '^[^#%=$[:space:]][^#%=$]*:([^=]|$)' $files ^/dev/null | cut -d ":" -f 1 | sed -e 's/^ *//;s/ *$//;s/ */\\ + # The 'rev | cut | rev' trick removes everything after the last colon + for file in GNUmakefile Makefile makefile + if test -f $file + sgrep -h -o -E '^[^#%=$[:space:]][^#%=$]*:([^=]|$)' $file ^/dev/null | rev | cut -d ":" -f 2- | rev | sed -e 's/^ *//;s/ *$//;s/ */\\ /g' ^/dev/null + # On case insensitive filesystems, Makefile and makefile are the same; stop now so we don't double-print + break + end + end end + From bfc78186f5eed719630a42ec24c11aa2dc1aea07 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 30 Jan 2014 07:59:45 -0800 Subject: [PATCH 045/145] Correctly initialize search_field_shown to avoid phantom search field after the prompt --- pager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pager.cpp b/pager.cpp index d7025bc87..e9d23aa78 100644 --- a/pager.cpp +++ b/pager.cpp @@ -698,7 +698,7 @@ void pager_t::update_rendering(page_rendering_t *rendering) const } } -pager_t::pager_t() : available_term_width(0), available_term_height(0), selected_completion_idx(PAGER_SELECTION_NONE), suggested_row_start(0), fully_disclosed(false) +pager_t::pager_t() : available_term_width(0), available_term_height(0), selected_completion_idx(PAGER_SELECTION_NONE), suggested_row_start(0), fully_disclosed(false), search_field_shown(false) { } From a1b43b7a09b223e9add2b3c6aa6e8e46e8bff0e5 Mon Sep 17 00:00:00 2001 From: Siteshwar Vashisht Date: Thu, 30 Jan 2014 23:53:49 +0530 Subject: [PATCH 046/145] Fix for opening bindings tab as initial tab 'fish_config bindings' command should open bindings tab as initially active tab --- share/tools/web_config/webconfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/tools/web_config/webconfig.py b/share/tools/web_config/webconfig.py index 23b89acfd..52d9990bc 100755 --- a/share/tools/web_config/webconfig.py +++ b/share/tools/web_config/webconfig.py @@ -830,7 +830,7 @@ if PORT > 9000: # Just look at the first letter initial_tab = '' if len(sys.argv) > 1: - for tab in ['functions', 'prompt', 'colors', 'variables', 'history']: + for tab in ['functions', 'prompt', 'colors', 'variables', 'history', 'bindings']: if tab.startswith(sys.argv[1]): initial_tab = '#' + tab break From 27b6fe682db3018f3ccbaf6f6f25b4ef81869316 Mon Sep 17 00:00:00 2001 From: David Adam Date: Sun, 2 Feb 2014 21:39:17 +0800 Subject: [PATCH 047/145] Squashed commit of the following: commit d81ae2665fb7ff5123d8472e1d40d7d57fb4b291 Author: Max Gonzih Date: Sun Feb 2 16:22:18 2014 +0300 Check for command-not-found command on suse commit 004b794c82d79bc9463cdb52784b9b5ea49f1c76 Author: Max Gonzih Date: Sun Feb 2 14:04:41 2014 +0300 Fix cnf handler for Suse and Fedora fixes #1208 --- share/functions/__fish_config_interactive.fish | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish index b9afedd4a..9ff7edc27 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -237,8 +237,20 @@ function __fish_config_interactive -d "Initializations that should be performed # Remove fish_command_not_found_setup so we only execute this once functions --erase __fish_command_not_found_setup - # First check in /usr/lib, this is where modern Ubuntus place this command - if test -f /usr/lib/command-not-found + # First check if we are on OpenSUSE since SUSE's handler has no options + # and expects first argument to be a command and second database + # also check if there is command-not-found command. + if begin; test -f /etc/SuSE-release; and type -p command-not-found > /dev/null 2> /dev/null; end + function __fish_command_not_found_handler --on-event fish_command_not_found + /usr/bin/command-not-found $argv + end + # Check for Fedora's handler + else if test -f /usr/libexec/pk-command-not-found + function __fish_command_not_found_handler --on-event fish_command_not_found + /usr/libexec/pk-command-not-found -- $argv + end + # Check in /usr/lib, this is where modern Ubuntus place this command + else if test -f /usr/lib/command-not-found function __fish_command_not_found_handler --on-event fish_command_not_found /usr/lib/command-not-found -- $argv end From c168e6f87043281a371b135b3ff753ebb12fee45 Mon Sep 17 00:00:00 2001 From: David Adam Date: Sun, 2 Feb 2014 21:34:40 +0800 Subject: [PATCH 048/145] Documented Alt-Right to accept a single word of an autosuggestion See https://github.com/fish-shell/fish-shell/issues/1262 --- doc_src/index.hdr.in | 7 ++++--- doc_src/tutorial.hdr | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in index 09cdeccca..69a985b3b 100644 --- a/doc_src/index.hdr.in +++ b/doc_src/index.hdr.in @@ -387,8 +387,9 @@ cursor, in a muted gray color (which can be changed with the fish_color_autosuggestion variable). To accept the autosuggestion (replacing the command line contents), -hit right arrow or Control-F. If the autosuggestion is not what you want, -just ignore it: it won't execute unless you accept it. +press right arrow or Control-F. To accept the first suggested word, press +Alt-Right. If the autosuggestion is not what you want, just ignore it: it won't +execute unless you accept it. Autosuggestions are a powerful way to quickly summon frequently entered commands, by typing the first few characters. They are also an efficient technique for navigating @@ -1123,7 +1124,7 @@ Here are some of the commands available in the editor: - Home or Ctrl-A moves the cursor to the beginning of the line. - End or Ctrl-E moves to the end of line. If the cursor is already at the end of the line, and an autosuggestion is available, End or Ctrl-E accepts the autosuggestion. - Left (or Ctrl-B) and Right (or Ctrl-F) move the cursor left or right by one character. If the cursor is already at the end of the line, and an autosuggestion is available, the Right key and the Ctrl-F combination accept the suggestion. -- Alt-Left and Alt-Right move the cursor one word left or right, or moves forward/backward in the directory history if the command line is empty. +- Alt-Left and Alt-Right move the cursor one word left or right, or moves forward/backward in the directory history if the command line is empty. If the cursor is already at the end of the line, and an autosuggestion is available, Alt-Right accept the first word in the suggestion. - Up and Down search the command history for the previous/next command containing the string that was specified on the commandline before the search was started. If the commandline was empty when the search started, all commands match. See the history section for more information on history searching. - Alt-Up and Alt-Down search the command history for the previous/next token containing the token under the cursor before the search was started. If the commandline was not on a token when the search started, all tokens match. See the history section for more information on history searching. - Delete and Backspace removes one character forwards or backwards respectively. diff --git a/doc_src/tutorial.hdr b/doc_src/tutorial.hdr index 72f128f2a..f28541b82 100644 --- a/doc_src/tutorial.hdr +++ b/doc_src/tutorial.hdr @@ -349,7 +349,7 @@ And history too. Type a command once, and you can re-summon it by just typing a > rsync -avze ssh . myname@somelonghost.com:/some/long/path/doo/dee/doo/dee/doo -To accept the autosuggestion, hit right arrow or Control-F. If the autosuggestion is not what you want, just ignore it. +To accept the autosuggestion, hit right arrow or Control-F. To accept a single word of the autosuggestion, hit Alt+right arrow. If the autosuggestion is not what you want, just ignore it.

Tab Completions

From bac3b39227ce327d1747e86ee249f8f131e5d4bb Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 3 Feb 2014 14:13:42 -0800 Subject: [PATCH 049/145] Highlight the entire variable name, not just the dollar sign. Fixes #1201 --- fish_tests.cpp | 16 +++++++++- highlight.cpp | 66 +++++++++++++++++++++++++++----------- parse_execution.cpp | 2 +- parse_util.cpp | 77 ++++++++++++++++++++++++++++----------------- parse_util.h | 6 ++++ 5 files changed, 119 insertions(+), 48 deletions(-) diff --git a/fish_tests.cpp b/fish_tests.cpp index 6082f0928..13e9d2fa7 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -2708,9 +2708,23 @@ static void test_highlighting(void) {L"'single_quote", highlight_spec_error}, {NULL, -1} }; + + const highlight_component_t components11[] = + { + {L"echo", highlight_spec_command}, + {L"$foo", highlight_spec_operator}, + {L"\"", highlight_spec_quote}, + {L"$bar", highlight_spec_operator}, + {L"\"", highlight_spec_quote}, + {L"$baz[", highlight_spec_operator}, + {L"1 2..3", highlight_spec_param}, + {L"]", highlight_spec_operator}, + {NULL, -1} + }; - const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9, components10}; + + const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9, components10, components11}; for (size_t which = 0; which < sizeof tests / sizeof *tests; which++) { const highlight_component_t *components = tests[which]; diff --git a/highlight.cpp b/highlight.cpp index 8601ced9b..4fe3fbbbb 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -46,7 +46,7 @@ static void highlight_universal_internal(const wcstring &buff, std::vector &color, size_t pos); -/** The environment variables used to specify the color of different tokens. This matchest the order in highlight_spec_t */ +/** The environment variables used to specify the color of different tokens. This matches the order in highlight_spec_t */ static const wchar_t * const highlight_var[] = { L"fish_color_normal", @@ -1393,7 +1393,51 @@ void highlight_shell_classic(const wcstring &buff, std::vector } } -/* This function is a disaster badly in need of refactoring. */ +/* Highlights the variable starting with 'in', setting colors within the 'colors' array. Returns the number of characters consumed. */ +static size_t color_variable(const wchar_t *in, size_t in_len, std::vector::iterator colors) +{ + assert(in_len > 0); + assert(in[0] == L'$'); + + // Handle an initial run of $s. + size_t idx = 0; + while (in[idx] == '$') + { + // Our color depends on the next char + wchar_t next = in[idx + 1]; + if (next == L'$' || wcsvarchr(next)) + { + colors[idx] = highlight_spec_operator; + } + else + { + colors[idx] = highlight_spec_error; + } + idx++; + } + + // Handle a sequence of variable characters + while (wcsvarchr(in[idx])) + { + colors[idx++] = highlight_spec_operator; + } + + // Handle a slice. Note that we currently don't do any validation of the slice's contents, e.g. $foo[blah] will not show an error even though it's invalid. + if (in[idx] == L'[') + { + wchar_t *slice_begin = NULL, *slice_end = NULL; + if (1 == parse_util_locate_slice(in, &slice_begin, &slice_end, false)) + { + size_t slice_begin_idx = slice_begin - in, slice_end_idx = slice_end - in; + assert(slice_end_idx > slice_begin_idx); + colors[slice_begin_idx] = highlight_spec_operator; + colors[slice_end_idx] = highlight_spec_operator; + } + } + return idx; +} + +/* This function is a disaster badly in need of refactoring. It colors an argument, without regard to command substitutions. */ static void color_argument_internal(const wcstring &buffstr, std::vector::iterator colors) { const size_t buff_len = buffstr.size(); @@ -1535,14 +1579,7 @@ static void color_argument_internal(const wcstring &buffstr, std::vectorget_backtrace(src, error_list, &backtrace_and_desc); - fprintf(stderr, "%ls", backtrace_and_desc.c_str()); + fprintf(stderr, "<%ls>", backtrace_and_desc.c_str()); } return parse_execution_errored; diff --git a/parse_util.cpp b/parse_util.cpp index 42fbb49cf..68f652489 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -144,21 +144,20 @@ size_t parse_util_get_offset(const wcstring &str, int line, long line_offset) } return off + line_offset2; - } - -int parse_util_locate_cmdsubst(const wchar_t *in, wchar_t **begin, wchar_t **end, bool allow_incomplete) +static int parse_util_locate_brackets_of_type(const wchar_t *in, wchar_t **begin, wchar_t **end, bool allow_incomplete, wchar_t open_type, wchar_t close_type) { + /* open_type is typically ( or [, and close type is the corresponding value */ wchar_t *pos; wchar_t prev=0; int syntax_error=0; int paran_count=0; - + wchar_t *paran_begin=0, *paran_end=0; - + CHECK(in, 0); - + for (pos = const_cast(in); *pos; pos++) { if (prev != '\\') @@ -177,26 +176,26 @@ int parse_util_locate_cmdsubst(const wchar_t *in, wchar_t **begin, wchar_t **end } else { - if (*pos == '(') + if (*pos == open_type) { if ((paran_count == 0)&&(paran_begin==0)) { paran_begin = pos; } - + paran_count++; } - else if (*pos == ')') + else if (*pos == close_type) { - + paran_count--; - + if ((paran_count == 0) && (paran_end == 0)) { paran_end = pos; break; } - + if (paran_count < 0) { syntax_error = 1; @@ -204,38 +203,50 @@ int parse_util_locate_cmdsubst(const wchar_t *in, wchar_t **begin, wchar_t **end } } } - + } prev = *pos; } - + syntax_error |= (paran_count < 0); syntax_error |= ((paran_count>0)&&(!allow_incomplete)); - + if (syntax_error) { return -1; } - + if (paran_begin == 0) { return 0; } - + if (begin) { *begin = paran_begin; } - + if (end) { *end = paran_count?(wchar_t *)in+wcslen(in):paran_end; } - + return 1; } -int parse_util_locate_cmdsubst_range(const wcstring &str, size_t *inout_cursor_offset, wcstring *out_contents, size_t *out_start, size_t *out_end, bool accept_incomplete) + +int parse_util_locate_cmdsubst(const wchar_t *in, wchar_t **begin, wchar_t **end, bool accept_incomplete) +{ + return parse_util_locate_brackets_of_type(in, begin, end, accept_incomplete, L'(', L')'); +} + +int parse_util_locate_slice(const wchar_t *in, wchar_t **begin, wchar_t **end, bool accept_incomplete) +{ + return parse_util_locate_brackets_of_type(in, begin, end, accept_incomplete, L'[', L']'); +} + + +static int parse_util_locate_brackets_range(const wcstring &str, size_t *inout_cursor_offset, wcstring *out_contents, size_t *out_start, size_t *out_end, bool accept_incomplete, wchar_t open_type, wchar_t close_type) { /* Clear the return values */ out_contents->clear(); @@ -249,21 +260,21 @@ int parse_util_locate_cmdsubst_range(const wcstring &str, size_t *inout_cursor_o /* Defer to the wonky version */ const wchar_t * const buff = str.c_str(); const wchar_t * const valid_range_start = buff + *inout_cursor_offset, *valid_range_end = buff + str.size(); - wchar_t *cmdsub_begin = NULL, *cmdsub_end = NULL; - int ret = parse_util_locate_cmdsubst(valid_range_start, &cmdsub_begin, &cmdsub_end, accept_incomplete); + wchar_t *bracket_range_begin = NULL, *bracket_range_end = NULL; + int ret = parse_util_locate_brackets_of_type(valid_range_start, &bracket_range_begin, &bracket_range_end, accept_incomplete, open_type, close_type); if (ret > 0) { /* The command substitutions must not be NULL and must be in the valid pointer range, and the end must be bigger than the beginning */ - assert(cmdsub_begin != NULL && cmdsub_begin >= valid_range_start && cmdsub_begin <= valid_range_end); - assert(cmdsub_end != NULL && cmdsub_end > cmdsub_begin && cmdsub_end >= valid_range_start && cmdsub_end <= valid_range_end); + assert(bracket_range_begin != NULL && bracket_range_begin >= valid_range_start && bracket_range_begin <= valid_range_end); + assert(bracket_range_end != NULL && bracket_range_end > bracket_range_begin && bracket_range_end >= valid_range_start && bracket_range_end <= valid_range_end); /* Assign the substring to the out_contents */ - const wchar_t *interior_begin = cmdsub_begin + 1; - out_contents->assign(interior_begin, cmdsub_end - interior_begin); + const wchar_t *interior_begin = bracket_range_begin + 1; + out_contents->assign(interior_begin, bracket_range_end - interior_begin); /* Return the start and end */ - *out_start = cmdsub_begin - buff; - *out_end = cmdsub_end - buff; + *out_start = bracket_range_begin - buff; + *out_end = bracket_range_end - buff; /* Update the inout_cursor_offset. Note this may cause it to exceed str.size(), though overflow is not likely */ *inout_cursor_offset = 1 + *out_end; @@ -271,6 +282,16 @@ int parse_util_locate_cmdsubst_range(const wcstring &str, size_t *inout_cursor_o return ret; } +int parse_util_locate_cmdsubst_range(const wcstring &str, size_t *inout_cursor_offset, wcstring *out_contents, size_t *out_start, size_t *out_end, bool accept_incomplete) +{ + return parse_util_locate_brackets_range(str, inout_cursor_offset, out_contents, out_start, out_end, accept_incomplete, L'(', L')'); +} + +int parse_util_locate_slice_range(const wcstring &str, size_t *inout_cursor_offset, wcstring *out_contents, size_t *out_start, size_t *out_end, bool accept_incomplete) +{ + return parse_util_locate_brackets_range(str, inout_cursor_offset, out_contents, out_start, out_end, accept_incomplete, L'[', L']'); +} + void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wchar_t **a, const wchar_t **b) { const wchar_t * const cursor = buff + cursor_pos; diff --git a/parse_util.h b/parse_util.h index 921932027..c53b35153 100644 --- a/parse_util.h +++ b/parse_util.h @@ -28,6 +28,12 @@ int parse_util_locate_cmdsubst(const wchar_t *in, wchar_t **end, bool accept_incomplete); +/** Same as parse_util_locate_cmdsubst, but handles square brackets [ ] */ +int parse_util_locate_slice(const wchar_t *in, + wchar_t **begin, + wchar_t **end, + bool accept_incomplete); + /** Alternative API. Iterate over command substitutions. From 7d345018af99dcb02ed7a347e0ed9adf3d9bffc8 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 3 Feb 2014 16:46:01 -0800 Subject: [PATCH 050/145] Redirect stderr of initial call to __fish_reload_key_bindings. Fixes ##1155 --- share/functions/__fish_config_interactive.fish | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish index 9ff7edc27..3d7b0d371 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -214,8 +214,8 @@ function __fish_config_interactive -d "Initializations that should be performed end end - # Load key bindings - __fish_reload_key_bindings + # Load key bindings. Redirect stderr per #1155 + __fish_reload_key_bindings ^ /dev/null # Repaint screen when window changes size function __fish_winch_handler --on-signal winch From 699d78bcfe99f64dea473d91c901c833dc02d936 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 4 Feb 2014 11:28:29 -0800 Subject: [PATCH 051/145] Make the test harness output file diffs on failure --- tests/test.fish | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test.fish b/tests/test.fish index 2b796ef8d..7573b4001 100755 --- a/tests/test.fish +++ b/tests/test.fish @@ -60,13 +60,15 @@ for i in *.in if diff tmp.out $template_out >/dev/null else set res fail - echo Output differs for file $i + echo Output differs for file $i. Diff follows: + diff tmp.out $template_out end if diff tmp.err $template_err >/dev/null else set res fail - echo Error output differs for file $i + echo Error output differs for file $i. Diff follows: + diff tmp.err $template_err end if test (cat tmp.status) = (cat $template_status) From 7e769252e7060dbe78e97d5cece69a919424d81d Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 4 Feb 2014 11:55:56 -0800 Subject: [PATCH 052/145] Make builtin_complete output escaped completions. Fixes #1127 --- builtin_complete.cpp | 123 +++++++++++++------------------------------ 1 file changed, 37 insertions(+), 86 deletions(-) diff --git a/builtin_complete.cpp b/builtin_complete.cpp index 4eeec8be4..6e395f946 100644 --- a/builtin_complete.cpp +++ b/builtin_complete.cpp @@ -312,75 +312,24 @@ static int builtin_complete(parser_t &parser, wchar_t **argv) static const struct woption long_options[] = { - { - L"exclusive", no_argument, 0, 'x' - } - , - { - L"no-files", no_argument, 0, 'f' - } - , - { - L"require-parameter", no_argument, 0, 'r' - } - , - { - L"path", required_argument, 0, 'p' - } - , - { - L"command", required_argument, 0, 'c' - } - , - { - L"short-option", required_argument, 0, 's' - } - , - { - L"long-option", required_argument, 0, 'l' - } - , - { - L"old-option", required_argument, 0, 'o' - } - , - { - L"description", required_argument, 0, 'd' - } - , - { - L"arguments", required_argument, 0, 'a' - } - , - { - L"erase", no_argument, 0, 'e' - } - , - { - L"unauthoritative", no_argument, 0, 'u' - } - , - { - L"authoritative", no_argument, 0, 'A' - } - , - { - L"condition", required_argument, 0, 'n' - } - , - { - L"do-complete", optional_argument, 0, 'C' - } - , - { - L"help", no_argument, 0, 'h' - } - , - { - 0, 0, 0, 0 - } - } - ; + { L"exclusive", no_argument, 0, 'x' }, + { L"no-files", no_argument, 0, 'f' }, + { L"require-parameter", no_argument, 0, 'r' }, + { L"path", required_argument, 0, 'p' }, + { L"command", required_argument, 0, 'c' }, + { L"short-option", required_argument, 0, 's' }, + { L"long-option", required_argument, 0, 'l' }, + { L"old-option", required_argument, 0, 'o' }, + { L"description", required_argument, 0, 'd' }, + { L"arguments", required_argument, 0, 'a' }, + { L"erase", no_argument, 0, 'e' }, + { L"unauthoritative", no_argument, 0, 'u' }, + { L"authoritative", no_argument, 0, 'A' }, + { L"condition", required_argument, 0, 'n' }, + { L"do-complete", optional_argument, 0, 'C' }, + { L"help", no_argument, 0, 'h' }, + { 0, 0, 0, 0 } + }; int opt_index = 0; @@ -553,27 +502,29 @@ static int builtin_complete(parser_t &parser, wchar_t **argv) for (size_t i=0; i< comp.size() ; i++) { const completion_t &next = comp.at(i); - - const wchar_t *prepend; - - if (next.flags & COMPLETE_REPLACES_TOKEN) + + /* Make a fake commandline, and then apply the completion to it. */ + const wcstring faux_cmdline = token; + size_t tmp_cursor = faux_cmdline.size(); + wcstring faux_cmdline_with_completion = completion_apply_to_command_line(next.completion, next.flags, faux_cmdline, &tmp_cursor, false); + + /* completion_apply_to_command_line will append a space unless COMPLETE_NO_SPACE is set. We don't want to set COMPLETE_NO_SPACE because that won't close quotes. What we want is to close the quote, but not append the space. So we just look for the space and clear it. */ + if (! (next.flags & COMPLETE_NO_SPACE) && string_suffixes_string(L" ", faux_cmdline_with_completion)) { - prepend = L""; + faux_cmdline_with_completion.resize(faux_cmdline_with_completion.size() - 1); } - else + + /* The input data is meant to be something like you would have on the command line, e.g. includes backslashes. The output should be raw, i.e. unescaped. So we need to unescape the command line. See #1127 */ + unescape_string_in_place(&faux_cmdline_with_completion, UNESCAPE_DEFAULT); + stdout_buffer.append(faux_cmdline_with_completion); + + /* Append any description */ + if (! next.description.empty()) { - prepend = token; - } - - - if (!(next.description).empty()) - { - append_format(stdout_buffer, L"%ls%ls\t%ls\n", prepend, next.completion.c_str(), next.description.c_str()); - } - else - { - append_format(stdout_buffer, L"%ls%ls\n", prepend, next.completion.c_str()); + stdout_buffer.push_back(L'\t'); + stdout_buffer.append(next.description); } + stdout_buffer.push_back(L'\n'); } recursion_level--; From b475325b5e1510877093a7c731cb5a52e0550289 Mon Sep 17 00:00:00 2001 From: glennj Date: Wed, 5 Feb 2014 17:26:34 +0800 Subject: [PATCH 053/145] math.fish: exit if no output (e.g. from syntax error) Closes #1175 --- share/functions/math.fish | 1 + 1 file changed, 1 insertion(+) diff --git a/share/functions/math.fish b/share/functions/math.fish index b262fd3bd..ced85aad4 100644 --- a/share/functions/math.fish +++ b/share/functions/math.fish @@ -8,6 +8,7 @@ function math --description "Perform math calculations in bc" end set -l out (echo $argv|env BC_LINE_LENGTH=0 bc) + test -z "$out"; and return 1 echo $out switch $out case 0 From e908b731abb549187a7138c85fe49fde97543a60 Mon Sep 17 00:00:00 2001 From: David Adam Date: Mon, 13 Jan 2014 16:53:26 +0800 Subject: [PATCH 054/145] .travis.yml: add https://travis-ci.org/ automatic builds --- .travis.yml | 18 ++++++++++++++++++ README.md | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..c58745304 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: cpp +compiler: + - gcc + - clang +before_install: + - sudo apt-get update +install: + - sudo apt-get install --no-install-recommends libncurses5-dev gettext doxygen +script: + - autoreconf + - ./configure + - make + - sudo make install + - make test +notifications: + irc: + channels: + - "irc.oftc.net#fish" diff --git a/README.md b/README.md index 10df81d9e..6b7464c56 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[fish](http://fishshell.com/) - the friendly interactive shell +[fish](http://fishshell.com/) - the friendly interactive shell [![Build Status](https://travis-ci.org/fish-shell/fish-shell.png?branch=travis)](https://travis-ci.org/zanchey/fish-shell) ================================================ fish is a smart and user-friendly command line shell for OS X, Linux, and the rest of the family. fish includes features like syntax highlighting, autosuggest-as-you-type, and fancy tab completions that just work, with no configuration required. From 35f230235290be2bb482acab986d7017c77ca208 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 5 Feb 2014 16:20:09 -0800 Subject: [PATCH 055/145] Pass --always to git describe to ensure we always get a version number. Hopefully fixes travis-ci. See #1287 --- build_tools/git_version_gen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_tools/git_version_gen.sh b/build_tools/git_version_gen.sh index a2c337be9..a4ce558d0 100755 --- a/build_tools/git_version_gen.sh +++ b/build_tools/git_version_gen.sh @@ -14,7 +14,7 @@ then VN=$(cat version) || VN="$DEF_VER" elif test -d .git -o -f .git && type git >/dev/null then - VN=$(git describe --dirty 2>/dev/null) + VN=$(git describe --always --dirty 2>/dev/null) else VN="$DEF_VER" fi From fd10844c2b5fe0c1efa2dc034e6c9173b5ed82cb Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 5 Feb 2014 16:20:09 -0800 Subject: [PATCH 056/145] Unbreak C++11 due to narrowing; use non-conflicting declaration FISH_COLORS instead of COLORS; remove deprecated register type. --- output.cpp | 4 ++-- parse_tree.cpp | 8 ++++++-- wgetopt.cpp | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/output.cpp b/output.cpp index 855eecdf3..1f92c32ef 100644 --- a/output.cpp +++ b/output.cpp @@ -52,7 +52,7 @@ /** Number of color names in the col array */ -#define COLORS (sizeof(col)/sizeof(wchar_t *)) +#define FISH_COLORS (sizeof(col)/sizeof(wchar_t *)) static int writeb_internal(char c); @@ -622,7 +622,7 @@ int output_color_code(const wcstring &val, bool is_background) if (! color_name.empty()) { - for (i=0; i(-1), + static_cast(-1)}; /* Terminal token */ -static const parse_token_t kTerminalToken = {parse_token_type_terminate, parse_keyword_none, false, false, -1, -1}; +static const parse_token_t kTerminalToken = {parse_token_type_terminate, +parse_keyword_none, false, false, static_cast(-1), + static_cast(-1)}; static inline bool is_help_argument(const wchar_t *txt) { diff --git a/wgetopt.cpp b/wgetopt.cpp index 08ccc3b14..ef0a64592 100644 --- a/wgetopt.cpp +++ b/wgetopt.cpp @@ -270,7 +270,7 @@ exchange(wchar_t **argv) { /* Bottom segment is the short one. */ int len = middle - bottom; - register int i; + short i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) @@ -286,7 +286,7 @@ exchange(wchar_t **argv) { /* Top segment is the short one. */ int len = top - middle; - register int i; + short i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) From e2388344b29a1f5b64b1348f7e71b240b4a64670 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 5 Feb 2014 19:28:12 -0800 Subject: [PATCH 057/145] Use type int instead of type short --- wgetopt.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wgetopt.cpp b/wgetopt.cpp index ef0a64592..ecf1121e5 100644 --- a/wgetopt.cpp +++ b/wgetopt.cpp @@ -270,7 +270,7 @@ exchange(wchar_t **argv) { /* Bottom segment is the short one. */ int len = middle - bottom; - short i; + int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) @@ -286,7 +286,7 @@ exchange(wchar_t **argv) { /* Top segment is the short one. */ int len = top - middle; - short i; + int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) From 01ec55366d35e5469cd687ce1cd9221ed8ca8a9b Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 6 Feb 2014 17:09:31 +0800 Subject: [PATCH 058/145] README.md: update build status image (oops!) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b7464c56..1ceb8aea9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[fish](http://fishshell.com/) - the friendly interactive shell [![Build Status](https://travis-ci.org/fish-shell/fish-shell.png?branch=travis)](https://travis-ci.org/zanchey/fish-shell) +[fish](http://fishshell.com/) - the friendly interactive shell [![Build Status](https://travis-ci.org/fish-shell/fish-shell.png?branch=master)](https://travis-ci.org/fish-shell/fish-shell) ================================================ fish is a smart and user-friendly command line shell for OS X, Linux, and the rest of the family. fish includes features like syntax highlighting, autosuggest-as-you-type, and fancy tab completions that just work, with no configuration required. From 09054a09fa8aef98229ea132f9043ead7f7e1e0e Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 6 Feb 2014 17:51:00 +0800 Subject: [PATCH 059/145] README.md: document build and runtime dependencies better. --- README.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1ceb8aea9..6ba505030 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ fish requires gettext for translation support. xcodebuild install sudo ditto /tmp/fish.dst / -## Help, it didn't build! +## Build Dependencies (or, Help, it didn't build!) If fish reports that it could not find curses, try installing a curses development package and build again. @@ -48,6 +48,20 @@ on RedHat, CentOS, or Amazon EC2: sudo yum install ncurses-devel +To build with translation support, make sure you have a gettext package installed. + +To build the documentation, make sure you have Doxygen installed. + +## Runtime Dependencies + +fish requires a number of utilities to operate, which should be present on any Unix, GNU/Linux or OS X system. These include (but are not limited to) grep, awk, sed, which, and getopt. The bc program is also required. + +Some optional features of fish, such as the manual page completion parser and the web configuration tool, require Python. + +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. + ## Packages for Linux Instructions on how to find builds for several Linux distros are at @@ -66,12 +80,6 @@ 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). From e632d39b1f627773b29f7934d7d79545af75e47f Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 7 Feb 2014 17:56:40 -0800 Subject: [PATCH 060/145] Make if statements always return success at the end, matching other shells. Fixes #1061. --- builtin.cpp | 4 ++++ parse_execution.cpp | 6 ++++++ tests/test8.in | 4 ++++ tests/test8.out | 2 ++ 4 files changed, 16 insertions(+) diff --git a/builtin.cpp b/builtin.cpp index 81738ffb3..fb5fbeb43 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -3773,6 +3773,10 @@ static int builtin_end(parser_t &parser, wchar_t **argv) } case IF: + /* Always return success (#1061) */ + proc_set_last_status(0); + break; + case SUBST: case BEGIN: case SWITCH: diff --git a/parse_execution.cpp b/parse_execution.cpp index 68a27b4dc..d0d8336b3 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -306,6 +306,12 @@ parse_execution_result_t parse_execution_context_t::run_if_statement(const parse /* Done */ parser->pop_block(ib); + /* Issue 1061: If we executed, then always report success, instead of letting the exit status of the last command linger */ + if (result == parse_execution_success) + { + proc_set_last_status(STATUS_BUILTIN_OK); + } + return result; } diff --git a/tests/test8.in b/tests/test8.in index c3c733848..a31ad127b 100644 --- a/tests/test8.in +++ b/tests/test8.in @@ -23,3 +23,7 @@ echo (seq $n)[3..5 -2..2] echo Test more echo $test[(count $test)..1] echo $test[1..(count $test)] + +# See issue 1061 +echo "Verify that if statements swallow failure" +if false ; end ; echo $status diff --git a/tests/test8.out b/tests/test8.out index 72af9bb81..4ac134063 100644 --- a/tests/test8.out +++ b/tests/test8.out @@ -15,3 +15,5 @@ Test command substitution Test more 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 +Verify that if statements swallow failure +0 From 414530c9c2ec9f128c6a7c601a5d83a48e287a3c Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 9 Feb 2014 14:04:43 -0800 Subject: [PATCH 061/145] Partially rework profiling. Fix profiling crash with new parser. Fixes 1295 --- common.cpp | 2 +- common.h | 2 +- fish.cpp | 14 +++++-- parse_execution.cpp | 89 +++++++++++++++++++++++++++++++-------------- parse_execution.h | 9 +++-- parser.cpp | 76 ++++++++++++++++++++------------------ parser.h | 33 ++++++++--------- 7 files changed, 135 insertions(+), 90 deletions(-) diff --git a/common.cpp b/common.cpp index d20040b87..f2240b53c 100644 --- a/common.cpp +++ b/common.cpp @@ -83,7 +83,7 @@ static bool thread_assertions_configured_for_testing = false; wchar_t ellipsis_char; wchar_t omitted_newline_char; -char *profile=0; +bool g_profiling_active = false; const wchar_t *program_name; diff --git a/common.h b/common.h index 3e9be1063..33fbb0e5e 100644 --- a/common.h +++ b/common.h @@ -149,7 +149,7 @@ extern int debug_level; /** Profiling flag. True if commands should be profiled. */ -extern char *profile; +extern bool g_profiling_active; /** Name of the current program. Should be set at startup. Used by the diff --git a/fish.cpp b/fish.cpp index bf6470f8a..f1c5b898a 100644 --- a/fish.cpp +++ b/fish.cpp @@ -73,6 +73,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #define GETOPT_STRING "+hilnvc:p:d:" +/* If we are doing profiling, the filename to output to */ +static const char *s_profiling_output_filename = NULL; + static bool has_suffix(const std::string &path, const char *suffix, bool ignore_case) { size_t pathlen = path.size(), suffixlen = strlen(suffix); @@ -245,7 +248,6 @@ static int read_init(const struct config_paths_t &paths) return 1; } - /** Parse the argument list, return the index of the first non-switch arguments. @@ -346,7 +348,8 @@ static int fish_parse_opt(int argc, char **argv, std::vector *out_c case 'p': { - profile = optarg; + s_profiling_output_filename = optarg; + g_profiling_active = true; break; } @@ -521,11 +524,16 @@ int main(int argc, char **argv) restore_term_mode(); restore_term_foreground_process_group(); + + if (g_profiling_active) + { + parser.emit_profiling(s_profiling_output_filename); + } + history_destroy(); proc_destroy(); builtin_destroy(); reader_destroy(); - parser.destroy(); wutil_destroy(); event_destroy(); diff --git a/parse_execution.cpp b/parse_execution.cpp index d0d8336b3..08f222ed7 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -27,7 +27,30 @@ static bool specific_statement_type_is_redirectable_block(const parse_node_t &no } -parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p) : tree(t), src(s), parser(p), eval_level(0) +/* Get the name of a redirectable block, for profiling purposes */ +static wcstring profiling_cmd_name_for_redirectable_block(const parse_node_t &node, const parse_node_tree_t &tree, const wcstring &src) +{ + assert(specific_statement_type_is_redirectable_block(node)); + assert(node.has_source()); + + /* Get the source for the block, and cut it at the next statement terminator. */ + const size_t src_start = node.source_start; + size_t src_len = node.source_length; + + const parse_node_tree_t::parse_node_list_t statement_terminator_nodes = tree.find_nodes(node, parse_token_type_end, 1); + if (! statement_terminator_nodes.empty()) + { + const parse_node_t *term = statement_terminator_nodes.at(0); + assert(term->source_start >= src_start); + src_len = term->source_start - src_start; + } + + wcstring result = wcstring(src, src_start, src_len); + result.append(L"..."); + return result; +} + +parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level) : tree(t), src(s), parser(p), eval_level(initial_eval_level) { } @@ -1270,6 +1293,14 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t /* Increment the eval_level for the duration of this command */ scoped_push saved_eval_level(&eval_level, eval_level + 1); + /* Profiling support */ + long long start_time = 0, parse_time = 0, exec_time = 0; + profile_item_t *profile_item = this->parser->create_profile_item(); + if (profile_item != NULL) + { + start_time = get_time(); + } + /* When we encounter a block construct (e.g. while loop) in the general case, we create a "block process" that has a pointer to its source. This allows us to handle block-level redirections. However, if there are no redirections, then we can just jump into the block directly, which is significantly faster. */ if (job_is_simple_block(job_node)) { @@ -1279,31 +1310,35 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t switch (specific_statement.type) { case symbol_block_statement: - return this->run_block_statement(specific_statement); + result = this->run_block_statement(specific_statement); + break; case symbol_if_statement: - return this->run_if_statement(specific_statement); + result = this->run_if_statement(specific_statement); + break; case symbol_switch_statement: - return this->run_switch_statement(specific_statement); + result = this->run_switch_statement(specific_statement); + break; default: /* Other types should be impossible due to the specific_statement_type_is_redirectable_block check */ PARSER_DIE(); break; } - } - - /* Profiling support */ - long long start_time = 0, parse_time = 0, exec_time = 0; - const bool do_profile = profile; - profile_item_t *profile_item = NULL; - if (do_profile) - { - profile_item = new profile_item_t(); - profile_item->skipped = 1; - profile_items.push_back(profile_item); - start_time = get_time(); + + if (profile_item != NULL) + { + /* Block-types profile a little weird. They have no 'parse' time, and their command is just the block type */ + exec_time = get_time(); + profile_item->level=eval_level; + profile_item->parse = 0; + profile_item->exec=(int)(exec_time-start_time); + profile_item->cmd = profiling_cmd_name_for_redirectable_block(specific_statement, this->tree, this->src); + profile_item->skipped = result != parse_execution_success; + } + + return result; } job_t *j = new job_t(acquire_job_id(), block_io); @@ -1336,11 +1371,9 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t /* Store time it took to 'parse' the command */ - if (do_profile) + if (profile_item != NULL) { parse_time = get_time(); - profile_item->cmd = j->command(); - profile_item->skipped=parser->current_block()->skip; } if (populated_job) @@ -1370,20 +1403,22 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t } } + if (profile_item != NULL) + { + exec_time = get_time(); + profile_item->level=eval_level; + profile_item->parse = (int)(parse_time-start_time); + profile_item->exec=(int)(exec_time-parse_time); + profile_item->cmd = j ? j->command() : wcstring(); + profile_item->skipped = ! populated_job || result != parse_execution_success; + } + /* If the job was skipped, we pretend it ran anyways */ if (result == parse_execution_skipped) { result = parse_execution_success; } - if (do_profile) - { - exec_time = get_time(); - profile_item->level=eval_level; - profile_item->parse = (int)(parse_time-start_time); - profile_item->exec=(int)(exec_time-parse_time); - profile_item->skipped = ! populated_job; - } /* Clean up jobs. */ job_reap(0); diff --git a/parse_execution.h b/parse_execution.h index 89565d753..8ab5c5d6e 100644 --- a/parse_execution.h +++ b/parse_execution.h @@ -12,7 +12,6 @@ #include "proc.h" class job_t; -struct profile_item_t; struct block_t; enum parse_execution_result_t @@ -40,7 +39,6 @@ private: //parse_error_list_t errors; int eval_level; - std::vector profile_items; /* No copying allowed */ parse_execution_context_t(const parse_execution_context_t&); @@ -66,7 +64,7 @@ private: /* Command not found support */ void handle_command_not_found(const wcstring &cmd, const parse_node_t &statement_node, int err_code); - + /* Utilities */ wcstring get_source(const parse_node_t &node) const; const parse_node_t *get_child(const parse_node_t &parent, node_offset_t which, parse_token_type_t expected_type = token_type_invalid) const; @@ -103,7 +101,10 @@ private: parse_execution_result_t populate_job_from_job_node(job_t *j, const parse_node_t &job_node, const block_t *associated_block); public: - parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p); + parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level); + + /* Returns the current eval level */ + int current_eval_level() const { return eval_level; } /* Start executing at the given node offset. Returns 0 if there was no error, 1 if there was an error */ parse_execution_result_t eval_node_at_offset(node_offset_t offset, const block_t *associated_block, const io_chain_t &io); diff --git a/parser.cpp b/parser.cpp index 4badfff83..7a75911bd 100644 --- a/parser.cpp +++ b/parser.cpp @@ -568,8 +568,7 @@ void parser_t::error(int ec, size_t p, const wchar_t *str, ...) static void print_profile(const std::vector &items, FILE *out) { - size_t pos; - for (pos = 0; pos < items.size(); pos++) + for (size_t pos = 0; pos < items.size(); pos++) { const profile_item_t *me, *prev; size_t i; @@ -626,47 +625,38 @@ static void print_profile(const std::vector &items, } } - delete me; } } } -void parser_t::destroy() +void parser_t::emit_profiling(const char *path) const { - if (profile) + /* Save profiling information. OK to not use CLO_EXEC here because this is called while fish is dying (and hence will not fork) */ + FILE *f = fopen(path, "w"); + if (!f) { - /* Save profiling information. OK to not use CLO_EXEC here because this is called while fish is dying (and hence will not fork) */ - FILE *f = fopen(profile, "w"); - if (!f) + debug(1, + _(L"Could not write profiling information to file '%s'"), + path); + } + else + { + if (fwprintf(f, + _(L"Time\tSum\tCommand\n"), + profile_items.size()) < 0) { - debug(1, - _(L"Could not write profiling information to file '%s'"), - profile); + wperror(L"fwprintf"); } else { - if (fwprintf(f, - _(L"Time\tSum\tCommand\n"), - profile_items.size()) < 0) - { - wperror(L"fwprintf"); - } - else - { - print_profile(profile_items, f); - } + print_profile(profile_items, f); + } - if (fclose(f)) - { - wperror(L"fclose"); - } + if (fclose(f)) + { + wperror(L"fclose"); } } - - lineinfo.clear(); - - forbidden_function.clear(); - } /** @@ -1225,6 +1215,17 @@ job_t *parser_t::job_get_from_pid(int pid) return 0; } +profile_item_t *parser_t::create_profile_item() +{ + profile_item_t *result = NULL; + if (g_profiling_active) + { + result = new profile_item_t(); + profile_items.push_back(result); + } + return result; +} + /** Parse options for the specified job @@ -2329,16 +2330,14 @@ void parser_t::eval_job(tokenizer_t *tok) long long t1=0, t2=0, t3=0; - profile_item_t *profile_item = NULL; bool skip = false; int job_begin_pos; - const bool do_profile = profile; + profile_item_t *profile_item = create_profile_item(); + const bool do_profile = (profile_item != NULL); if (do_profile) { - profile_item = new profile_item_t(); profile_item->skipped = 1; - profile_items.push_back(profile_item); t1 = get_time(); } @@ -2572,8 +2571,12 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl return 1; } + + /* Determine the initial eval level. If this is the first context, it's -1; otherwise it's the eval level of the top context. This is sort of wonky because we're stitching together a global notion of eval level from these separate objects. A better approach would be some profile object that all contexts share, and that tracks the eval levels on its own. */ + int exec_eval_level = (execution_contexts.empty() ? -1 : execution_contexts.back()->current_eval_level()); + /* Append to the execution context stack */ - parse_execution_context_t *ctx = new parse_execution_context_t(tree, cmd, this); + parse_execution_context_t *ctx = new parse_execution_context_t(tree, cmd, this, exec_eval_level); execution_contexts.push_back(ctx); /* Execute the first node */ @@ -2593,7 +2596,8 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl int parser_t::eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum block_type_t block_type) { - // Paranoia. It's a little frightening that we're given only a node_idx and we interpret this in the topmost execution context's tree. What happens if these were to be interleaved? Fortunately that cannot happen. + /* Paranoia. It's a little frightening that we're given only a node_idx and we interpret this in the topmost execution context's tree. What happens if two trees were to be interleaved? Fortunately that cannot happen (yet); in the future we probably want some sort of reference counted trees. + */ parse_execution_context_t *ctx = execution_contexts.back(); assert(ctx != NULL); diff --git a/parser.h b/parser.h index 6e43c8da0..491e569f5 100644 --- a/parser.h +++ b/parser.h @@ -247,25 +247,19 @@ enum parser_type_t struct profile_item_t { - /** - Time spent executing the specified command, including parse time for nested blocks. - */ + /** Time spent executing the specified command, including parse time for nested blocks. */ int exec; - /** - Time spent parsing the specified command, including execution time for command substitutions. - */ + + /** Time spent parsing the specified command, including execution time for command substitutions. */ int parse; - /** - The block level of the specified command. nested blocks and command substitutions both increase the block level. - */ + + /** The block level of the specified command. nested blocks and command substitutions both increase the block level. */ size_t level; - /** - If the execution of this command was skipped. - */ - int skipped; - /** - The command string. - */ + + /** If the execution of this command was skipped. */ + bool skipped; + + /** The command string. */ wcstring cmd; }; @@ -477,6 +471,9 @@ public: /** Returns the job with the given pid */ job_t *job_get_from_pid(int pid); + + /* Returns a new profile item if profiling is active. The caller should fill it in. The parser_t will clean it up. */ + profile_item_t *create_profile_item(); /** Test if the specified string can be parsed, or if more bytes need @@ -517,9 +514,9 @@ public: void init(); /** - Destroy static parser data + Output profiling data to the given filename */ - void destroy(); + void emit_profiling(const char *path) const; /** This function checks if the specified string is a help option. From 5ea7f52df237963a594138f96f5159dc9e317e26 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 9 Feb 2014 15:27:04 -0800 Subject: [PATCH 062/145] Don't complete variables when single quoted. Fixes #1023 --- complete.cpp | 74 ++++++++++++++++++++++++++++++++++++++------------ fish_tests.cpp | 9 +++++- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/complete.cpp b/complete.cpp index d38104dd5..4808c4dbd 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1712,29 +1712,67 @@ bool completer_t::complete_variable(const wcstring &str, size_t start_offset) return res; } -/** - Search the specified string for the \$ sign. If found, try to - complete as an environment variable. - - \return 0 if unable to complete, 1 otherwise -*/ bool completer_t::try_complete_variable(const wcstring &str) { - size_t i = str.size(); - while (i--) + enum {e_unquoted, e_single_quoted, e_double_quoted} mode = e_unquoted; + const size_t len = str.size(); + + /* Get the position of the dollar heading a run of valid variable characters. -1 means none. */ + size_t variable_start = -1; + + for (size_t in_pos=0; in_poscomplete_variable(str, i+1); + /* This character cannot be in a variable, reset the dollar */ + variable_start = -1; } - if (!isalnum(c) && c != L'_') + + switch (c) { - return false; + case L'\\': + in_pos++; + break; + + case L'$': + if (mode == e_unquoted || mode == e_double_quoted) + { + variable_start = in_pos; + } + break; + + case L'\'': + if (mode == e_single_quoted) + { + mode = e_unquoted; + } + else if (mode == e_unquoted) + { + mode = e_single_quoted; + } + break; + + case L'"': + if (mode == e_double_quoted) + { + mode = e_unquoted; + } + else if (mode == e_unquoted) + { + mode = e_double_quoted; + } + break; } } - return false; + + /* Now complete if we have a variable start that's also not the last character */ + bool result = false; + if (variable_start != static_cast(-1) && variable_start + 1 < len) + { + result = this->complete_variable(str, variable_start + 1); + } + return result; } /** @@ -1822,7 +1860,7 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps bool use_function = 1; bool use_builtin = 1; - // debug( 1, L"Complete '%ls'", cmd ); + //debug( 1, L"Complete '%ls'", cmd.c_str() ); const wchar_t *cmd_cstr = cmd.c_str(); const wchar_t *tok_begin = NULL, *prev_begin = NULL, *prev_end = NULL; @@ -1832,9 +1870,11 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps If we are completing a variable name or a tilde expansion user name, we do that and return. No need for any other completions. */ - const wcstring current_token = tok_begin; + /* Get the quote type of the current token */ + + if (!done) { done = completer.try_complete_variable(current_token) || completer.try_complete_user(current_token); diff --git a/fish_tests.cpp b/fish_tests.cpp index 13e9d2fa7..984c740be 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -1535,7 +1535,14 @@ static void test_complete(void) complete(L"foobarbaz ", completions, COMPLETION_REQUEST_DEFAULT); do_test(completions.size() == 1); do_test(completions.at(0).completion == L"qux"); - + + /* Don't complete variable names in single quotes (#1023) */ + completions.clear(); + complete(L"echo '$Foo", completions, COMPLETION_REQUEST_DEFAULT); + do_test(completions.empty()); + completions.clear(); + complete(L"echo \\$Foo", completions, COMPLETION_REQUEST_DEFAULT); + do_test(completions.empty()); complete_set_variable_names(NULL); } From 9b9ee338c123527d5f1f244e54876fe977bbeb1a Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 9 Feb 2014 15:33:34 -0800 Subject: [PATCH 063/145] Fix for miscoloring quote following variable name --- highlight.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/highlight.cpp b/highlight.cpp index 4fe3fbbbb..0683f7280 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -1580,6 +1580,8 @@ static void color_argument_internal(const wcstring &buffstr, std::vector Date: Sun, 9 Feb 2014 20:19:04 -0800 Subject: [PATCH 064/145] Fix for Python out-of-range exception when accessing Bindings tab --- share/tools/web_config/webconfig.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/share/tools/web_config/webconfig.py b/share/tools/web_config/webconfig.py index 52d9990bc..3eb110bb4 100755 --- a/share/tools/web_config/webconfig.py +++ b/share/tools/web_config/webconfig.py @@ -291,7 +291,8 @@ class BindingParser: def get_char(self): """ Gets next character from buffer """ - + if self.index >= len(self.buffer): + return '\0' c = self.buffer[self.index] self.index += 1 return c From bbd784a2e832e340e8f81044de77d67e1c1ae9c0 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 9 Feb 2014 21:21:59 -0800 Subject: [PATCH 065/145] Clean up old syntax highlighting code now that the new parser seems to work --- highlight.cpp | 810 +------------------------------------------------- 1 file changed, 1 insertion(+), 809 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index 0683f7280..dc9da1560 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -409,296 +409,6 @@ rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background) } -/** - Highlight operators (such as $, ~, %, as well as escaped characters. -*/ -static void highlight_parameter(const wcstring &buffstr, std::vector &colors, wcstring_list_t *error) -{ - const wchar_t * const buff = buffstr.c_str(); - enum {e_unquoted, e_single_quoted, e_double_quoted} mode = e_unquoted; - size_t in_pos, len = buffstr.size(); - int bracket_count=0; - int normal_status = colors.at(0); - - for (in_pos=0; in_pos^ \\#;|&", buff[in_pos])) - { - colors.at(start_pos)= highlight_spec_escape; - colors.at(in_pos+1)=normal_status; - } - else if (wcschr(L"c", buff[in_pos])) - { - colors.at(start_pos) = highlight_spec_escape; - if (in_pos+2 < colors.size()) - colors.at(in_pos+2)=normal_status; - } - else if (wcschr(L"uUxX01234567", buff[in_pos])) - { - int i; - long long res=0; - int chars=2; - int base=16; - - wchar_t max_val = ASCII_MAX; - - switch (buff[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': - { - max_val = BYTE_MAX; - break; - } - - default: - { - base=8; - chars=3; - in_pos--; - break; - } - } - - for (i=0; i &color, const size_t pos, wcstring_list_t *error, const wcstring &working_directory, const env_vars_snapshot_t &vars) -{ - ASSERT_IS_BACKGROUND_THREAD(); - - wcstring cmd; - int had_cmd=0; - wcstring last_cmd; - - int accept_switches = 1; - - int use_function = 1; - int use_command = 1; - int use_builtin = 1; - - CHECK(buff,); - - if (buff[0] == L'\0') - return; - - std::fill(color.begin(), color.end(), (highlight_spec_t)highlight_spec_invalid); - - tokenizer_t tok(buff, TOK_SHOW_COMMENTS | TOK_SQUASH_ERRORS); - for (; tok_has_next(&tok); tok_next(&tok)) - { - int last_type = tok_last_type(&tok); - - switch (last_type) - { - case TOK_STRING: - { - if (had_cmd) - { - - /*Parameter */ - const wchar_t *param = tok_last(&tok); - if (param[0] == L'-') - { - if (wcscmp(param, L"--") == 0) - { - accept_switches = 0; - color.at(tok_get_pos(&tok)) = highlight_spec_param; - } - else if (accept_switches) - { - if (complete_is_valid_option(last_cmd, param, error, false /* no autoload */)) - color.at(tok_get_pos(&tok)) = highlight_spec_param; - else - color.at(tok_get_pos(&tok)) = highlight_spec_error; - } - else - { - color.at(tok_get_pos(&tok)) = highlight_spec_param; - } - } - else - { - color.at(tok_get_pos(&tok)) = highlight_spec_param; - } - - if (cmd == L"cd") - { - wcstring dir = tok_last(&tok); - if (expand_one(dir, EXPAND_SKIP_CMDSUBST)) - { - int is_help = string_prefixes_string(dir, L"--help") || string_prefixes_string(dir, L"-h"); - if (!is_help && ! is_potential_cd_path(dir, working_directory, PATH_EXPAND_TILDE, NULL)) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - } - } - } - - /* Highlight the parameter. highlight_parameter wants to write one more color than we have characters (hysterical raisins) so allocate one more in the vector. But don't copy it back. */ - const wcstring param_str = param; - size_t tok_pos = tok_get_pos(&tok); - - std::vector::const_iterator where = color.begin() + tok_pos; - std::vector subcolors(where, where + param_str.size()); - subcolors.push_back(highlight_spec_invalid); - highlight_parameter(param_str, subcolors, error); - - /* Copy the subcolors back into our colors array */ - std::copy(subcolors.begin(), subcolors.begin() + param_str.size(), color.begin() + tok_pos); - } - else - { - /* - Command. First check that the command actually exists. - */ - cmd = tok_last(&tok); - bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS); - if (! expanded || has_expand_reserved(cmd)) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - } - else - { - bool is_cmd = false; - int is_subcommand = 0; - int mark = tok_get_pos(&tok); - color.at(tok_get_pos(&tok)) = use_builtin ? highlight_spec_command : highlight_spec_error; - - if (parser_keywords_is_subcommand(cmd)) - { - - int sw; - - if (cmd == L"builtin") - { - use_function = 0; - use_command = 0; - use_builtin = 1; - } - else if (cmd == L"command" || cmd == L"exec") - { - use_command = 1; - use_function = 0; - use_builtin = 0; - } - - tok_next(&tok); - - sw = parser_keywords_is_switch(tok_last(&tok)); - - if (!parser_keywords_is_block(cmd) && - sw == ARG_SWITCH) - { - /* - The 'builtin' and 'command' builtins - are normally followed by another - command, but if they are invoked - with a switch, they aren't. - - */ - use_command = 1; - use_function = 1; - use_builtin = 2; - } - else - { - if (sw == ARG_SKIP) - { - color.at(tok_get_pos(&tok)) = highlight_spec_param; - mark = tok_get_pos(&tok); - } - - is_subcommand = 1; - } - tok_set_pos(&tok, mark); - } - - if (!is_subcommand) - { - /* - OK, this is a command, it has been - successfully expanded and everything - looks ok. Lets check if the command - exists. - */ - - /* - First check if it is a builtin or - function, since we don't have to stat - any files for that - */ - if (! is_cmd && use_builtin) - is_cmd = builtin_exists(cmd); - - if (! is_cmd && use_function) - is_cmd = function_exists_no_autoload(cmd, vars); - - if (! is_cmd) - is_cmd = expand_abbreviation(cmd, NULL); - - /* - Moving on to expensive tests - */ - - /* - Check if this is a regular command - */ - if (! is_cmd && use_command) - { - is_cmd = path_get_path(cmd, NULL, vars); - } - - /* Maybe it is a path for a implicit cd command. */ - if (! is_cmd) - { - if (use_builtin || (use_function && function_exists_no_autoload(L"cd", vars))) - is_cmd = path_can_be_implicit_cd(cmd, NULL, working_directory.c_str(), vars); - } - - if (is_cmd) - { - color.at(tok_get_pos(&tok)) = highlight_spec_command; - } - else - { - if (error) - { - error->push_back(format_string(L"Unknown command \'%ls\'", cmd.c_str())); - } - color.at(tok_get_pos(&tok)) = (highlight_spec_error); - } - had_cmd = 1; - } - - if (had_cmd) - { - last_cmd = tok_last(&tok); - } - } - - } - break; - } - - case TOK_REDIRECT_NOCLOB: - case TOK_REDIRECT_OUT: - case TOK_REDIRECT_IN: - case TOK_REDIRECT_APPEND: - case TOK_REDIRECT_FD: - { - if (!had_cmd) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - if (error) - error->push_back(L"Redirection without a command"); - break; - } - - wcstring target_str; - const wchar_t *target=NULL; - - color.at(tok_get_pos(&tok)) = highlight_spec_redirection; - tok_next(&tok); - - /* - Check that we are redirecting into a file - */ - - switch (tok_last_type(&tok)) - { - case TOK_STRING: - { - target_str = tok_last(&tok); - if (expand_one(target_str, EXPAND_SKIP_CMDSUBST)) - { - target = target_str.c_str(); - } - /* - Redirect filename may contain a cmdsubst. - If so, it will be ignored/not flagged. - */ - } - break; - default: - { - size_t pos = tok_get_pos(&tok); - if (pos < color.size()) - { - color.at(pos) = highlight_spec_error; - } - if (error) - error->push_back(L"Invalid redirection"); - } - - } - - if (target != 0) - { - wcstring dir = target; - size_t slash_idx = dir.find_last_of(L'/'); - struct stat buff; - /* - If file is in directory other than '.', check - that the directory exists. - */ - if (slash_idx != wcstring::npos) - { - dir.resize(slash_idx); - if (wstat(dir, &buff) == -1) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - if (error) - error->push_back(format_string(L"Directory \'%ls\' does not exist", dir.c_str())); - - } - } - - /* - If the file is read from or appended to, check - if it exists. - */ - if (last_type == TOK_REDIRECT_IN || - last_type == TOK_REDIRECT_APPEND) - { - if (wstat(target, &buff) == -1) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - if (error) - error->push_back(format_string(L"File \'%ls\' does not exist", target)); - } - } - if (last_type == TOK_REDIRECT_NOCLOB) - { - if (wstat(target, &buff) != -1) - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - if (error) - error->push_back(format_string(L"File \'%ls\' exists", target)); - } - } - } - break; - } - - case TOK_PIPE: - case TOK_BACKGROUND: - { - if (had_cmd) - { - color.at(tok_get_pos(&tok)) = highlight_spec_statement_terminator; - had_cmd = 0; - use_command = 1; - use_function = 1; - use_builtin = 1; - accept_switches = 1; - } - else - { - color.at(tok_get_pos(&tok)) = highlight_spec_error; - if (error) - error->push_back(L"No job to put in background"); - } - - break; - } - - case TOK_END: - { - color.at(tok_get_pos(&tok)) = highlight_spec_statement_terminator; - had_cmd = 0; - use_command = 1; - use_function = 1; - use_builtin = 1; - accept_switches = 1; - break; - } - - case TOK_COMMENT: - { - color.at(tok_get_pos(&tok)) = highlight_spec_comment; - break; - } - - case TOK_ERROR: - default: - { - /* - If the tokenizer reports an error, highlight it as such. - */ - if (error) - error->push_back(tok_last(&tok)); - color.at(tok_get_pos(&tok)) = highlight_spec_error; - break; - } - } - } -} - -void highlight_shell(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars) -{ - if (1) - { - highlight_shell_new_parser(buff, color, pos, error, vars); - } - else - { - highlight_shell_classic(buff, color, pos, error, vars); - } -} - -// PCA This function does I/O, (calls is_potential_path, path_get_path, maybe others) and so ought to only run on a background thread -void highlight_shell_classic(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars) -{ - ASSERT_IS_BACKGROUND_THREAD(); - - const size_t length = buff.size(); - assert(buff.size() == color.size()); - - - if (length == 0) - return; - - std::fill(color.begin(), color.end(), (highlight_spec_t)highlight_spec_invalid); - - /* Do something sucky and get the current working directory on this background thread. This should really be passed in. */ - const wcstring working_directory = env_get_pwd_slash(); - - /* Tokenize the string */ - tokenize(buff.c_str(), color, pos, error, working_directory, vars); - - /* Locate and syntax highlight cmdsubsts recursively */ - - wchar_t * const subbuff = wcsdup(buff.c_str()); - wchar_t * subpos = subbuff; - bool done = false; - - while (1) - { - wchar_t *begin, *end; - - if (parse_util_locate_cmdsubst(subpos, &begin, &end, true) <= 0) - { - break; - } - - /* Note: This *end = 0 writes into subbuff! */ - if (!*end) - done = true; - else - *end = 0; - - //our subcolors start at color + (begin-subbuff)+1 - size_t start = begin - subbuff + 1, len = wcslen(begin + 1); - std::vector subcolors(len, highlight_spec_invalid); - - highlight_shell(begin+1, subcolors, -1, error, vars); - - // insert subcolors - std::copy(subcolors.begin(), subcolors.end(), color.begin() + start); - - // highlight the end of the subcommand - assert(end >= subbuff); - if ((size_t)(end - subbuff) < length) - { - color.at(end-subbuff)=highlight_spec_operator; - } - - if (done) - break; - - subpos = end+1; - } - free(subbuff); - - /* - The highlighting code only changes the first element when the - color changes. This fills in the rest. - */ - int last_val=0; - for (size_t i=0; i < buff.size(); i++) - { - highlight_spec_t ¤t_val = color.at(i); - if (current_val != highlight_spec_invalid) - { - last_val = current_val; - } - else - { - current_val = last_val; //note - this writes into the vector - } - } - - /* - Color potentially valid paths in a special path color if they - are the current token. - For reasons that I don't yet understand, it's required that pos be allowed to be length (e.g. when backspacing). - */ - if (pos <= length) - { - - const wchar_t *cbuff = buff.c_str(); - const wchar_t *tok_begin, *tok_end; - parse_util_token_extent(cbuff, pos, &tok_begin, &tok_end, 0, 0); - if (tok_begin && tok_end) - { - wcstring token(tok_begin, tok_end-tok_begin); - 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++) - { - // Don't color highlight_spec_error because it looks dorky. For example, trying to cd into a non-directory would show an underline and also red. - if (highlight_get_primary(color.at(i)) != highlight_spec_error) - { - color.at(i) |= highlight_modifier_valid_path; - } - } - } - } - } - } - - - highlight_universal_internal(buff, color, pos); - - /* - Spaces should not be highlighted at all, since it makes cursor look funky in some terminals - */ - for (size_t i=0; i < buff.size(); i++) - { - if (iswspace(buff.at(i))) - { - color.at(i)=0; - } - } -} - /* Highlights the variable starting with 'in', setting colors within the 'colors' array. Returns the number of characters consumed. */ static size_t color_variable(const wchar_t *in, size_t in_len, std::vector::iterator colors) { @@ -2227,7 +1419,7 @@ const highlighter_t::color_array_t & highlighter_t::highlight() return color_array; } -void highlight_shell_new_parser(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars) +void highlight_shell(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars) { /* Do something sucky and get the current working directory on this background thread. This should really be passed in. */ const wcstring working_directory = env_get_pwd_slash(); From 3678f134d9a45e793dc89e49dbb7f304f904f348 Mon Sep 17 00:00:00 2001 From: David Adam Date: Mon, 10 Feb 2014 17:28:47 +0800 Subject: [PATCH 066/145] document Alt-F as well for accepting part of autosuggestion Closes #1290. --- doc_src/index.hdr.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in index 69a985b3b..51bf4e43d 100644 --- a/doc_src/index.hdr.in +++ b/doc_src/index.hdr.in @@ -388,8 +388,8 @@ cursor, in a muted gray color (which can be changed with the To accept the autosuggestion (replacing the command line contents), press right arrow or Control-F. To accept the first suggested word, press -Alt-Right. If the autosuggestion is not what you want, just ignore it: it won't -execute unless you accept it. +Alt-Right or Alt-F. If the autosuggestion is not what you want, just ignore it: +it won't execute unless you accept it. Autosuggestions are a powerful way to quickly summon frequently entered commands, by typing the first few characters. They are also an efficient technique for navigating @@ -1124,7 +1124,7 @@ Here are some of the commands available in the editor: - Home or Ctrl-A moves the cursor to the beginning of the line. - End or Ctrl-E moves to the end of line. If the cursor is already at the end of the line, and an autosuggestion is available, End or Ctrl-E accepts the autosuggestion. - Left (or Ctrl-B) and Right (or Ctrl-F) move the cursor left or right by one character. If the cursor is already at the end of the line, and an autosuggestion is available, the Right key and the Ctrl-F combination accept the suggestion. -- Alt-Left and Alt-Right move the cursor one word left or right, or moves forward/backward in the directory history if the command line is empty. If the cursor is already at the end of the line, and an autosuggestion is available, Alt-Right accept the first word in the suggestion. +- Alt-Left and Alt-Right move the cursor one word left or right, or moves forward/backward in the directory history if the command line is empty. If the cursor is already at the end of the line, and an autosuggestion is available, Alt-Right (or Alt-F) accepts the first word in the suggestion. - Up and Down search the command history for the previous/next command containing the string that was specified on the commandline before the search was started. If the commandline was empty when the search started, all commands match. See the history section for more information on history searching. - Alt-Up and Alt-Down search the command history for the previous/next token containing the token under the cursor before the search was started. If the commandline was not on a token when the search started, all tokens match. See the history section for more information on history searching. - Delete and Backspace removes one character forwards or backwards respectively. From dd49399e45558b1ee494a01628b7cbfbcf0919ff Mon Sep 17 00:00:00 2001 From: David Adam Date: Tue, 11 Feb 2014 09:47:29 +0800 Subject: [PATCH 067/145] .travis.yml: reduce verbosity of IRC notifications --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index c58745304..e60be3a45 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,3 +16,7 @@ notifications: irc: channels: - "irc.oftc.net#fish" + template: + - "%{repository}#%{build_number} (%{commit} on %{branch} by %{author}): %{message} Details at %{build_url}" + use_notice: true + skip_join: true From 29ddb68da428804148a0c6f44229cf1848bebf8c Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 12 Feb 2014 01:39:06 -0800 Subject: [PATCH 068/145] Tests and fix to allow return to work correctly within if statements. Closes #1297. --- parse_execution.cpp | 6 ++++++ tests/test1.in | 9 +++++++++ tests/test1.out | 1 + 3 files changed, 16 insertions(+) diff --git a/parse_execution.cpp b/parse_execution.cpp index 08f222ed7..11aa5325f 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -325,6 +325,12 @@ parse_execution_result_t parse_execution_context_t::run_if_statement(const parse { run_job_list(*job_list_to_execute, ib); } + + /* It's possible there's a last-minute cancellation, in which case we should not stomp the exit status (#1297) */ + if (should_cancel_execution(ib)) + { + result = parse_execution_cancelled; + } /* Done */ parser->pop_block(ib); diff --git a/tests/test1.in b/tests/test1.in index 7f60a4dad..529baea1c 100644 --- a/tests/test1.in +++ b/tests/test1.in @@ -121,3 +121,12 @@ echo -e Catch your breath echo -e 'abc\x21def' echo -e 'abc\x211def' + +function always_fails + if true + return 1 + end +end + +always_fails ; echo $status + diff --git a/tests/test1.out b/tests/test1.out index b3460cdde..893e0464c 100644 --- a/tests/test1.out +++ b/tests/test1.out @@ -36,3 +36,4 @@ abc Catch your breath abc!def abc!1def +1 From 503bbd85b56f8c7cac4065fa0cd7e7738d9d87a8 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 12 Feb 2014 12:49:32 -0800 Subject: [PATCH 069/145] Test and fix issue where, if binding X is a prefix of binding Y, and X is specified before Y, then Y will never be invoked because X will always get there first. Now instead we order bindings in descending order by length, so that we always test the binding before any others that prefixes it. Fixes #1283. --- builtin.cpp | 3 +- fish_tests.cpp | 26 +++++++++++++++ input.cpp | 87 ++++++++++++++++++++++++++++---------------------- input.h | 2 +- 4 files changed, 76 insertions(+), 42 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index fb5fbeb43..8b8b8d5c2 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -556,8 +556,7 @@ static int builtin_bind(parser_t &parser, wchar_t **argv) BIND_ERASE, BIND_KEY_NAMES, BIND_FUNCTION_NAMES - } - ; + }; int argc=builtin_count_args(argv); int mode = BIND_INSERT; diff --git a/fish_tests.cpp b/fish_tests.cpp index 984c740be..1b66991c8 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -61,6 +61,7 @@ #include "parse_tree.h" #include "parse_util.h" #include "pager.h" +#include "input.h" static const char * const * s_arguments; static int s_test_run_count = 0; @@ -1798,6 +1799,30 @@ static bool history_contains(history_t *history, const wcstring &txt) return result; } +static void test_input() +{ + say(L"Testing input"); + /* Ensure sequences are order independent. Here we add two bindings where the first is a prefix of the second, and then emit the second key list. The second binding should be invoked, not the first! */ + wcstring prefix_binding = L"qqqqqqqa"; + wcstring desired_binding = prefix_binding + L'a'; + input_mapping_add(prefix_binding.c_str(), L"up-line"); + input_mapping_add(desired_binding.c_str(), L"down-line"); + + /* Push the desired binding on the stack (backwards!) */ + size_t idx = desired_binding.size(); + while (idx--) + { + input_unreadch(desired_binding.at(idx)); + } + + /* Now test */ + wint_t c = input_readch(); + if (c != R_DOWN_LINE) + { + err(L"Expected to read char R_DOWN_LINE, but instead got %ls\n", describe_char(c).c_str()); + } +} + class history_tests_t { public: @@ -2836,6 +2861,7 @@ int main(int argc, char **argv) if (should_test_function("is_potential_path")) test_is_potential_path(); if (should_test_function("colors")) test_colors(); if (should_test_function("complete")) test_complete(); + if (should_test_function("input")) test_input(); if (should_test_function("completion_insertions")) test_completion_insertions(); if (should_test_function("autosuggestion_combining")) test_autosuggestion_combining(); if (should_test_function("autosuggest_suggest_special")) test_autosuggest_suggest_special(); diff --git a/input.cpp b/input.cpp index bd855c2b5..e4edaa301 100644 --- a/input.cpp +++ b/input.cpp @@ -62,16 +62,20 @@ #define DEFAULT_TERM L"ansi" -/** - Struct representing a keybinding. Returned by input_get_mappings. - */ +/** Struct representing a keybinding. Returned by input_get_mappings. */ struct input_mapping_t { wcstring seq; /**< Character sequence which generates this event */ wcstring command; /**< command that should be evaluated by this mapping */ + + /* We wish to preserve the user-specified order. This is just an incrementing value. */ + unsigned int specification_order; - - input_mapping_t(const wcstring &s, const wcstring &c) : seq(s), command(c) {} + input_mapping_t(const wcstring &s, const wcstring &c) : seq(s), command(c) + { + static unsigned int s_last_input_mapping_specification_order = 0; + specification_order = ++s_last_input_mapping_specification_order; + } }; /** @@ -81,7 +85,6 @@ struct terminfo_mapping_t { const wchar_t *name; /**< Name of key */ const char *seq; /**< Character sequence generated on keypress. Constant string. */ - }; @@ -133,7 +136,7 @@ static const wchar_t * const name_arr[] = L"cancel" }; -wcstring describe_char(wchar_t c) +wcstring describe_char(wint_t c) { wchar_t initial_cmd_char = R_BEGINNING_OF_LINE; size_t name_count = sizeof name_arr / sizeof *name_arr; @@ -257,28 +260,44 @@ static bool is_init = false; */ static void input_terminfo_init(); +/* Helper function to compare the lengths of sequences */ +static bool length_is_greater_than(const input_mapping_t &m1, const input_mapping_t &m2) +{ + return m1.seq.size() > m2.seq.size(); +} -/** - Returns the function description for the given function code. -*/ +static bool specification_order_is_less_than(const input_mapping_t &m1, const input_mapping_t &m2) +{ + return m1.specification_order < m2.specification_order; +} + +/* Inserts an input mapping at the correct position. We sort them in descending order by length, so that we test longer sequences first. */ +static void input_mapping_insert_sorted(const input_mapping_t &new_mapping) +{ + std::vector::iterator loc = std::lower_bound(mapping_list.begin(), mapping_list.end(), new_mapping, length_is_greater_than); + mapping_list.insert(loc, new_mapping); +} + +/* Adds an input mapping */ void input_mapping_add(const wchar_t *sequence, const wchar_t *command) { CHECK(sequence,); CHECK(command,); - - // debug( 0, L"Add mapping from %ls to %ls", escape(sequence, 1), escape(command, 1 ) ); - - for (size_t i=0; i local_list = mapping_list; + std::sort(local_list.begin(), local_list.end(), specification_order_is_less_than); + + for (size_t i=0; i Date: Wed, 12 Feb 2014 21:08:12 -0800 Subject: [PATCH 070/145] Fix the build by including header --- input.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/input.cpp b/input.cpp index e4edaa301..93c73d466 100644 --- a/input.cpp +++ b/input.cpp @@ -59,6 +59,7 @@ #include "output.h" #include "intern.h" #include +#include #define DEFAULT_TERM L"ansi" From 1fbf63381782b0badead61d1576ad6a1e29fc3ea Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 13 Feb 2014 10:08:04 -0800 Subject: [PATCH 071/145] Reimplement exec parsing. Instead of special-casing exec as a command, promote it to a decoration (like 'command' or 'builtin'). This makes tab completion and syntax highlighting treat exec's first argument as a command and is otherwise a nice simplification. Fixes #1300 --- complete.cpp | 1 + fish_tests.cpp | 8 ++++++++ highlight.cpp | 2 +- parse_constants.h | 4 +++- parse_execution.cpp | 7 +++---- parse_productions.cpp | 3 +++ parse_tree.cpp | 5 ++++- parse_tree.h | 4 ++-- parse_util.cpp | 17 +++++++++++------ 9 files changed, 36 insertions(+), 15 deletions(-) diff --git a/complete.cpp b/complete.cpp index 4808c4dbd..098a4ad26 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1915,6 +1915,7 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps break; case parse_statement_decoration_command: + case parse_statement_decoration_exec: use_command = true; use_function = false; use_builtin = false; diff --git a/fish_tests.cpp b/fish_tests.cpp index 1b66991c8..a9f53911e 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -140,10 +140,17 @@ static void err(const wchar_t *blah, ...) va_list va; va_start(va, blah); err_count++; + + // show errors in red + fputs("\x1b[31m", stdout); wprintf(L"Error: "); vwprintf(blah, va); va_end(va); + + // return to normal color + fputs("\x1b[0m", stdout); + wprintf(L"\n"); } @@ -2454,6 +2461,7 @@ static void test_new_parser_ll2(void) { {L"echo hello", L"echo", L"hello", parse_statement_decoration_none}, {L"command echo hello", L"echo", L"hello", parse_statement_decoration_command}, + {L"exec echo hello", L"echo", L"hello", parse_statement_decoration_exec}, {L"command command hello", L"command", L"hello", parse_statement_decoration_command}, {L"builtin command hello", L"command", L"hello", parse_statement_decoration_builtin}, {L"command --help", L"command", L"--help", parse_statement_decoration_none}, diff --git a/highlight.cpp b/highlight.cpp index dc9da1560..55db8a5a9 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -1236,7 +1236,7 @@ static bool command_is_valid(const wcstring &cmd, enum parse_statement_decoratio { /* Determine which types we check, based on the decoration */ bool builtin_ok = true, function_ok = true, abbreviation_ok = true, command_ok = true, implicit_cd_ok = true; - if (decoration == parse_statement_decoration_command) + if (decoration == parse_statement_decoration_command || decoration == parse_statement_decoration_exec) { builtin_ok = false; function_ok = false; diff --git a/parse_constants.h b/parse_constants.h index 85eabaf9b..32115c017 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -90,6 +90,7 @@ enum parse_keyword_t parse_keyword_not, parse_keyword_command, parse_keyword_builtin, + parse_keyword_exec, LAST_KEYWORD = parse_keyword_builtin }; @@ -99,7 +100,8 @@ enum parse_statement_decoration_t { parse_statement_decoration_none, parse_statement_decoration_command, - parse_statement_decoration_builtin + parse_statement_decoration_builtin, + parse_statement_decoration_exec }; /* Parse error code list */ diff --git a/parse_execution.cpp b/parse_execution.cpp index 11aa5325f..738e39730 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -161,10 +161,9 @@ enum process_type_t parse_execution_context_t::process_type_for_command(const pa /* Determine the process type, which depends on the statement decoration (command, builtin, etc) */ enum parse_statement_decoration_t decoration = tree.decoration_for_plain_statement(plain_statement); - /* Do the "exec hack" */ - if (decoration != parse_statement_decoration_command && cmd == L"exec") + if (decoration == parse_statement_decoration_exec) { - /* Either 'builtin exec' or just plain 'exec', and definitely not 'command exec'. Note we don't allow overriding exec with a function. */ + /* Always exec */ process_type = INTERNAL_EXEC; } else if (decoration == parse_statement_decoration_command) @@ -848,7 +847,7 @@ parse_execution_result_t parse_execution_context_t::populate_plain_process(job_t } wcstring path_to_external_command; - if (process_type == EXTERNAL) + if (process_type == EXTERNAL || process_type == INTERNAL_EXEC) { /* Determine the actual command. This may be an implicit cd. */ bool has_command = path_get_path(cmd, &path_to_external_command); diff --git a/parse_productions.cpp b/parse_productions.cpp index ff473268e..d559a0d93 100644 --- a/parse_productions.cpp +++ b/parse_productions.cpp @@ -357,6 +357,7 @@ PRODUCTIONS(decorated_statement) = {symbol_plain_statement}, {KEYWORD(parse_keyword_command), symbol_plain_statement}, {KEYWORD(parse_keyword_builtin), symbol_plain_statement}, + {KEYWORD(parse_keyword_exec), symbol_plain_statement} }; RESOLVE(decorated_statement) { @@ -374,6 +375,8 @@ RESOLVE(decorated_statement) return 1; case parse_keyword_builtin: return 2; + case parse_keyword_exec: + return 3; } } diff --git a/parse_tree.cpp b/parse_tree.cpp index 0db2a06d3..41ef9cf02 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -237,6 +237,8 @@ wcstring keyword_description(parse_keyword_t k) return L"command"; case parse_keyword_builtin: return L"builtin"; + case parse_keyword_exec: + return L"exec"; } return format_string(L"Unknown keyword type %ld", static_cast(k)); } @@ -1049,7 +1051,8 @@ static parse_keyword_t keyword_for_token(token_type tok, const wchar_t *tok_txt) {L"or", parse_keyword_or}, {L"not", parse_keyword_not}, {L"command", parse_keyword_command}, - {L"builtin", parse_keyword_builtin} + {L"builtin", parse_keyword_builtin}, + {L"exec", parse_keyword_exec} }; for (size_t i=0; i < sizeof keywords / sizeof *keywords; i++) diff --git a/parse_tree.h b/parse_tree.h index 255ab467f..77b29fc8a 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -247,9 +247,9 @@ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse boolean_statement = AND statement | OR statement | NOT statement -# A decorated_statement is a command with a list of arguments_or_redirections, possibly with "builtin" or "command" +# A decorated_statement is a command with a list of arguments_or_redirections, possibly with "builtin" or "command" or "exec" - decorated_statement = plain_statement | COMMAND plain_statement | BUILTIN plain_statement + decorated_statement = plain_statement | COMMAND plain_statement | BUILTIN plain_statement | EXEC plain_statement plain_statement = arguments_or_redirections_list optional_background argument_list = | argument argument_list diff --git a/parse_util.cpp b/parse_util.cpp index 68f652489..230a328c9 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1067,6 +1067,15 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars } else if (node.type == symbol_plain_statement) { + // In a few places below, we want to know if we are in a pipeline + const bool is_in_pipeline = node_tree.statement_is_in_pipeline(node, true /* count first */); + + // Check that we don't try to pipe through exec + if (is_in_pipeline && node_tree.decoration_for_plain_statement(node) == parse_statement_decoration_exec) + { + errored = append_syntax_error(&parse_errors, node, EXEC_ERR_MSG, L"exec"); + } + wcstring command; if (node_tree.command_for_plain_statement(node, buff_src, &command)) { @@ -1077,13 +1086,9 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars } // Check that pipes are sound - if (! errored && parser_is_pipe_forbidden(command)) + if (! errored && parser_is_pipe_forbidden(command) && is_in_pipeline) { - // forbidden commands cannot be in a pipeline at all - if (node_tree.statement_is_in_pipeline(node, true /* count first */)) - { - errored = append_syntax_error(&parse_errors, node, EXEC_ERR_MSG, command.c_str()); - } + errored = append_syntax_error(&parse_errors, node, EXEC_ERR_MSG, command.c_str()); } // Check that we don't return from outside a function From de8bae3f0f5ac32c4599009bb3260cea80653e9c Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 14 Feb 2014 10:12:41 -0800 Subject: [PATCH 072/145] Ignore SIGPIPE in fishd. Fixes #1084 --- fishd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fishd.cpp b/fishd.cpp index 5e2a36483..30ded3cdd 100644 --- a/fishd.cpp +++ b/fishd.cpp @@ -667,13 +667,14 @@ static void daemonize() setup_fork_guards(); /* - Make fishd ignore the HUP signal. + Make fishd ignore the HUP and PIPE signals. */ struct sigaction act; sigemptyset(& act.sa_mask); act.sa_flags=0; act.sa_handler=SIG_IGN; sigaction(SIGHUP, &act, 0); + sigaction(SIGPIPE, &act, 0); /* Make fishd save and exit on the TERM signal. From b1545c5ce244dadcd6de5c09f7b90b11215bb6cd Mon Sep 17 00:00:00 2001 From: waterhouse Date: Sun, 16 Feb 2014 01:17:12 -0800 Subject: [PATCH 073/145] 'seq' should return 1, not exit 1, on bad arglist --- share/functions/seq.fish | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/functions/seq.fish b/share/functions/seq.fish index f710c235d..0f5f8534c 100644 --- a/share/functions/seq.fish +++ b/share/functions/seq.fish @@ -29,14 +29,14 @@ if begin ; not test -x /usr/bin/seq ; and not type -f seq > /dev/null; end case '*' printf (_ "%s: Expected 1, 2 or 3 arguments, got %d\n") seq (count $argv) - exit 1 + return 1 end for i in $from $step $to if not echo $i | grep -E '^-?[0-9]*([0-9]*|\.[0-9]+)$' >/dev/null printf (_ "%s: '%s' is not a number\n") seq $i - exit 1 + return 1 end end From d1cf5ab28608ff7135abd27d52949fbf4cd96ebd Mon Sep 17 00:00:00 2001 From: Eric Mrak Date: Thu, 6 Feb 2014 21:55:53 -0800 Subject: [PATCH 074/145] adding completion for aura. adding pacman integration for __fish_print_packages --- share/completions/aura.fish | 1 + share/functions/__fish_complete_aura.fish | 178 ++++++++++++++++++++ share/functions/__fish_complete_pacman.fish | 6 +- share/functions/__fish_print_packages.fish | 6 + 4 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 share/completions/aura.fish create mode 100644 share/functions/__fish_complete_aura.fish diff --git a/share/completions/aura.fish b/share/completions/aura.fish new file mode 100644 index 000000000..a06e34e97 --- /dev/null +++ b/share/completions/aura.fish @@ -0,0 +1 @@ +__fish_complete_aura aura diff --git a/share/functions/__fish_complete_aura.fish b/share/functions/__fish_complete_aura.fish new file mode 100644 index 000000000..35ab2c3f7 --- /dev/null +++ b/share/functions/__fish_complete_aura.fish @@ -0,0 +1,178 @@ +function __fish_complete_aura -d 'Complete Aura (ARCH/AUR package manager)' --argument-names progname + # Completions for aura + # Author: Eric Mrak + # original for pacman by: Giorgio Lando + + set -q progname[1]; or set -l progname aura + + set -l listinstalled "(pacman -Q | tr ' ' \t)" + set -l listall "(__fish_print_packages)" + set -l listrepos "(cat /etc/pacman.conf | grep '^\[.\+\]' | sed 's/[]\[]//g')" + set -l listgroups "(pacman -Sg | sed 's/\(.*\)/\1\tPackage group/g')" + + set -l noopt 'commandline | not sgrep -qe "-[a-z]*[ABCDLMOQRSTU]\|--aursync\|--save\|--downgrade\|--viewlog\|--abssync\|--orphans\|--database\|--query\|--sync\|--remove\|--upgrade\|--deptest"' + set -l database 'commandline | sgrep -qe "-[a-z]*D\|--database"' + set -l query 'commandline | sgrep -qe "-[a-z]*Q\|--query"' + set -l remove 'commandline | sgrep -qe "-[a-z]*R\|--remove"' + set -l sync 'commandline | sgrep -qe "-[a-z]*S\|--sync"' + set -l upgrade 'commandline | sgrep -qe "-[a-z]*U\|--upgrade"' + set -l aur 'commandline | sgrep -qe "-[a-z]*A\|--aursync"' + set -l abs 'commandline | sgrep -qe "-[a-z]*M\|--abssync"' + set -l save 'commandline | sgrep -qe "-[a-z]*B\|--save"' + set -l downgrade 'commandline | sgrep -qe "-[a-z]*C\|--downgrade"' + set -l orphans 'commandline | sgrep -qe "-[a-z]*O\|--orphans"' + set -l logfile 'commandline | sgrep -qe "-[a-z]*L\|--viewlog"' + set -l search 'commandline | sgrep -qe "-[a-zA]*s\|--search"' + + # By default fish expands the arguments with the option which is not desired + # due to performance reasons. + # This will make sure we are expanding an argument and not an option: + set -l argument 'not expr -- (commandline --current-token) : "^-.*" > /dev/null' + + # Primary operations + complete -c $progname -s A -f -l aursync -n $noopt -d 'Synchronize AUR packages' + complete -c $progname -s B -f -l save -n $noopt -d 'Save and restore package state' + complete -c $progname -s C -f -l downgrade -n $noopt -d 'Package cache actions' + complete -c $progname -s D -f -l database -n $noopt -d 'Modify the package database' + complete -c $progname -s L -f -l viewlog -n $noopt -d 'Pacman log actions' + complete -c $progname -s M -f -l abssync -n $noopt -d 'Build packages from ABS' + complete -c $progname -s O -f -l orphans -n $noopt -d 'Operate on orphan packages' + complete -c $progname -s Q -f -l query -n $noopt -d 'Query the package database' + complete -c $progname -s R -f -l remove -n $noopt -d 'Remove packages from the system' + complete -c $progname -s S -f -l sync -n $noopt -d 'Synchronize packages' + complete -c $progname -s T -f -l deptest -n $noopt -d 'Check dependencies' + complete -c $progname -s U -f -l upgrade -n $noopt -d 'Upgrade or add a local package' + complete -c $progname -l auradebug -d 'Show settings while running' + complete -c $progname -l no-pp -d 'Do not use powerpill' + complete -c $progname -l languages -d 'Show available languages' + complete -c $progname -l viewconf -d 'View pacman.conf' + complete -c $progname -s V -f -l version -d 'Display version and exit' + complete -c $progname -s h -f -l help -d 'Display help' + + # General options + complete -c $progname -s b -l dbpath -d 'Alternative database location' -xa '(__fish_complete_directories)' + complete -c $progname -s r -l root -d 'Alternative installation root' + complete -c $progname -s v -l verbose -d 'Output more status messages' + complete -c $progname -l arch -d 'Alternate architecture' + complete -c $progname -l cachedir -d 'Alternative package cache location' + complete -c $progname -l config -d 'Alternate config file' + complete -c $progname -l debug -d 'Display debug messages' + complete -c $progname -l gpgdir -d 'GPG directory to verify signatures' + complete -c $progname -l logfile -d 'Specify alternative log file' + complete -c $progname -l noconfirm -d 'Bypass any question' + + # Transaction options (sync, remove, upgrade) + for condition in sync remove upgrade + complete -c $progname -n $$condition -s d -l nodeps -d 'Skip [all] dependency checks' + complete -c $progname -n $$condition -l dbonly -d 'Modify database entry only' + complete -c $progname -n $$condition -l noprogressbar -d 'Do not display progress bar' + complete -c $progname -n $$condition -l noscriptlet -d 'Do not execute install script' + complete -c $progname -n $$condition -s p -l print -d 'Dry run, only print targets' + complete -c $progname -n $$condition -l print-format -x -d 'Specify printf-like format' + end + + # Database and upgrade options (database, sync, upgrade) + for condition in database sync upgrade + complete -c $progname -n $$condition -l asdeps -d 'Mark PACKAGE as dependency' + complete -c $progname -n $$condition -l asexplicit -d 'Mark PACKAGE as explicitly installed' + end + + # Upgrade options (sync, upgrade) + for condition in sync upgrade + complete -c $progname -n $$condition -s f -l force -d 'Bypass file conflict checks' + complete -c $progname -n $$condition -l ignore -d 'Ignore upgrade of PACKAGE' -xa "$listinstalled" + complete -c $progname -n $$condition -l ignoregroup -d 'Ignore upgrade of GROUP' -xa "$listgroups" + complete -c $progname -n $$condition -l needed -d 'Do not reinstall up-to-date targets' + complete -c $progname -n $$condition -l recursive -d 'Recursively reinstall all dependencies' + end + + # Query and sync options + for condition in query sync + complete -c $progname -n $$condition -s g -l groups -d 'Display all packages in GROUP' -xa "$listgroups" + complete -c $progname -n $$condition -s i -l info -d 'Display information on PACKAGE' + complete -c $progname -n $$condition -s q -l quiet -d 'Show less information' + complete -c $progname -n $$condition -s s -l search -r -d 'Search packages for regexp' + end + + for condition in abs aur + complete -c $progname -n $$condition -s a -l delmakedeps -d 'Remove packages only needed during installation' + complete -c $progname -n $$condition -s d -l deps -d 'View package dependencies' + complete -c $progname -n $$condition -s i -l info -d 'View package information' + complete -c $progname -n $$condition -s k -l diff -d 'Show PKGBUILD diffs' + complete -c $progname -n $$condition -s p -l pkgbuild -d 'View the packages\'s PKGBUILD' + complete -c $progname -n $$condition -s x -l unsuppress -d 'Show makepkg output' + complete -c $progname -n $$condition -l absdeps -d 'Build dependencies from ABS' + end + + # AUR options + complete -c $progname -n $aur -s q -l quiet -d 'Show less information' + complete -c $progname -n $aur -s s -l search -r -d 'Search AUR by string matching' + complete -c $progname -n $aur -s u -l sysupgrade -d 'Upgrade all installed AUR packages' + complete -c $progname -n $aur -s w -l downloadonly -d 'Download the source tarball' + complete -c $progname -n $aur -l aurignore -r -d 'Ignore given comma-separated packages' + complete -c $progname -n $aur -l build -r -d 'Specify a build location' + complete -c $progname -n $aur -l builduser -r -d 'User to build as' + complete -c $progname -n $aur -l custom -d 'Run customizepkg before build' + complete -c $progname -n $aur -l devel -d 'Include -git/-svn/etc packages' + complete -c $progname -n $aur -l hotedit -d 'Prompt for PKGBUILD editing' + complete -c $progname -n $aur -l ignorearch -d 'Ignore architecture checking' + complete -c $progname -n "$aur; and $search" -l abc -d 'Sort alphabetically' + complete -c $progname -n "$aur; and $search" -l head -d 'Only show the first 10 results' + complete -c $progname -n "$aur; and $search" -l tail -d 'Only show the last 10 results' + + # Backup options + complete -c $progname -n $save -s c -l clean -d 'Remove all but the given number of backups' + complete -c $progname -n $save -s r -l restore -d 'Restores a record kept with -B' + + # Downgrade options + complete -c $progname -n $downgrade -s b -l backup -d 'Backup to directory' + complete -c $progname -n $downgrade -s c -l clean -d 'Save this many versions' + complete -c $progname -n $downgrade -s s -l search -r -d 'Search via regex' + + # Logfile options + complete -c $progname -n $logfile -s i -l info -d 'Show package history' + complete -c $progname -n $logfile -s s -l search -r -d 'Search via regex' + + # ABS options + complete -c $progname -n $abs -s s -l search -r -d 'Search ABS by regex' + complete -c $progname -n $abs -s c -l clean -d 'Delete local ABS tree' + complete -c $progname -n $abs -s y -l refresh -d 'Download fresh copy of the package list' + complete -c $progname -n $abs -s t -l treesync -d 'Sync the given to local ABS tree' + complete -c $progname -n $abs -l absdeps -d 'Download fresh copy of the package list' + + # Orphan options + complete -c $progname -n $orphans -s j -l abandon -d 'Uninstall orphan packages' + + # Query options + complete -c $progname -n $query -s c -l changelog -d 'View the change log of PACKAGE' + complete -c $progname -n $query -s d -l deps -d 'List only non-explicit packages (dependencies)' + complete -c $progname -n $query -s e -l explicit -d 'List only explicitly installed packages' + complete -c $progname -n $query -s k -l check -d 'Check if all files owned by PACKAGE are present' + complete -c $progname -n $query -s l -l list -d 'List all files owned by PACKAGE' + complete -c $progname -n $query -s m -l foreign -d 'List all packages not in the database' + complete -c $progname -n $query -s o -l owns -r -d 'Search for the package that owns FILE' -xa '' + complete -c $progname -n $query -s p -l file -d 'Apply the query to a package file, not package' -xa '' + complete -c $progname -n $query -s t -l unrequired -d 'List only unrequired packages' + complete -c $progname -n $query -s u -l upgrades -d 'List only out-of-date packages' + complete -c $progname -n "$query; and $argument" -xa $listinstalled -d 'Installed package' + + # Remove options + complete -c $progname -n $remove -s c -l cascade -d 'Also remove packages depending on PACKAGE' + complete -c $progname -n $remove -s n -l nosave -d 'Ignore file backup designations' + complete -c $progname -n $remove -s s -l recursive -d 'Also remove dependencies of PACKAGE' + complete -c $progname -n $remove -s u -l unneeded -d 'Only remove targets not required by PACKAGE' + complete -c $progname -n "$remove; and $argument" -xa $listinstalled -d 'Installed package' + + # Sync options + complete -c $progname -n $sync -s c -l clean -d 'Remove [all] packages from cache' + complete -c $progname -n $sync -s l -l list -xa "$listrepos" -d 'List all packages in REPOSITORY' + complete -c $progname -n $sync -s u -l sysupgrade -d 'Upgrade all packages that are out of date' + complete -c $progname -n $sync -s w -l downloadonly -d 'Only download the target packages' + complete -c $progname -n $sync -s y -l refresh -d 'Download fresh copy of the package list' + complete -c $progname -n "$argument; and $sync" -xa "$listall $listgroups" + + # Upgrade options + complete -c $progname -n "$upgrade; and $argument" -xa '(__fish_complete_suffix pkg.tar.xz)' -d 'Package file' + complete -c $progname -n "$upgrade; and $argument" -xa '(__fish_complete_suffix pkg.tar.gz)' -d 'Package file' +end + diff --git a/share/functions/__fish_complete_pacman.fish b/share/functions/__fish_complete_pacman.fish index 3be581f93..6e3baa0db 100644 --- a/share/functions/__fish_complete_pacman.fish +++ b/share/functions/__fish_complete_pacman.fish @@ -6,7 +6,7 @@ function __fish_complete_pacman -d 'Complete pacman (ARCH package manager)' --ar set -q progname[1]; or set -l progname pacman set -l listinstalled "(pacman -Q | tr ' ' \t)" - set -l listall "(pacman -Sl | cut --delim ' ' --fields 2- | tr ' ' \t)" + set -l listall "(__fish_print_packages)" set -l listrepos "(cat /etc/pacman.conf | grep '^\[.\+\]' | sed 's/[]\[]//g')" set -l listgroups "(pacman -Sg | sed 's/\(.*\)/\1\tPackage group/g')" @@ -88,14 +88,14 @@ function __fish_complete_pacman -d 'Complete pacman (ARCH package manager)' --ar complete -c $progname -n $query -s p -l file -d 'Apply the query to a package file, not package' -xa '' complete -c $progname -n $query -s t -l unrequired -d 'List only unrequired packages' complete -c $progname -n $query -s u -l upgrades -d 'List only out-of-date packages' - complete -c $progname -n "$query; and $argument" -xa $listinstalled -d 'Installed package' + complete -c $progname -n "$query; and $argument" -d 'Installed package' -xa $listinstalled # Remove options complete -c $progname -n $remove -s c -l cascade -d 'Also remove packages depending on PACKAGE' complete -c $progname -n $remove -s n -l nosave -d 'Ignore file backup designations' complete -c $progname -n $remove -s s -l recursive -d 'Also remove dependencies of PACKAGE' complete -c $progname -n $remove -s u -l unneeded -d 'Only remove targets not required by PACKAGE' - complete -c $progname -n "$remove; and $argument" -xa $listinstalled -d 'Installed package' + complete -c $progname -n "$remove; and $argument" -d 'Installed package' -xa $listinstalled # Sync options complete -c $progname -n $sync -s c -l clean -d 'Remove [all] packages from cache' diff --git a/share/functions/__fish_print_packages.fish b/share/functions/__fish_print_packages.fish index f732a51ff..351d88c41 100644 --- a/share/functions/__fish_print_packages.fish +++ b/share/functions/__fish_print_packages.fish @@ -70,6 +70,12 @@ function __fish_print_packages rpm -qa |sed -e 's/-[^-]*-[^-]*$/\t'$package'/' >$cache_file & end + # This completes pacman package names from pacman's cache + if type -f pacman >/dev/null + pacman -Sl | cut -d ' ' -f 2- | tr ' ' \t + return + end + # This completes the package name from the portage tree. # True for installing new packages. Function for printing # installed on the system packages is in completions/emerge.fish From 64ca6c066c47a14fb1b1d05e5659a41cdc8f6f7c Mon Sep 17 00:00:00 2001 From: Eric Mrak Date: Thu, 13 Feb 2014 17:41:53 -0800 Subject: [PATCH 075/145] Caching for pacman packages. --- share/functions/__fish_print_packages.fish | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/share/functions/__fish_print_packages.fish b/share/functions/__fish_print_packages.fish index 351d88c41..ec812a64e 100644 --- a/share/functions/__fish_print_packages.fish +++ b/share/functions/__fish_print_packages.fish @@ -29,6 +29,22 @@ function __fish_print_packages return end + # Caches for 5 minutes + if type -f pacman >/dev/null + set cache_file /tmp/.pac-cache.$USER + if test -f $cache_file + cat $cache_file + set age (math (date +%s) - (stat -c '%Y' $cache_file)) + set max_age 250 + if test $age -lt $max_age + return + end + end + + # prints: Package + pacman -Ssq | sed -e 's/$/\t'$package'/' >$cache_file & + return + end # yum is slow, just like rpm, so go to the background if type -f /usr/share/yum-cli/completion-helper.py >/dev/null @@ -47,6 +63,7 @@ function __fish_print_packages # Remove package version information from output and pipe into cache file /usr/share/yum-cli/completion-helper.py list all -d 0 -C | sed "s/\..*/\t$package/" >$cache_file & + return end # Rpm is too slow for this job, so we set it up to do completions @@ -68,11 +85,6 @@ function __fish_print_packages # Remove package version information from output and pipe into cache file rpm -qa |sed -e 's/-[^-]*-[^-]*$/\t'$package'/' >$cache_file & - end - - # This completes pacman package names from pacman's cache - if type -f pacman >/dev/null - pacman -Sl | cut -d ' ' -f 2- | tr ' ' \t return end From ef9f2ab31f75eefc7c34240386c247b775431d80 Mon Sep 17 00:00:00 2001 From: Mandeep Sandhu Date: Sun, 16 Feb 2014 21:54:28 +0800 Subject: [PATCH 076/145] Add completions for git stash sub-commands Closes #1102. Signed-off-by: David Adam --- share/completions/git.fish | 47 ++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/share/completions/git.fish b/share/completions/git.fish index 8647bea39..9bb92a89c 100644 --- a/share/completions/git.fish +++ b/share/completions/git.fish @@ -65,6 +65,28 @@ function __fish_git_using_command return 1 end +function __fish_git_stash_using_command + set cmd (commandline -opc) + if [ (count $cmd) -gt 2 ] + if [ $cmd[2] = 'stash' -a $argv[1] = $cmd[3] ] + return 0 + end + end + return 1 +end + +function __fish_git_stash_not_using_subcommand + set cmd (commandline -opc) + if [ (count $cmd) -gt 2 -a $cmd[2] = 'stash' ] + return 1 + end + return 0 +end + +function __fish_git_complete_stashes + command git stash list --format=format:"%gd:%gs" | sed 's/:/\t/' +end + # general options complete -f -c git -n 'not __fish_git_needs_command' -l help -d 'Display the manual of a git command' @@ -327,16 +349,21 @@ complete -f -c git -n '__fish_contains_opt -s v' -a '(__fish_git_tags)' -d 'Tag' ### stash complete -c git -n '__fish_git_needs_command' -a stash -d 'Stash away changes' -complete -f -c git -n '__fish_git_using_command stash' -a list -d 'List stashes' -complete -f -c git -n '__fish_git_using_command stash' -a show -d 'Show the changes recorded in the stash' -complete -f -c git -n '__fish_git_using_command stash' -a pop -d 'Apply and remove a single stashed state' -complete -f -c git -n '__fish_git_using_command stash' -a apply -d 'Apply a single stashed state' -complete -f -c git -n '__fish_git_using_command stash' -a clear -d 'Remove all stashed states' -complete -f -c git -n '__fish_git_using_command stash' -a drop -d 'Remove a single stashed state from the stash list' -complete -f -c git -n '__fish_git_using_command stash' -a create -d 'Create a stash' -complete -f -c git -n '__fish_git_using_command stash' -a save -d 'Save a new stash' -complete -f -c git -n '__fish_git_using_command stash' -a branch -d 'Create a new branch from a stash' -# TODO other options +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a list -d 'List stashes' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a show -d 'Show the changes recorded in the stash' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a pop -d 'Apply and remove a single stashed state' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a apply -d 'Apply a single stashed state' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a clear -d 'Remove all stashed states' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a drop -d 'Remove a single stashed state from the stash list' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a create -d 'Create a stash' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a save -d 'Save a new stash' +complete -f -c git -n '__fish_git_using_command stash; and __fish_git_stash_not_using_subcommand' -a branch -d 'Create a new branch from a stash' + +complete -f -c git -n '__fish_git_stash_using_command apply' -a '(__fish_git_complete_stashes)' +complete -f -c git -n '__fish_git_stash_using_command branch' -a '(__fish_git_complete_stashes)' +complete -f -c git -n '__fish_git_stash_using_command drop' -a '(__fish_git_complete_stashes)' +complete -f -c git -n '__fish_git_stash_using_command pop' -a '(__fish_git_complete_stashes)' +complete -f -c git -n '__fish_git_stash_using_command show' -a '(__fish_git_complete_stashes)' ### config complete -f -c git -n '__fish_git_needs_command' -a config -d 'Set and read git configuration variables' From 9c7d1dbb6f943569aa18cf8aa79fd1d284970301 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Feb 2014 16:14:41 -0800 Subject: [PATCH 077/145] Make the pager search field allow searching on the prefix --- pager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pager.cpp b/pager.cpp index e9d23aa78..e98917ca7 100644 --- a/pager.cpp +++ b/pager.cpp @@ -366,7 +366,7 @@ bool pager_t::completion_info_passes_filter(const comp_t &info) const /* Match against the completion strings */ for (size_t i=0; i < info.comp.size(); i++) { - if (string_fuzzy_match_string(needle, info.comp.at(i), limit).type != fuzzy_match_none) + if (string_fuzzy_match_string(needle, prefix + info.comp.at(i), limit).type != fuzzy_match_none) { return true; } From 2253c57628201840254669ed8561720d4e334d26 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Feb 2014 19:56:13 -0800 Subject: [PATCH 078/145] Remove the reader_selected_completion_changed callback. Fix a hang when the pager gets empty, as reported in 291 --- pager.cpp | 9 +-------- reader.cpp | 39 ++++++++++++++++++++++++++++++++++++++- reader.h | 4 ---- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/pager.cpp b/pager.cpp index e98917ca7..16456bc9d 100644 --- a/pager.cpp +++ b/pager.cpp @@ -388,7 +388,6 @@ void pager_t::refilter_completions() this->completion_infos.push_back(info); } } - note_selection_changed(); } void pager_t::set_completions(const completion_list_t &raw_completions) @@ -732,7 +731,6 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio { selected_completion_idx = 0; } - note_selection_changed(); return true; /* These do nothing */ @@ -897,7 +895,6 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio } } - this->note_selection_changed(); return true; } else @@ -909,7 +906,7 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio size_t pager_t::visual_selected_completion_index(size_t rows, size_t cols) const { /* No completions -> no selection */ - if (completion_infos.empty()) + if (completion_infos.empty() || rows == 0 || cols == 0) { return PAGER_SELECTION_NONE; } @@ -997,10 +994,6 @@ size_t pager_t::cursor_position() const return result; } -void pager_t::note_selection_changed() -{ - reader_selected_completion_changed(this); -} /* Constructor */ page_rendering_t::page_rendering_t() : term_width(-1), term_height(-1), rows(0), cols(0), row_start(0), row_end(0), selected_completion_idx(-1), remaining_to_disclose(0), search_field_shown(false) diff --git a/reader.cpp b/reader.cpp index d51b1f976..db83e4b9d 100644 --- a/reader.cpp +++ b/reader.cpp @@ -272,6 +272,9 @@ public: /** Do what we need to do whenever our command line changes */ void command_line_changed(const editable_line_t *el); + /** Do what we need to do whenever our pager selection */ + void pager_selection_changed(); + /** Expand abbreviations at the current cursor position, minus backtrack_amt. */ bool expand_abbreviation_as_necessary(size_t cursor_backtrack); @@ -686,9 +689,37 @@ void reader_data_t::command_line_changed(const editable_line_t *el) else if (el == &this->pager.search_field_line) { this->pager.refilter_completions(); + this->pager_selection_changed(); } } +void reader_data_t::pager_selection_changed() +{ + ASSERT_IS_MAIN_THREAD(); + + const completion_t *completion = this->pager.selected_completion(this->current_page_rendering); + + /* Update the cursor and command line */ + size_t cursor_pos = this->cycle_cursor_pos; + wcstring new_cmd_line; + + if (completion == NULL) + { + new_cmd_line = this->cycle_command_line; + } + else + { + new_cmd_line = completion_apply_to_command_line(completion->completion, completion->flags, this->cycle_command_line, &cursor_pos, false); + } + reader_set_buffer_maintaining_pager(new_cmd_line, cursor_pos); + + /* Since we just inserted a completion, don't immediately do a new autosuggestion */ + this->suppress_autosuggestion = true; + + /* Trigger repaint (see #765) */ + reader_repaint_needed(); +} + /* Expand abbreviations at the given cursor position. Does NOT inspect 'data'. */ bool reader_expand_abbreviation_in_command(const wcstring &cmdline, size_t cursor_pos, wcstring *output) { @@ -1644,7 +1675,11 @@ static void select_completion_in_direction(enum selection_direction_t dir) { assert(data != NULL); /* Note: this will probably trigger reader_selected_completion_changed, which will cause us to update stuff */ - data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); + bool selection_changed = data->pager.select_next_completion_in_direction(dir, data->current_page_rendering); + if (selection_changed) + { + data->pager_selection_changed(); + } } /** @@ -1964,6 +1999,8 @@ static bool handle_completions(const std::vector &comp, bool conti /* Invalidate our rendering */ data->current_page_rendering = page_rendering_t(); + /* Modify the command line to reflect the new pager */ + data->pager_selection_changed(); } else { diff --git a/reader.h b/reader.h index 1519aee84..476a1e403 100644 --- a/reader.h +++ b/reader.h @@ -301,8 +301,4 @@ bool reader_expand_abbreviation_in_command(const wcstring &cmdline, size_t curso /* Apply a completion string. Exposed for testing only. */ wcstring completion_apply_to_command_line(const wcstring &val_str, complete_flags_t flags, const wcstring &command_line, size_t *inout_cursor_pos, bool append_only); -/* Called by pager */ -class pager_t; -void reader_selected_completion_changed(pager_t *pager); - #endif From 2e1024d275f46a3355d1c5f505fad3a4fd536368 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 17 Feb 2014 14:51:51 -0800 Subject: [PATCH 079/145] Tweak error reporting in new parser to use fewer lines --- parse_execution.cpp | 2 +- parse_tree.cpp | 14 ++++++++++---- parse_tree.h | 5 ++++- parser.cpp | 16 ++++++++++------ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/parse_execution.cpp b/parse_execution.cpp index 738e39730..f2eaae251 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -691,7 +691,7 @@ parse_execution_result_t parse_execution_context_t::report_error(const parse_nod const parse_error_list_t error_list = parse_error_list_t(1, error); parser->get_backtrace(src, error_list, &backtrace_and_desc); - fprintf(stderr, "<%ls>", backtrace_and_desc.c_str()); + fprintf(stderr, "%ls", backtrace_and_desc.c_str()); } return parse_execution_errored; diff --git a/parse_tree.cpp b/parse_tree.cpp index 41ef9cf02..484b79687 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -14,7 +14,7 @@ static bool production_is_empty(const production_t *production) } /** Returns a string description of this parse error */ -wcstring parse_error_t::describe(const wcstring &src, bool skip_caret) const +wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring &prefix, bool skip_caret) const { wcstring result = text; if (! skip_caret && source_start < src.size() && source_start + source_length <= src.size()) @@ -53,15 +53,16 @@ wcstring parse_error_t::describe(const wcstring &src, bool skip_caret) const { result.push_back(L'\n'); } + result.append(prefix); result.append(src, line_start, line_end - line_start); - // Append the caret line. The input source may include tabs; for that reason we construct a "caret line" that has tabs in corresponding positions + const wcstring line_to_measure = prefix + wcstring(src, line_start, source_start - line_start); wcstring caret_space_line; caret_space_line.reserve(source_start - line_start); - for (size_t i=line_start; i < source_start; i++) + for (size_t i=0; i < line_to_measure.size(); i++) { - wchar_t wc = src.at(i); + wchar_t wc = line_to_measure.at(i); if (wc == L'\t') { caret_space_line.push_back(L'\t'); @@ -88,6 +89,11 @@ wcstring parse_error_t::describe(const wcstring &src, bool skip_caret) const return result; } +wcstring parse_error_t::describe(const wcstring &src) const +{ + return this->describe_with_prefix(src, wcstring(), false); +} + wcstring parse_errors_description(const parse_error_list_t &errors, const wcstring &src, const wchar_t *prefix) { wcstring target; diff --git a/parse_tree.h b/parse_tree.h index 77b29fc8a..1835183df 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -34,7 +34,10 @@ struct parse_error_t size_t source_length; /** Return a string describing the error, suitable for presentation to the user. If skip_caret is false, the offending line with a caret is printed as well */ - wcstring describe(const wcstring &src, bool skip_caret = false) const; + wcstring describe(const wcstring &src) const; + + /** Return a string describing the error, suitable for presentation to the user, with the given prefix. If skip_caret is false, the offending line with a caret is printed as well */ + wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool skip_caret) const; }; typedef std::vector parse_error_list_t; diff --git a/parser.cpp b/parser.cpp index 7a75911bd..4f4a050e5 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3002,20 +3002,24 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro assert(err.source_start <= src.size()); size_t which_line = 1 + std::count(src.begin(), src.begin() + err.source_start, L'\n'); + // Don't include the caret if we're interactive, this is the first line of text, and our source is at its beginning, because then it's obvious + bool skip_caret = (get_is_interactive() && which_line == 1 && err.source_start == 0); + + wcstring prefix; + const wchar_t *filename = this->current_filename(); if (filename) { - append_format(*output, _(L"fish: line %lu of %ls:\n"), which_line, user_presentable_path(filename).c_str()); + prefix = format_string(_(L"%ls (line %lu): "), user_presentable_path(filename).c_str(), which_line); + //append_format(*output, _(L"%ls (line %lu):\n"), user_presentable_path(filename).c_str(), which_line); } else { - output->append(L"fish: "); + prefix = L"fish: "; + //output->append(L"fish: "); } - // Don't include the caret if we're interactive, this is the first line of text, and our source is at its beginning, because then it's obvious - bool skip_caret = (get_is_interactive() && which_line == 1 && err.source_start == 0); - - output->append(err.describe(src, skip_caret)); + output->append(err.describe_with_prefix(src, prefix, skip_caret)); output->push_back(L'\n'); this->stack_trace(0, *output); From 64953e26fc5e2de8afdcecdca3162c95d6416d30 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 17 Feb 2014 15:02:13 -0800 Subject: [PATCH 080/145] Clean up Xcode project and remove unnecessary ARCHS settings --- fish.xcodeproj/project.pbxproj | 8 +------- fish.xcodeproj/xcshareddata/xcschemes/Makefile.xcscheme | 2 +- fish.xcodeproj/xcshareddata/xcschemes/base.xcscheme | 2 +- fish.xcodeproj/xcshareddata/xcschemes/fish.app.xcscheme | 2 +- fish.xcodeproj/xcshareddata/xcschemes/fishd.xcscheme | 2 +- .../xcshareddata/xcschemes/install_tree.xcscheme | 2 +- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index af6315f0e..d2e9d2bcd 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -928,7 +928,7 @@ D0A084F213B3AC130099B651 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + LastUpgradeCheck = 0500; }; buildConfigurationList = D0A084F513B3AC130099B651 /* Build configuration list for PBXProject "fish" */; compatibilityVersion = "Xcode 3.2"; @@ -1338,7 +1338,6 @@ D007FDDA17136EAA00A52BE6 /* Release_C++11 */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; CLANG_CXX_LIBRARY = "libc++"; DEAD_CODE_STRIPPING = YES; @@ -1494,7 +1493,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -1520,7 +1518,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -1541,7 +1538,6 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_WARN_CONSTANT_CONVERSION = YES; @@ -1561,7 +1557,6 @@ D0A084F813B3AC130099B651 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_CPP_EXCEPTIONS = NO; GCC_ENABLE_CPP_RTTI = YES; @@ -1590,7 +1585,6 @@ D0A084F913B3AC130099B651 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_CPP_EXCEPTIONS = NO; diff --git a/fish.xcodeproj/xcshareddata/xcschemes/Makefile.xcscheme b/fish.xcodeproj/xcshareddata/xcschemes/Makefile.xcscheme index 5127cffc6..dac1dc40a 100644 --- a/fish.xcodeproj/xcshareddata/xcschemes/Makefile.xcscheme +++ b/fish.xcodeproj/xcshareddata/xcschemes/Makefile.xcscheme @@ -1,6 +1,6 @@ Date: Thu, 20 Feb 2014 10:26:57 -0800 Subject: [PATCH 081/145] Make fish install a command_not_found handler in non-interactive uses. Previously, fish's command_not_found handler would be installed in __fish_config_interactive. Errors that occured early in startup (e.g. in config.fish) or in non-interactive mode would therefore not be reported. With this change, fish now exposes its default cnf handler as __fish_default_command_not_found_handler . config.fish then installs a cnfh that invokes the default. When fish goes interactive, the initial cnfh is overwritten with a fancier one, that may in turn fall back to invoking the default. --- share/config.fish | 15 +++++++++++++++ share/functions/__fish_config_interactive.fish | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/share/config.fish b/share/config.fish index 5eac39bf3..455d40bb2 100644 --- a/share/config.fish +++ b/share/config.fish @@ -10,6 +10,21 @@ set -g IFS \n\ \t +# +# Create the default command_not_found handler +# +function __fish_default_command_not_found_handler + echo "fish: Unknown command '$argv'" >&2 +end + +# +# Hook up the default as the principal command_not_found handler +# This is likely to be overwritten in __fish_config_interactive +# +function __fish_command_not_found_handler --on-event fish_command_not_found + __fish_default_command_not_found_handler $argv +end + # # Set default search paths for completions and shellscript functions # unless they already exist diff --git a/share/functions/__fish_config_interactive.fish b/share/functions/__fish_config_interactive.fish index 3d7b0d371..f350644d4 100644 --- a/share/functions/__fish_config_interactive.fish +++ b/share/functions/__fish_config_interactive.fish @@ -233,6 +233,11 @@ function __fish_config_interactive -d "Initializations that should be performed # The first time a command is not found, look for command-not-found # This is not cheap so we try to avoid doing it during startup + # config.fish already installed a handler for noninteractive command-not-found, + # so delete it here since we are now interactive + functions -e __fish_command_not_found_handler + + # Now install our fancy variant function __fish_command_not_found_setup --on-event fish_command_not_found # Remove fish_command_not_found_setup so we only execute this once functions --erase __fish_command_not_found_setup @@ -262,7 +267,7 @@ function __fish_config_interactive -d "Initializations that should be performed # Use standard fish command not found handler otherwise else function __fish_command_not_found_handler --on-event fish_command_not_found - echo fish: Unknown command "'$argv'" >&2 + __fish_default_command_not_found_handler $argv end end __fish_command_not_found_handler $argv From adf5b036d646561dbcd7d3d5d04ab7a0e6827a87 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 20 Feb 2014 10:57:13 -0800 Subject: [PATCH 082/145] Fix to stop reporting config.fish execution as coming from "standard input" within backtraces --- fish.cpp | 2 ++ parser.cpp | 31 +++++++++++++++++++++---------- parser.h | 6 ++++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/fish.cpp b/fish.cpp index f1c5b898a..35b641ee0 100644 --- a/fish.cpp +++ b/fish.cpp @@ -227,7 +227,9 @@ static void source_config_in_directory(const wcstring &dir) const wcstring escaped_dir = escape_string(dir, ESCAPE_ALL); const wcstring cmd = L"builtin source " + escaped_dir + L"/config.fish 2>/dev/null"; parser_t &parser = parser_t::principal_parser(); + parser.set_is_within_fish_initialization(true); parser.eval(cmd, io_chain_t(), TOP); + parser.set_is_within_fish_initialization(false); } /** diff --git a/parser.cpp b/parser.cpp index 4f4a050e5..625a0678b 100644 --- a/parser.cpp +++ b/parser.cpp @@ -299,6 +299,7 @@ parser_t::parser_t(enum parser_type_t type, bool errors) : error_code(0), err_pos(0), cancellation_requested(false), + is_within_fish_initialization(false), current_tokenizer(NULL), current_tokenizer_pos(0), job_start_pos(0), @@ -322,6 +323,11 @@ parser_t &parser_t::principal_parser(void) return parser; } +void parser_t::set_is_within_fish_initialization(bool flag) +{ + is_within_fish_initialization = flag; +} + void parser_t::skip_all_blocks(void) { /* Tell all blocks to skip */ @@ -858,10 +864,13 @@ void parser_t::stack_trace(size_t block_idx, wcstring &buff) const b->src_lineno, user_presentable_path(file).c_str()); } + else if (is_within_fish_initialization) + { + append_format(buff, _(L"\tcalled during startup\n")); + } else { - append_format(buff, - _(L"\tcalled on standard input\n")); + append_format(buff, _(L"\tcalled on standard input\n")); } if (b->type() == FUNCTION_CALL) @@ -1064,15 +1073,17 @@ const wchar_t *parser_t::current_line() { int prev_width = my_wcswidth(lineinfo.c_str()); if (file) - append_format(lineinfo, - _(L"%ls (line %d): "), - file, - lineno); + { + append_format(lineinfo, _(L"%ls (line %d): "), file, lineno); + } + else if (is_within_fish_initialization) + { + append_format(lineinfo, L"%ls: ", _(L"Startup"), lineno); + } else - append_format(lineinfo, - L"%ls: ", - _(L"Standard input"), - lineno); + { + append_format(lineinfo, L"%ls: ", _(L"Standard input"), lineno); + } offset = my_wcswidth(lineinfo.c_str()) - prev_width; } else diff --git a/parser.h b/parser.h index 491e569f5..f4dfcac25 100644 --- a/parser.h +++ b/parser.h @@ -283,6 +283,9 @@ private: /** Indication that we should skip all blocks */ bool cancellation_requested; + + /** Indicates that we are within the process of initializing fish */ + bool is_within_fish_initialization; /** Stack of execution contexts. We own these pointers and must delete them */ std::vector execution_contexts; @@ -447,6 +450,9 @@ public: { return my_job_list; } + + /* Hackish. In order to correctly report the origin of code with no associated file, we need to know whether it's run during initialization or not. */ + void set_is_within_fish_initialization(bool flag); /** Pushes the block. pop_block will call delete on it. */ void push_block(block_t *newv); From 8eaabacf44698f7cde0c4d10cecb76c06b51b1b7 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 20 Feb 2014 13:30:26 -0800 Subject: [PATCH 083/145] Allow double-tapping tab to fully disclose pager, per #291 --- pager.cpp | 10 +++++++++- pager.h | 3 +++ reader.cpp | 12 ++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pager.cpp b/pager.cpp index 16456bc9d..b137bca2f 100644 --- a/pager.cpp +++ b/pager.cpp @@ -449,7 +449,9 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co int term_width = this->available_term_width; int term_height = this->available_term_height - 1 - (search_field_shown ? 1 : 0); // we always subtract 1 to make room for a comment row if (! this->fully_disclosed) + { term_height = mini(term_height, PAGER_UNDISCLOSED_MAX_ROWS); + } size_t row_count = divide_round_up(lst.size(), cols); @@ -691,7 +693,8 @@ void pager_t::update_rendering(page_rendering_t *rendering) const rendering->selected_completion_idx != this->visual_selected_completion_index(rendering->rows, rendering->cols) || rendering->search_field_shown != this->search_field_shown || rendering->search_field_line.text != this->search_field_line.text || - rendering->search_field_line.position != this->search_field_line.position) + rendering->search_field_line.position != this->search_field_line.position || + (rendering->remaining_to_disclose > 0 && this->fully_disclosed)) { *rendering = this->render(); } @@ -934,6 +937,11 @@ bool pager_t::is_navigating_contents() const return selected_completion_idx != PAGER_SELECTION_NONE; } +void pager_t::set_fully_disclosed(bool flag) +{ + fully_disclosed = flag; +} + const completion_t *pager_t::selected_completion(const page_rendering_t &rendering) const { const completion_t * result = NULL; diff --git a/pager.h b/pager.h index 8253dc113..a1c024a6e 100644 --- a/pager.h +++ b/pager.h @@ -159,6 +159,9 @@ class pager_t /* Indicates if we are navigating our contents */ bool is_navigating_contents() const; + /* Become fully disclosed */ + void set_fully_disclosed(bool flag); + /* Position of the cursor */ size_t cursor_position() const; diff --git a/reader.cpp b/reader.cpp index db83e4b9d..250884ffb 100644 --- a/reader.cpp +++ b/reader.cpp @@ -3337,8 +3337,16 @@ const wchar_t *reader_readline(void) editable_line_t *el = &data->command_line; if (data->is_navigating_pager_contents() || (! comp_empty && last_char == R_COMPLETE)) { - /* The user typed R_COMPLETE more than once in a row. Cycle through our available completions. */ - select_completion_in_direction(c == R_COMPLETE ? direction_next : direction_prev); + /* The user typed R_COMPLETE more than once in a row. If we are not yet fully disclosed, then become so; otherwise cycle through our available completions. */ + if (data->current_page_rendering.remaining_to_disclose > 0) + { + data->pager.set_fully_disclosed(true); + reader_repaint_needed(); + } + else + { + select_completion_in_direction(c == R_COMPLETE ? direction_next : direction_prev); + } } else { From a57077aba3780e011783bbd27485fd8c4eadfad0 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 21 Feb 2014 18:01:40 -0800 Subject: [PATCH 084/145] Correctly color "end" command, and variable name in for loop. --- fish_tests.cpp | 14 ++++++++++++-- highlight.cpp | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/fish_tests.cpp b/fish_tests.cpp index a9f53911e..7e82193cf 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -2761,10 +2761,20 @@ static void test_highlighting(void) {L"]", highlight_spec_operator}, {NULL, -1} }; + + const highlight_component_t components12[] = + { + {L"for", highlight_spec_command}, + {L"i", highlight_spec_param}, + {L"in", highlight_spec_command}, + {L"1 2 3", highlight_spec_param}, + {L";", highlight_spec_statement_terminator}, + {L"end", highlight_spec_command}, + {NULL, -1} + }; - - const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9, components10, components11}; + const highlight_component_t *tests[] = {components1, components2, components3, components4, components5, components6, components7, components8, components9, components10, components11, components12}; for (size_t which = 0; which < sizeof tests / sizeof *tests; which++) { const highlight_component_t *components = tests[which]; diff --git a/highlight.cpp b/highlight.cpp index 55db8a5a9..e8afa203d 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -937,10 +937,10 @@ class highlighter_t void color_redirections(const parse_node_t &list_node); /* Color all the children of the command with the given type */ - void color_children(const parse_node_t &parent, parse_token_type_t type, int color); + void color_children(const parse_node_t &parent, parse_token_type_t type, highlight_spec_t color); /* Colors the source range of a node with a given color */ - void color_node(const parse_node_t &node, int color); + void color_node(const parse_node_t &node, highlight_spec_t color); public: @@ -956,7 +956,7 @@ public: const color_array_t &highlight(); }; -void highlighter_t::color_node(const parse_node_t &node, int color) +void highlighter_t::color_node(const parse_node_t &node, highlight_spec_t color) { // Can only color nodes with valid source ranges if (! node.has_source()) @@ -1219,7 +1219,7 @@ void highlighter_t::color_redirections(const parse_node_t &list_node) } /* Color all the children of the command with the given type */ -void highlighter_t::color_children(const parse_node_t &parent, parse_token_type_t type, int color) +void highlighter_t::color_children(const parse_node_t &parent, parse_token_type_t type, highlight_spec_t color) { for (node_offset_t idx=0; idx < parent.child_count; idx++) { @@ -1310,7 +1310,6 @@ const highlighter_t::color_array_t & highlighter_t::highlight() switch (node.type) { // Color direct string descendants, e.g. 'for' and 'in'. - case symbol_for_header: case symbol_while_header: case symbol_begin_header: case symbol_function_header: @@ -1323,8 +1322,30 @@ const highlighter_t::color_array_t & highlighter_t::highlight() case symbol_if_statement: { this->color_children(node, parse_token_type_string, highlight_spec_command); - // Color the 'end' - this->color_children(node, symbol_end_command, highlight_spec_command); + } + break; + + case symbol_for_header: + { + // Color the 'for' and 'in' as commands + const parse_node_t *literal_for_node = this->parse_tree.get_child(node, 0, parse_token_type_string); + const parse_node_t *literal_in_node = this->parse_tree.get_child(node, 2, parse_token_type_string); + this->color_node(*literal_for_node, highlight_spec_command); + this->color_node(*literal_in_node, highlight_spec_command); + + // Color the variable name appropriately + // We don't expand this during execution, so just look for invalid chars + const parse_node_t *var_name_node = this->parse_tree.get_child(node, 1, parse_token_type_string); + if (var_name_node->has_source()) + { + size_t source_end = var_name_node->source_start + var_name_node->source_length; + for (size_t i = var_name_node->source_start; i < source_end; i++) + { + wchar_t wc = buff.at(i); + highlight_spec_t color = wcsvarchr(wc) ? highlight_spec_param : highlight_spec_error; + color_array.at(i) = color; + } + } } break; @@ -1370,6 +1391,10 @@ const highlighter_t::color_array_t & highlighter_t::highlight() } } break; + + case symbol_end_command: + this->color_node(node, highlight_spec_command); + break; case parse_special_type_parse_error: case parse_special_type_tokenizer_error: From bc4340962480cc7e9d18a2057ca180f6380476cc Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 21 Feb 2014 18:20:51 -0800 Subject: [PATCH 085/145] Expand the variable name as an ordinary parameter in for loops. Added test for it too. --- highlight.cpp | 14 ++------------ parse_constants.h | 3 +++ parse_execution.cpp | 9 +++++++-- tests/test9.in | 9 +++++++++ tests/test9.out | 2 ++ 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index e8afa203d..eaaec750a 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -1333,19 +1333,9 @@ const highlighter_t::color_array_t & highlighter_t::highlight() this->color_node(*literal_for_node, highlight_spec_command); this->color_node(*literal_in_node, highlight_spec_command); - // Color the variable name appropriately - // We don't expand this during execution, so just look for invalid chars + // Color the variable name as a parameter const parse_node_t *var_name_node = this->parse_tree.get_child(node, 1, parse_token_type_string); - if (var_name_node->has_source()) - { - size_t source_end = var_name_node->source_start + var_name_node->source_length; - for (size_t i = var_name_node->source_start; i < source_end; i++) - { - wchar_t wc = buff.at(i); - highlight_spec_t color = wcsvarchr(wc) ? highlight_spec_param : highlight_spec_error; - color_array.at(i) = color; - } - } + this->color_argument(*var_name_node); } break; diff --git a/parse_constants.h b/parse_constants.h index 32115c017..884b76f73 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -157,6 +157,9 @@ typedef unsigned int parser_test_error_bits_t; /** Error message when encountering an illegal command name */ #define ILLEGAL_CMD_ERR_MSG _( L"Illegal command name '%ls'") +/** Error message when encountering a failed expansion, e.g. for the variable name in for loops */ +#define FAILED_EXPANSION_VARIABLE_NAME_ERR_MSG _( L"Unable to expand variable name '%ls'") + /** Error message when encountering an illegal file descriptor */ #define ILLEGAL_FD_ERR_MSG _( L"Illegal file descriptor in redirection '%ls'") diff --git a/parse_execution.cpp b/parse_execution.cpp index f2eaae251..726f29207 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -436,9 +436,14 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars assert(header.type == symbol_for_header); assert(block_contents.type == symbol_job_list); - /* Get the variable name: `for var_name in ...` */ + /* Get the variable name: `for var_name in ...`. We expand the variable name. It better result in just one. */ const parse_node_t &var_name_node = *get_child(header, 1, parse_token_type_string); - const wcstring for_var_name = get_source(var_name_node); + wcstring for_var_name = get_source(var_name_node); + if (! expand_one(for_var_name, 0)) + { + report_error(var_name_node, FAILED_EXPANSION_VARIABLE_NAME_ERR_MSG, for_var_name.c_str()); + return parse_execution_errored; + } /* Get the contents to iterate over. */ const parse_node_t *unmatched_wildcard = NULL; diff --git a/tests/test9.in b/tests/test9.in index e449a21dd..32a537f78 100644 --- a/tests/test9.in +++ b/tests/test9.in @@ -70,4 +70,13 @@ end # Test implicit cd. This should do nothing. ./ +# Test special for loop expansion +# Here we the name of the variable is derived from another variable +echo "Testing for loop" +set var1 var2 +for $var1 in 1 2 3 + echo -n $var2 +end +echo + false diff --git a/tests/test9.out b/tests/test9.out index cf9054f8c..e44b26044 100644 --- a/tests/test9.out +++ b/tests/test9.out @@ -8,3 +8,5 @@ Foop Foop Foop Doop +Testing for loop +123 From 1de819e3def2458a8a39b611e9dbf95004f777bf Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 21 Feb 2014 19:55:55 -0800 Subject: [PATCH 086/145] Fix for busted tab completions in for loop arguments, switch statements, and other syntactic constructs. Fixes #1309 --- complete.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/complete.cpp b/complete.cpp index 098a4ad26..9b8d5c0b1 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1872,9 +1872,7 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps */ const wcstring current_token = tok_begin; - /* Get the quote type of the current token */ - - + /* Unconditionally complete variables and processes. This is a little weird since we will happily complete variables even in e.g. command position, despite the fact that they are invalid there. */ if (!done) { done = completer.try_complete_variable(current_token) || completer.try_complete_user(current_token); @@ -1888,13 +1886,21 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps parse_node_tree_t tree; parse_tree_from_string(cmd, parse_flag_continue_after_error | parse_flag_accept_incomplete_tokens, &tree, NULL); - /* Find the plain statement that contains the position. We have to backtrack past spaces (#1261). So this will be at either the last space character, or after the end of the string */ + /* Find any plain statement that contains the position. We have to backtrack past spaces (#1261). So this will be at either the last space character, or after the end of the string */ size_t adjusted_pos = pos; while (adjusted_pos > 0 && cmd.at(adjusted_pos - 1) == L' ') + { adjusted_pos--; - + } + const parse_node_t *plain_statement = tree.find_node_matching_source_location(symbol_plain_statement, adjusted_pos, NULL); - if (plain_statement != NULL) + if (plain_statement == NULL) + { + /* Not part of a plain statement. This could be e.g. a for loop header, case expression, etc. Do generic file completions (#1309). If we had to backtrack, it means there was whitespace; don't do an autosuggestion in that case. */ + bool no_file = (flags & COMPLETION_REQUEST_AUTOSUGGESTION) && (adjusted_pos < pos); + completer.complete_param_expand(current_token, ! no_file); + } + else { assert(plain_statement->has_source() && plain_statement->type == symbol_plain_statement); @@ -1990,7 +1996,9 @@ void complete(const wcstring &cmd_with_subcmds, std::vector &comps /* And if we're autosuggesting, and the token is empty, don't do file suggestions */ if ((flags & COMPLETION_REQUEST_AUTOSUGGESTION) && current_argument_unescape.empty()) + { do_file = false; + } /* This function wants the unescaped string */ completer.complete_param_expand(current_token, do_file); From de2eea05b4f2b9443d8896dc8c52e0200711a64e Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 22 Feb 2014 22:24:23 -0800 Subject: [PATCH 087/145] Turn on the new pager by default, as described in #291 --- parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parser.cpp b/parser.cpp index 625a0678b..0a4f004ae 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3147,7 +3147,7 @@ bool pager_use_inline(void) env_var_t var = env_get_string(L"fish_new_pager"); if (var.missing_or_empty()) { - return 0; + return 1; } else { From 5e7c01c2518d0e0dd412f675b48ac59e8e84dc93 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 24 Feb 2014 01:56:02 -0800 Subject: [PATCH 088/145] Rework color editing in fish_config. Bury customization mode a bit: initially the user only sees the various themes, and has to activate customization mode to change colors. Tweak the appearance as well. --- share/tools/web_config/fishconfig.css | 57 ++++-- share/tools/web_config/index.html | 2 +- share/tools/web_config/js/colorutils.js | 16 ++ share/tools/web_config/js/controllers.js | 55 +++++- share/tools/web_config/partials/colors.html | 186 ++++++++++++++------ 5 files changed, 247 insertions(+), 69 deletions(-) diff --git a/share/tools/web_config/fishconfig.css b/share/tools/web_config/fishconfig.css index 39d1201ab..f018e4edc 100644 --- a/share/tools/web_config/fishconfig.css +++ b/share/tools/web_config/fishconfig.css @@ -1,5 +1,5 @@ body { - background-color: #292939; + background-color: #292929; font-family: Courier, "Courier New", monospace; color: white; } @@ -20,7 +20,7 @@ body { #tab_parent { display: table; width: 100%; - height: 50px;; + height: 50px; } .tab { @@ -269,25 +269,26 @@ body { } .colorpicker_term256_row { + padding: 0; } .colorpicker_term256_cell { width: 18px; height: 18px; border: solid black 1px; + padding: 0; } .colorpicker_term256_selection_indicator { - width: 19px; + width: 18px; height: 16px; - margin: -2px; - border: solid white 3px; + margin: -4px; + border: solid white 4px; position: relative; z-index: 2; } .colorpicker_cell_selected { - border: dashed white 3px; width: 12px; height: 12px; } @@ -302,6 +303,18 @@ body { position: relative; /* so that our absolutely positioned elements work */ } +.cs_clickable { + border: dotted 1px #777; + padding: 4px; + margin: -5px; +} + +.cs_editing { + border: solid 3px #3399FF; + padding: 4px; + margin: -7px; +} + .colorpicker_text_sample_tight { font-size: 10pt; line-height: 1.2em; @@ -320,14 +333,22 @@ body { } .color_picker_background_cells div { - width: 14px; - height: 14px; + width: 24px; + height: 24px; border-style: solid; border-color: #777; border-width: 0 0 1px 1px; /* top right bottom left */ float: left; } +.color_picker_background_cells span { + float: left; + font-size: 12pt; + padding-top: 2px; + padding-right: 8px; + cursor: pointer; +} + .color_scheme_choice_label { margin-left: 10px; margin-bottom: 3px; @@ -336,9 +357,17 @@ body { white-space: normal; } +.color_scheme_choices_scrollview { + border-top: 1px solid #333; + padding-top: 5px; + overflow: scroll; + max-height: 18em; /* about two and a half boxes */ +} + .color_scheme_choices_list { overflow-y: hidden; /* makes our height account for floats */ padding: 0 10px 15px 10px; /* top right bottom left */ + bottom: 0px; } .color_scheme_choice_container { @@ -399,11 +428,11 @@ img.delete_icon { position: relative; /* so that our absolutely positioned elements work */ } -.save_button, .prompt_save_button { +.save_button, .prompt_save_button, .colors_close_button, .customize_theme_button { border-radius: 5px; border: solid rgba(71,71,71,0.5) 1px; padding: 5px 8px; - font-size: 10pt; + font-size: 13pt; display: inline-block; margin-top: 12px; background-color: rgba(128,128,128,0.2); @@ -411,6 +440,14 @@ img.delete_icon { cursor: pointer; } +.save_button:hover, .customize_theme_button:hover { + border-color: rgba(71,71,71,0.9); +} + +.button_highlight { + background-color: rgba(128,128,128,0.6) +} + .prompt_save_button { background-color: #333; border: solid #525252 1px; diff --git a/share/tools/web_config/index.html b/share/tools/web_config/index.html index ba25a893c..8173238dd 100644 --- a/share/tools/web_config/index.html +++ b/share/tools/web_config/index.html @@ -15,7 +15,7 @@
- fish

+ fish

colors
diff --git a/share/tools/web_config/js/colorutils.js b/share/tools/web_config/js/colorutils.js index b78b82a7d..2bc24d971 100644 --- a/share/tools/web_config/js/colorutils.js +++ b/share/tools/web_config/js/colorutils.js @@ -243,6 +243,17 @@ term_256_colors = [ //247 "ffffff", ] +/* Given a color setting name like 'autosuggestion', return the user visible name we present */ +function user_visible_title_for_setting_name(name) { + if (! name) return ''; + switch (name) { + case 'param': return 'parameters'; + case 'escape': return 'escape sequences'; + case 'end': return 'statement terminators'; + default: return name + 's'; + } +} + /* Returns array of values from a dictionary (or any object) */ function dict_values(dict) { var result = []; @@ -265,6 +276,11 @@ function get_colors_as_nested_array(colors, items_per_row) { /* Given an RGB color as a hex string, like FF0033, convert to HSL, apply the function to adjust its lightness, then return the new color as an RGB string */ function adjust_lightness(color_str, func) { + /* Strip off hash prefix */ + if (color_str[0] == '#') { + color_str = color_str.substring(1); + } + /* Hack to handle for example F00 */ if (color_str.length == 3) { color_str = color_str[0] + color_str[0] + color_str[1] + color_str[1] + color_str[2] + color_str[2] diff --git a/share/tools/web_config/js/controllers.js b/share/tools/web_config/js/controllers.js index 385e4e375..796e7729a 100644 --- a/share/tools/web_config/js/controllers.js +++ b/share/tools/web_config/js/controllers.js @@ -12,23 +12,27 @@ controllers.controller("main", function($scope, $location) { controllers.controller("colorsController", function($scope, $http) { $scope.changeSelectedColorScheme= function(newScheme) { - $scope.selectedColorScheme = newScheme; + $scope.selectedColorScheme = angular.copy(newScheme); if ($scope.selectedColorScheme.preferred_background) { $scope.terminalBackgroundColor = $scope.selectedColorScheme.preferred_background; } - $scope.selectedColorSetting = 'command'; + $scope.selectedColorSetting = false; + $scope.customizationActive = false; + $scope.csEditingType = false; $scope.colorArraysArray = $scope.getColorArraysArray(); //TODO: Save button should be shown only when colors are changed $scope.showSaveButton = true; + + $scope.noteThemeChanged(); } $scope.changeTerminalBackgroundColor = function(color) { $scope.terminalBackgroundColor = color; } - $scope.text_color_for_color = function(color) { - return text_color_for_color(color); - } + $scope.text_color_for_color = text_color_for_color; + + $scope.border_color_for_color = border_color_for_color; $scope.getColorArraysArray = function() { var result = null; @@ -38,13 +42,36 @@ controllers.controller("colorsController", function($scope, $http) { result = get_colors_as_nested_array(term_256_colors, 32); return result; } - + + $scope.beginCustomizationWithSetting = function(setting) { + if (! $scope.customizationActive) { + $scope.customizationActive = true; + $scope.selectedColorSetting = setting; + $scope.csEditingType = setting; + $scope.csUserVisibleTitle = user_visible_title_for_setting_name(setting); + } + } + $scope.selectColorSetting = function(name) { - $scope.selectedColorSetting = name; + $scope.selectedColorSetting = name; + $scope.csEditingType = $scope.customizationActive ? name : ''; + $scope.csUserVisibleTitle = user_visible_title_for_setting_name(name); + $scope.beginCustomizationWithSetting(name); + } + + $scope.toggleCustomizationActive = function() { + if (! $scope.customizationActive) { + $scope.beginCustomizationWithSetting($scope.selectedColorSetting || 'command'); + } else { + $scope.customizationActive = false; + $scope.selectedColorSetting = ''; + $scope.csEditingType = ''; + } } $scope.changeSelectedTextColor = function(color) { $scope.selectedColorScheme[$scope.selectedColorSetting] = color; + $scope.noteThemeChanged(); } $scope.sampleTerminalBackgroundColors = ['white', '#' + solarized.base3, '#300', '#003', '#' + solarized.base03, '#232323', 'black']; @@ -65,11 +92,25 @@ controllers.controller("colorsController", function($scope, $http) { $scope.changeSelectedColorScheme(currentScheme); })}; + $scope.saveThemeButtonTitle = "Set Theme"; + + $scope.noteThemeChanged = function() { + $scope.saveThemeButtonTitle = "Set Theme"; + } + $scope.setTheme = function() { var settingNames = ["autosuggestion", "command", "param", "redirection", "comment", "error", "quote", "end"]; + var remaining = settingNames.length; for (name in settingNames) { var postData = "what=" + settingNames[name] + "&color=" + $scope.selectedColorScheme[settingNames[name]] + "&background_color=&bold=&underline="; $http.post("/set_color/", postData, { headers: {'Content-Type': 'application/x-www-form-urlencoded'} }).success(function(data, status, headers, config) { + if (status == 200) { + remaining -= 1; + if (remaining == 0) { + /* All styles set! */ + $scope.saveThemeButtonTitle = "Theme Set!"; + } + } }) } }; diff --git a/share/tools/web_config/partials/colors.html b/share/tools/web_config/partials/colors.html index 69bf6a479..3738ec2b8 100644 --- a/share/tools/web_config/partials/colors.html +++ b/share/tools/web_config/partials/colors.html @@ -1,65 +1,149 @@
- Click to customize each color:
- {{ selectedColorScheme.name }}
+ {{ selectedColorScheme.name }}
-
+ Background: +
- /bright/vixens - jump - | - dozy - "fowl" - > quack - & -
- echo - 'Errors are the portals to discovery -
- # This is a comment -
- This is an autosuggestion + /bright/vixens + + jump - Apply + | + + dozy + + "fowl" + + > quack + + & + +
+ + echo + + 'Errors are the portals to discovery + +
+ + # This is a comment + +
+ + This is an autosuggestion + + +
+ + Customize + + {{saveThemeButtonTitle}} +
- - - - - - - -
-
-
+
+
Choose a color for {{csUserVisibleTitle}}:
+ + + + + + + +
+
+
+
-
-
-
- - {{colorScheme.name }} -
-
- /bright/vixens - jump - | - dozy - "fowl" - > quack - & -
- echo - 'Errors are the portals to discovery -
- # This is a comment -
- This is an autosuggestion -
-
+
Preview a theme below:
+ +
+
+
+
+ + {{colorScheme.name}} +
+
+ /bright/vixens + jump + | + dozy + "fowl" + > quack + & +
+ echo + 'Errors are the portals to discovery +
+ # This is a comment +
+ This is an autosuggestion +
+
+
From 688ea28bed24ce74ab47f20f0f9471d7d4c8c1a2 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 24 Feb 2014 09:54:30 -0800 Subject: [PATCH 089/145] Optimize the tokenize_variable_array hot spot to do less string copying --- common.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common.cpp b/common.cpp index f2240b53c..08e8d7a1f 100644 --- a/common.cpp +++ b/common.cpp @@ -1674,14 +1674,17 @@ int common_get_height() void tokenize_variable_array(const wcstring &val, std::vector &out) { size_t pos = 0, end = val.size(); - while (pos < end) + while (pos <= end) { size_t next_pos = val.find(ARRAY_SEP, pos); - if (next_pos == wcstring::npos) break; - out.push_back(val.substr(pos, next_pos - pos)); - pos = next_pos + 1; //skip the separator + if (next_pos == wcstring::npos) + { + next_pos = end; + } + out.resize(out.size() + 1); + out.back().assign(val, pos, next_pos - pos); + pos = next_pos + 1; //skip the separator, or skip past the end } - out.push_back(val.substr(pos, end - pos)); } bool string_prefixes_string(const wchar_t *proposed_prefix, const wcstring &value) From 3224062b3237f518b7854cde5e8548c83d9a2066 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 24 Feb 2014 13:06:26 -0800 Subject: [PATCH 090/145] Optimize some fast paths in autoload loading. Use an iterator to avoid doing multiple set lookups, and cache the tokenized path to avoid multiple memory allocations. --- autoload.cpp | 29 ++++++++++++++--------------- autoload.h | 8 +++----- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/autoload.cpp b/autoload.cpp index e5d2334df..e2e532de2 100644 --- a/autoload.cpp +++ b/autoload.cpp @@ -48,9 +48,7 @@ autoload_t::autoload_t(const wcstring &env_var_name_var, const builtin_script_t lock(), env_var_name(env_var_name_var), builtin_scripts(scripts), - builtin_script_count(script_count), - last_path(), - is_loading_set() + builtin_script_count(script_count) { pthread_mutex_init(&lock, NULL); } @@ -94,33 +92,34 @@ int autoload_t::load(const wcstring &cmd, bool reload) if (path_var != this->last_path) { this->last_path = path_var; + this->last_path_tokenized.clear(); + tokenize_variable_array(this->last_path, this->last_path_tokenized); + scoped_lock locker(lock); this->evict_all_nodes(); } + /* Mark that we're loading this. Hang onto the iterator for fast erasing later. Note that std::set has guarantees about not invalidating iterators, so this is safe to do across the callouts below. */ + typedef std::set::iterator set_iterator_t; + std::pair insert_result = is_loading_set.insert(cmd); + set_iterator_t where = insert_result.first; + bool inserted = insert_result.second; + /** Warn and fail on infinite recursion. It's OK to do this because this function is only called on the main thread. */ - if (this->is_loading(cmd)) + if (! inserted) { + /* We failed to insert */ debug(0, _(L"Could not autoload item '%ls', it is already being autoloaded. " L"This is a circular dependency in the autoloading scripts, please remove it."), cmd.c_str()); return 1; } - - /* Mark that we're loading this */ - is_loading_set.insert(cmd); - - /* Get the list of paths from which we will try to load */ - std::vector path_list; - tokenize_variable_array(path_var, path_list); - /* Try loading it */ - res = this->locate_file_and_maybe_load_it(cmd, true, reload, path_list); + res = this->locate_file_and_maybe_load_it(cmd, true, reload, this->last_path_tokenized); /* Clean up */ - bool erased = !! is_loading_set.erase(cmd); - assert(erased); + is_loading_set.erase(where); return res; } diff --git a/autoload.h b/autoload.h index 6c17c0b7b..2f1e00d3d 100644 --- a/autoload.h +++ b/autoload.h @@ -64,6 +64,9 @@ private: /** The path from which we most recently autoloaded */ wcstring last_path; + + /** That path, tokenized (split on separators) */ + wcstring_list_t last_path_tokenized; /** A table containing all the files that are currently being @@ -71,11 +74,6 @@ private: */ std::set is_loading_set; - bool is_loading(const wcstring &name) const - { - return is_loading_set.find(name) != is_loading_set.end(); - } - void remove_all_functions(void) { this->evict_all_nodes(); From 6d749789ce240a3e6f1447777db63fd8e7525560 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Thu, 27 Feb 2014 14:47:08 +0100 Subject: [PATCH 091/145] Use 127.0.0.1 for fish config. Before this change, fish config used 0 as its address. However, this isn't a good idea from security point of view, as web service can be accessed from everywhere, and do anything on the account it was ran on. This also deals with firewalls which block the access to 0 even from the host machine itself. It possibly might fix #673, but I'm not sure. --- share/tools/web_config/webconfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/tools/web_config/webconfig.py b/share/tools/web_config/webconfig.py index 3eb110bb4..1236885dd 100755 --- a/share/tools/web_config/webconfig.py +++ b/share/tools/web_config/webconfig.py @@ -812,7 +812,7 @@ PORT = 8000 while PORT <= 9000: try: Handler = FishConfigHTTPRequestHandler - httpd = SocketServer.TCPServer(("", PORT), Handler) + httpd = SocketServer.TCPServer(("127.0.0.1", PORT), Handler) # Success break except socket.error: From ddcd2b0810087394d17bd80c46d74cca0acd8924 Mon Sep 17 00:00:00 2001 From: Geoff Nixon Date: Thu, 27 Feb 2014 03:15:00 -0800 Subject: [PATCH 092/145] Dead stores --- builtin_test.cpp | 2 -- common.cpp | 6 +----- fish.cpp | 2 -- history.cpp | 7 +------ pager.cpp | 4 +--- parse_execution.cpp | 1 - parse_tree.cpp | 1 - parser.cpp | 4 ---- proc.cpp | 1 - 9 files changed, 3 insertions(+), 25 deletions(-) diff --git a/builtin_test.cpp b/builtin_test.cpp index 0d16823af..a2045cc4b 100644 --- a/builtin_test.cpp +++ b/builtin_test.cpp @@ -652,7 +652,6 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err) err.append(L"test: "); err.append(parser.errors.at(i)); err.push_back(L'\n'); - errored = true; // For now we only show the first error break; } @@ -667,7 +666,6 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err) { append_format(err, L"test: unexpected argument at index %lu: '%ls'\n", (unsigned long)result->range.end, args.at(result->range.end).c_str()); } - errored = true; delete result; result = NULL; diff --git a/common.cpp b/common.cpp index 08e8d7a1f..7434c31d9 100644 --- a/common.cpp +++ b/common.cpp @@ -866,11 +866,7 @@ void write_screen(const wcstring &msg, wcstring &buff) /* If token is zero character long, we don't do anything */ - if (pos == start) - { - start = pos = pos+1; - } - else if (overflow) + if (overflow) { /* In case of overflow, we print a newline, except if we already are at position 0 diff --git a/fish.cpp b/fish.cpp index 35b641ee0..53262929b 100644 --- a/fish.cpp +++ b/fish.cpp @@ -213,8 +213,6 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0) paths.sysconf = L"" SYSCONFDIR "/fish"; paths.doc = L"" DOCDIR; paths.bin = L"" BINDIR; - - done = true; } return paths; diff --git a/history.cpp b/history.cpp index f8183f5d8..0c7bc6184 100644 --- a/history.cpp +++ b/history.cpp @@ -1338,7 +1338,7 @@ bool history_t::save_internal_via_rewrite() for (size_t attempt = 0; attempt < 10 && out_fd == -1; attempt++) { char *narrow_str = wcs2str(tmp_name_template.c_str()); - if (narrow_str && mktemp(narrow_str)) + if (narrow_str && mkstemp(narrow_str)) { /* It was successfully templated; try opening it atomically */ tmp_name = str2wcstring(narrow_str); @@ -1507,11 +1507,6 @@ void history_t::save_internal(bool vacuum) /* Try doing a fast append */ ok = save_internal_via_appending(); } - if (! ok) - { - /* We did not or could not append; rewrite the file ("vacuum" it) */ - ok = this->save_internal_via_rewrite(); - } } void history_t::save(void) diff --git a/pager.cpp b/pager.cpp index b137bca2f..0fa7eb4c7 100644 --- a/pager.cpp +++ b/pager.cpp @@ -147,7 +147,6 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s } written += print_max(L"(", packed_color, 1, false, &line_data); written += print_max(c->desc, packed_color, desc_width, false, &line_data); - written += print_max(L")", packed_color, 1, false, &line_data); } else { @@ -635,7 +634,6 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co /* We limit the width to term_width - 1 */ int search_field_written = print_max(SEARCH_FIELD_PROMPT, highlight_spec_normal, term_width - 1, false, search_field); - search_field_written += print_max(search_field_text, highlight_modifier_force_underline, term_width - search_field_written - 1, false, search_field); } } @@ -747,7 +745,7 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio } /* Ok, we had something selected already. Select something different. */ - size_t new_selected_completion_idx = selected_completion_idx; + size_t new_selected_completion_idx; if (! selection_direction_is_cardinal(direction)) { /* Next, previous, or deselect, all easy */ diff --git a/parse_execution.cpp b/parse_execution.cpp index 726f29207..d57b8e7ec 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -532,7 +532,6 @@ parse_execution_result_t parse_execution_context_t::run_switch_statement(const p { /* Store the node that failed to expand */ report_error(switch_value_node, WILDCARD_ERR_MSG, switch_value.c_str()); - ret = parse_execution_errored; break; } diff --git a/parse_tree.cpp b/parse_tree.cpp index 484b79687..eb139e633 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -987,7 +987,6 @@ void parse_ll_t::accept_tokens(parse_token_t token1, parse_token_t token2) { fprintf(stderr, "Consumed token %ls\n", token1.describe().c_str()); } - consumed = true; break; } diff --git a/parser.cpp b/parser.cpp index 0a4f004ae..9435d3d12 100644 --- a/parser.cpp +++ b/parser.cpp @@ -2592,10 +2592,6 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl /* Execute the first node */ int result = 1; - if (! tree.empty()) - { - result = this->eval_block_node(0, io, block_type); - } /* Clean up the execution context stack */ assert(! execution_contexts.empty() && execution_contexts.back() == ctx); diff --git a/proc.cpp b/proc.cpp index 2ea0d1bd4..9c66292dc 100644 --- a/proc.cpp +++ b/proc.cpp @@ -398,7 +398,6 @@ static void mark_process_status(const job_t *j, process_t *p, int status) handler. If things aren't working properly, it's safer to give up. */ - ignore = write(2, mess, strlen(mess)); } } From 18dd6f58e3b9bc44d9850947bdb3f17c2f05f2cf Mon Sep 17 00:00:00 2001 From: Geoff Nixon Date: Thu, 27 Feb 2014 02:55:04 -0800 Subject: [PATCH 093/145] Fixes .c -> .cpp in comments. For doxygen. --- Doxyfile | 2 +- builtin.cpp | 2 +- builtin_commandline.cpp | 2 +- builtin_complete.cpp | 6 +++--- builtin_jobs.cpp | 2 +- builtin_printf.cpp | 3 +++ builtin_set.cpp | 2 +- builtin_test.cpp | 1 - builtin_ulimit.cpp | 2 +- common.cpp | 2 +- complete.cpp | 2 +- env.cpp | 2 +- env_universal.cpp | 6 ++++++ env_universal_common.cpp | 3 +-- event.cpp | 2 +- exec.cpp | 2 +- expand.cpp | 2 +- fallback.cpp | 3 ++- fish.cpp | 8 +++----- fish_indent.cpp | 8 +++----- fish_pager.cpp | 7 ++++--- fish_tests.cpp | 2 +- fishd.cpp | 2 +- function.cpp | 2 +- highlight.cpp | 2 +- history.cpp | 7 ++++++- input.cpp | 2 +- input_common.cpp | 2 +- intern.cpp | 2 +- io.cpp | 2 +- iothread.cpp | 3 +++ key_reader.cpp | 3 ++- kill.cpp | 2 +- mimedb.cpp | 2 +- output.cpp | 2 +- pager.cpp | 10 ++++------ parse_execution.cpp | 1 - parse_productions.cpp | 4 ++++ parse_tree.cpp | 3 +++ parse_util.cpp | 2 +- parser.cpp | 5 +---- parser_keywords.cpp | 2 +- path.cpp | 4 ++++ print_help.cpp | 3 +-- proc.cpp | 4 +--- reader.cpp | 2 +- sanity.cpp | 2 +- screen.cpp | 3 +-- share/doxygen_sqlite3.db | Bin 0 -> 13312 bytes signal.cpp | 4 ++-- tokenizer.cpp | 2 +- util.cpp | 2 +- wgetopt.cpp | 2 +- wildcard.cpp | 2 +- wutil.cpp | 2 +- xdgmime.cpp | 3 +++ xdgmimealias.cpp | 4 +++- xdgmimeglob.cpp | 4 +++- xdgmimeint.cpp | 5 ++++- xdgmimemagic.cpp | 3 +++ xdgmimeparent.cpp | 2 ++ 61 files changed, 107 insertions(+), 77 deletions(-) create mode 100644 share/doxygen_sqlite3.db diff --git a/Doxyfile b/Doxyfile index d25badb90..57bd35efb 100644 --- a/Doxyfile +++ b/Doxyfile @@ -422,7 +422,7 @@ INPUT = # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm -FILE_PATTERNS = *.h *.c +FILE_PATTERNS = *.h *.cpp # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. diff --git a/builtin.cpp b/builtin.cpp index 8b8b8d5c2..947276e24 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -1,4 +1,4 @@ -/** \file builtin.c +/** \file builtin.cpp Functions for executing builtin functions. How to add a new builtin function: diff --git a/builtin_commandline.cpp b/builtin_commandline.cpp index 564eee7bc..1dac978d7 100644 --- a/builtin_commandline.cpp +++ b/builtin_commandline.cpp @@ -1,4 +1,4 @@ -/** \file builtin_commandline.c Functions defining the commandline builtin +/** \file builtin_commandline.cpp Functions defining the commandline builtin Functions used for implementing the commandline builtin. diff --git a/builtin_complete.cpp b/builtin_complete.cpp index 6e395f946..ea69fa305 100644 --- a/builtin_complete.cpp +++ b/builtin_complete.cpp @@ -1,4 +1,4 @@ -/** \file builtin_complete.c Functions defining the complete builtin +/** \file builtin_complete.cpp Functions defining the complete builtin Functions used for implementing the complete builtin. @@ -279,8 +279,8 @@ const wchar_t *builtin_complete_get_temporary_buffer() /** The complete builtin. Used for specifying programmable - tab-completions. Calls the functions in complete.c for any heavy - lifting. Defined in builtin_complete.c + tab-completions. Calls the functions in complete.cpp for any heavy + lifting. Defined in builtin_complete.cpp */ static int builtin_complete(parser_t &parser, wchar_t **argv) { diff --git a/builtin_jobs.cpp b/builtin_jobs.cpp index c6ca77132..a21aeafc8 100644 --- a/builtin_jobs.cpp +++ b/builtin_jobs.cpp @@ -1,4 +1,4 @@ -/** \file builtin_jobs.c +/** \file builtin_jobs.cpp Functions for executing the jobs builtin. */ #include "config.h" diff --git a/builtin_printf.cpp b/builtin_printf.cpp index 1a1ab3350..92be1a961 100644 --- a/builtin_printf.cpp +++ b/builtin_printf.cpp @@ -1,3 +1,6 @@ +/** \file builtin_printf.cpp +*/ + /* printf - format and print data Copyright (C) 1990-2007 Free Software Foundation, Inc. diff --git a/builtin_set.cpp b/builtin_set.cpp index 633416497..399b7e827 100644 --- a/builtin_set.cpp +++ b/builtin_set.cpp @@ -1,4 +1,4 @@ -/** \file builtin_set.c Functions defining the set builtin +/** \file builtin_set.cpp Functions defining the set builtin Functions used for implementing the set builtin. diff --git a/builtin_test.cpp b/builtin_test.cpp index a2045cc4b..6a353029f 100644 --- a/builtin_test.cpp +++ b/builtin_test.cpp @@ -646,7 +646,6 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err) expression *result = parser.parse_expression(0, (unsigned int)args.size()); /* Handle errors */ - bool errored = false; for (size_t i = 0; i < parser.errors.size(); i++) { err.append(L"test: "); diff --git a/builtin_ulimit.cpp b/builtin_ulimit.cpp index 37bebd61f..7a0731f18 100644 --- a/builtin_ulimit.cpp +++ b/builtin_ulimit.cpp @@ -1,4 +1,4 @@ -/** \file builtin_ulimit.c Functions defining the ulimit builtin +/** \file builtin_ulimit.cpp Functions defining the ulimit builtin Functions used for implementing the ulimit builtin. diff --git a/common.cpp b/common.cpp index 7434c31d9..6e2160097 100644 --- a/common.cpp +++ b/common.cpp @@ -1,4 +1,4 @@ -/** \file common.c +/** \file common.cpp Various functions, mostly string utilities, that are used by most parts of fish. diff --git a/complete.cpp b/complete.cpp index 9b8d5c0b1..aee35bbda 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1,4 +1,4 @@ -/** \file complete.c Functions related to tab-completion. +/** \file complete.cpp Functions related to tab-completion. These functions are used for storing and retrieving tab-completion data, as well as for performing tab-completion. */ diff --git a/env.cpp b/env.cpp index ab7f63e5d..074e3d1a0 100644 --- a/env.cpp +++ b/env.cpp @@ -1,4 +1,4 @@ -/** \file env.c +/** \file env.cpp Functions for setting and getting environment variables. */ #include "config.h" diff --git a/env_universal.cpp b/env_universal.cpp index 72e9cc0e6..7e2a0970b 100644 --- a/env_universal.cpp +++ b/env_universal.cpp @@ -1,3 +1,9 @@ +/** \file env_universal.cpp + +Various functions, mostly string utilities, that are used by most +parts of fish. +*/ + #include "config.h" diff --git a/env_universal_common.cpp b/env_universal_common.cpp index dbf79c1a6..2b54a3bc3 100644 --- a/env_universal_common.cpp +++ b/env_universal_common.cpp @@ -1,5 +1,4 @@ -/** - \file env_universal_common.c +/** \file env_universal_common.cpp The utility library for universal variables. Used both by the client library and by the daemon. diff --git a/event.cpp b/event.cpp index 65d337f02..85cd5f978 100644 --- a/event.cpp +++ b/event.cpp @@ -1,4 +1,4 @@ -/** \file event.c +/** \file event.cpp Functions for handling event triggers diff --git a/exec.cpp b/exec.cpp index 832c88847..12458a51f 100644 --- a/exec.cpp +++ b/exec.cpp @@ -1,4 +1,4 @@ -/** \file exec.c +/** \file exec.cpp Functions for executing a program. Some of the code in this file is based on code from the Glibc diff --git a/expand.cpp b/expand.cpp index cd7194a3b..d087559da 100644 --- a/expand.cpp +++ b/expand.cpp @@ -1,4 +1,4 @@ -/**\file expand.c +/**\file expand.cpp String expansion functions. These functions perform several kinds of parameter expansion. diff --git a/fallback.cpp b/fallback.cpp index d26907e2b..48a6a220b 100644 --- a/fallback.cpp +++ b/fallback.cpp @@ -1,4 +1,5 @@ -/** +/** \file fallback.cpp + This file only contains fallback implementations of functions which have been found to be missing or broken by the configuration scripts. diff --git a/fish.cpp b/fish.cpp index 53262929b..21c9cb3f7 100644 --- a/fish.cpp +++ b/fish.cpp @@ -1,3 +1,6 @@ +/** \file fish.cpp + The main loop of fish. +*/ /* Copyright (C) 2005-2008 Axel Liljencrantz @@ -15,11 +18,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - -/** \file fish.c - The main loop of fish. -*/ - #include "config.h" diff --git a/fish_indent.cpp b/fish_indent.cpp index 4560bb961..ec668a839 100644 --- a/fish_indent.cpp +++ b/fish_indent.cpp @@ -1,3 +1,6 @@ +/** \file fish_indent.cpp + The fish_indent proegram. +*/ /* Copyright (C) 2005-2008 Axel Liljencrantz @@ -15,11 +18,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - -/** \file fish_indent.cpp - The fish_indent proegram. -*/ - #include "config.h" #include diff --git a/fish_pager.cpp b/fish_pager.cpp index f640e9959..f0103be3e 100644 --- a/fish_pager.cpp +++ b/fish_pager.cpp @@ -1,3 +1,7 @@ +/** \file fish_pager.cpp +*/ + + #include "config.h" #include @@ -439,9 +443,6 @@ static void completion_print_item(const wchar_t *prefix, comp_t *c, int width, b writech(L' '); } set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg); - written += print_max(L"(", 1, 0); - written += print_max(c->desc.c_str(), desc_width, 0); - written += print_max(L")", 1, 0); } else { diff --git a/fish_tests.cpp b/fish_tests.cpp index 7e82193cf..6494c6d36 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -1,4 +1,4 @@ -/** \file fish_tests.c +/** \file fish_tests.cpp Various bug and feature tests. Compiled and run by make test. */ diff --git a/fishd.cpp b/fishd.cpp index 30ded3cdd..57f04a0fb 100644 --- a/fishd.cpp +++ b/fishd.cpp @@ -1,4 +1,4 @@ -/** \file fishd.c +/** \file fishd.cpp The universal variable server. fishd is automatically started by fish if a fishd server isn't already running. fishd reads any saved diff --git a/function.cpp b/function.cpp index 8421a4daa..e58652c1e 100644 --- a/function.cpp +++ b/function.cpp @@ -1,4 +1,4 @@ -/** \file function.c +/** \file function.cpp Prototypes for functions for storing and retrieving function information. These functions also take care of autoloading diff --git a/highlight.cpp b/highlight.cpp index eaaec750a..216948845 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -1,4 +1,4 @@ -/** \file highlight.c +/** \file highlight.cpp Functions for syntax highlighting */ #include "config.h" diff --git a/history.cpp b/history.cpp index 0c7bc6184..f8183f5d8 100644 --- a/history.cpp +++ b/history.cpp @@ -1338,7 +1338,7 @@ bool history_t::save_internal_via_rewrite() for (size_t attempt = 0; attempt < 10 && out_fd == -1; attempt++) { char *narrow_str = wcs2str(tmp_name_template.c_str()); - if (narrow_str && mkstemp(narrow_str)) + if (narrow_str && mktemp(narrow_str)) { /* It was successfully templated; try opening it atomically */ tmp_name = str2wcstring(narrow_str); @@ -1507,6 +1507,11 @@ void history_t::save_internal(bool vacuum) /* Try doing a fast append */ ok = save_internal_via_appending(); } + if (! ok) + { + /* We did not or could not append; rewrite the file ("vacuum" it) */ + ok = this->save_internal_via_rewrite(); + } } void history_t::save(void) diff --git a/input.cpp b/input.cpp index 93c73d466..f08a18bbd 100644 --- a/input.cpp +++ b/input.cpp @@ -1,4 +1,4 @@ -/** \file input.c +/** \file input.cpp Functions for reading a character of input from stdin. diff --git a/input_common.cpp b/input_common.cpp index d26f30b97..c9a2afbf1 100644 --- a/input_common.cpp +++ b/input_common.cpp @@ -1,4 +1,4 @@ -/** \file input_common.c +/** \file input_common.cpp Implementation file for the low level input library diff --git a/intern.cpp b/intern.cpp index 56dec21a8..4cb2994fd 100644 --- a/intern.cpp +++ b/intern.cpp @@ -1,4 +1,4 @@ -/** \file intern.c +/** \file intern.cpp Library for pooling common strings diff --git a/io.cpp b/io.cpp index 3395942c2..11b5cd684 100644 --- a/io.cpp +++ b/io.cpp @@ -1,4 +1,4 @@ -/** \file io.c +/** \file io.cpp Utilities for io redirection. diff --git a/iothread.cpp b/iothread.cpp index 736467925..dbdff7ddc 100644 --- a/iothread.cpp +++ b/iothread.cpp @@ -1,3 +1,6 @@ +/** \file iothread.cpp +*/ + #include "config.h" #include "iothread.h" #include "common.h" diff --git a/key_reader.cpp b/key_reader.cpp index fae6f33fa..74347ba8c 100644 --- a/key_reader.cpp +++ b/key_reader.cpp @@ -1,4 +1,5 @@ -/* +/** \file key_reader.cpp + A small utility to print the resulting key codes from pressing a key. Servers the same function as hitting ^V in bash, but I prefer the way key_reader works. diff --git a/kill.cpp b/kill.cpp index 6ae27c519..e7bf7ea49 100644 --- a/kill.cpp +++ b/kill.cpp @@ -1,4 +1,4 @@ -/** \file kill.c +/** \file kill.cpp The killring. Works like the killring in emacs and readline. The killring is cut diff --git a/mimedb.cpp b/mimedb.cpp index fdf5da12d..fa1ab4002 100644 --- a/mimedb.cpp +++ b/mimedb.cpp @@ -1,4 +1,4 @@ -/** \file mimedb.c +/** \file mimedb.cpp mimedb is a program for checking the mimetype, description and default action associated with a file or mimetype. It uses the diff --git a/output.cpp b/output.cpp index 1f92c32ef..df508a448 100644 --- a/output.cpp +++ b/output.cpp @@ -1,4 +1,4 @@ -/** \file output.c +/** \file output.cpp Generic output functions */ diff --git a/pager.cpp b/pager.cpp index 0fa7eb4c7..4fbed6387 100644 --- a/pager.cpp +++ b/pager.cpp @@ -1,3 +1,7 @@ +/** \file pager.cpp +*/ + + #include "config.h" #include "pager.h" @@ -145,8 +149,6 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s { written += print_max(L" ", packed_color, 1, false, &line_data); } - written += print_max(L"(", packed_color, 1, false, &line_data); - written += print_max(c->desc, packed_color, desc_width, false, &line_data); } else { @@ -630,10 +632,6 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co { search_field_text.append(PAGER_SEARCH_FIELD_WIDTH - search_field_text.size(), L' '); } - line_t *search_field = &rendering->screen_data.insert_line_at_index(0); - - /* We limit the width to term_width - 1 */ - int search_field_written = print_max(SEARCH_FIELD_PROMPT, highlight_spec_normal, term_width - 1, false, search_field); } } diff --git a/parse_execution.cpp b/parse_execution.cpp index d57b8e7ec..13fbf0bb2 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -506,7 +506,6 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars parse_execution_result_t parse_execution_context_t::run_switch_statement(const parse_node_t &statement) { assert(statement.type == symbol_switch_statement); - parse_execution_result_t ret = parse_execution_success; const parse_node_t *matching_case_item = NULL; parse_execution_result_t result = parse_execution_success; diff --git a/parse_productions.cpp b/parse_productions.cpp index d559a0d93..d071be09c 100644 --- a/parse_productions.cpp +++ b/parse_productions.cpp @@ -1,3 +1,7 @@ +/** \file parse_productions.cpp +*/ + + #include "parse_productions.h" using namespace parse_productions; diff --git a/parse_tree.cpp b/parse_tree.cpp index eb139e633..9a174c732 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -1,3 +1,6 @@ +/** \file parse_tree.cpp +*/ + #include "parse_productions.h" #include "tokenizer.h" #include "fallback.h" diff --git a/parse_util.cpp b/parse_util.cpp index 230a328c9..4802d7cca 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1,4 +1,4 @@ -/** \file parse_util.c +/** \file parse_util.cpp Various mostly unrelated utility functions related to parsing, loading and evaluating fish code. diff --git a/parser.cpp b/parser.cpp index 9435d3d12..69ff02368 100644 --- a/parser.cpp +++ b/parser.cpp @@ -1,4 +1,4 @@ -/** \file parser.c +/** \file parser.cpp The fish parser. Contains functions for parsing and evaluating code. @@ -2590,9 +2590,6 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl parse_execution_context_t *ctx = new parse_execution_context_t(tree, cmd, this, exec_eval_level); execution_contexts.push_back(ctx); - /* Execute the first node */ - int result = 1; - /* Clean up the execution context stack */ assert(! execution_contexts.empty() && execution_contexts.back() == ctx); execution_contexts.pop_back(); diff --git a/parser_keywords.cpp b/parser_keywords.cpp index 8aacd8061..801cc3c89 100644 --- a/parser_keywords.cpp +++ b/parser_keywords.cpp @@ -1,4 +1,4 @@ -/** \file parser_keywords.c +/** \file parser_keywords.cpp Functions having to do with parser keywords, like testing if a function is a block command. */ diff --git a/path.cpp b/path.cpp index a2912f7b5..da550c7b5 100644 --- a/path.cpp +++ b/path.cpp @@ -1,3 +1,7 @@ +/** \file path.cpp +*/ + + #include "config.h" #include diff --git a/print_help.cpp b/print_help.cpp index 06bed30c2..965de7ec2 100644 --- a/print_help.cpp +++ b/print_help.cpp @@ -1,5 +1,4 @@ - -/** \file print_help.c +/** \file print_help.cpp Print help message for the specified command */ diff --git a/proc.cpp b/proc.cpp index 9c66292dc..b6b250a70 100644 --- a/proc.cpp +++ b/proc.cpp @@ -1,4 +1,4 @@ -/** \file proc.c +/** \file proc.cpp Utilities for keeping track of jobs, processes and subshells, as well as signal handling functions for tracking children. These @@ -383,8 +383,6 @@ static void mark_process_status(const job_t *j, process_t *p, int status) } else { - ssize_t ignore; - /* This should never be reached */ p->completed = 1; diff --git a/reader.cpp b/reader.cpp index 250884ffb..42e23e155 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1,4 +1,4 @@ -/** \file reader.c +/** \file reader.cpp Functions for reading data from stdin and passing to the parser. If stdin is a keyboard, it supplies a killring, history, diff --git a/sanity.cpp b/sanity.cpp index f89769414..6d5a90878 100644 --- a/sanity.cpp +++ b/sanity.cpp @@ -1,4 +1,4 @@ -/** \file sanity.c +/** \file sanity.cpp Functions for performing sanity checks on the program state */ #include "config.h" diff --git a/screen.cpp b/screen.cpp index 7c02c3841..d4da5b6b8 100644 --- a/screen.cpp +++ b/screen.cpp @@ -1,4 +1,4 @@ -/** \file screen.c High level library for handling the terminal screen +/** \file screen.cpp High level library for handling the terminal screen The screen library allows the interactive reader to write its output to screen efficiently by keeping an internal representation @@ -298,7 +298,6 @@ size_t escape_code_length(const wchar_t *code) if (code[1] >= L'@' && code[1] <= L'_') { resulting_length = 2; - found = true; } } diff --git a/share/doxygen_sqlite3.db b/share/doxygen_sqlite3.db new file mode 100644 index 0000000000000000000000000000000000000000..0efa2bc71c024697799b4ff46f0ad3b6c1317d28 GIT binary patch literal 13312 zcmeHO&2G~`5cbAy-2y#v@Bvlbst7fz3#uxFxDk*+rDKk3@(4;Pdm zREY=Rz;hwd3s)Y23m4Yg+Vwi2ZD^#%bgkG~&+P2ZeCvthneppaWgH^d^oeVRa9L6$ z0Hh}nN|FTVK1KI?;_js-Im|>Y=WA-l(A=3qf|3st@N~Pz+OI_$2MH4)QlHK6>d~l)=Jen zTs7*jv{_qUsZi-Pqf&#Fb-Hhs%Q|eB0fIH-O^S9hYKBVHp+oaMTf`5O*^)7LG3lii zJEp8^3k#roz>JONO<9^bRX8&<%+a-Rqc9$sSZ5XnI}W{Sw*s`&MxKQ-r!r?@hB@z< zF4C!Fv0DJDHa7=8uCg&>#B9_|H4EHWDaN2kMbl=M_#O5xw(9+^4{UEWv4eUq5eIvH zsFv@vT`%rU{cAFEXH{Vip7!cXyPg<8ARrLP3j)Ib^RiMxPl3Sj5fJ`Ad`!iN0)f0B zApAcsD<$+42n-(q;s3+ORE#JP$O{6I|0~jwBprbtg$MF&xh^f9rMr@osA*2rq-lbo z2X~VUL~-~r^XrglxK^nnasNN-*G}*R0{=Gx?EVi9C2&}{U-&LRm%d70M#5sH^JqfV zG!1muSbBD!-X{ZgxXGnt8EMdDEDVU1Nyb7u2(zTW=2&4m$*My>xmt8prg-NuQ#{Jj z2JCQyQ=E}v#XEP$RBd`1bnh@3>{(9RMnU{N&Pm49Sop#P365`>PMiZy{wC_=r=s~2|xi_wAv$LS9ov7&{VmW3&6^&aH8C7HYz{>XfU(~-SqBphvFH3M?6#Gn< z-)mLe|3~82PADM|xDo_}|6d90Vp4&?NFX5me#Aau9Q&`!i7qkPXfNC*U(cJu~FLf9ji7uiN3 zPYALE)1vPf1U^Z|Fl~NJf?R)>n}wJ-;0UbPKSrxxY=cH&8tICDy}<$4;Dbz2&?epc PG@6r^I;HZ`3BC9SIQ<{$ literal 0 HcmV?d00001 diff --git a/signal.cpp b/signal.cpp index 8e62f7885..d4a8d1b28 100644 --- a/signal.cpp +++ b/signal.cpp @@ -1,4 +1,4 @@ -/** \file signal.c +/** \file signal.cpp The library for various signal related issues @@ -477,7 +477,7 @@ static void handle_int(int sig, siginfo_t *info, void *context) } /** - sigchld handler. Does notification and calls the handler in proc.c + sigchld handler. Does notification and calls the handler in proc.cpp */ static void handle_chld(int sig, siginfo_t *info, void *context) { diff --git a/tokenizer.cpp b/tokenizer.cpp index 67b35fff2..7e4fe02eb 100644 --- a/tokenizer.cpp +++ b/tokenizer.cpp @@ -1,4 +1,4 @@ -/** \file tokenizer.c +/** \file tokenizer.cpp A specialized tokenizer for tokenizing the fish language. In the future, the tokenizer should be extended to support marks, diff --git a/util.cpp b/util.cpp index 85b9d8d7d..618836878 100644 --- a/util.cpp +++ b/util.cpp @@ -1,4 +1,4 @@ -/** \file util.c +/** \file util.cpp Generic utilities library. Contains datastructures such as automatically growing array lists, priority queues, etc. diff --git a/wgetopt.cpp b/wgetopt.cpp index ecf1121e5..c28d5dc17 100644 --- a/wgetopt.cpp +++ b/wgetopt.cpp @@ -1,4 +1,4 @@ -/** \file wgetopt.c +/** \file wgetopt.cpp A version of the getopt library for use with wide character strings. This is simply the gnu getopt library, but converted for use with diff --git a/wildcard.cpp b/wildcard.cpp index 2b93561b5..8682f75e1 100644 --- a/wildcard.cpp +++ b/wildcard.cpp @@ -1,4 +1,4 @@ -/** \file wildcard.c +/** \file wildcard.cpp Fish needs it's own globbing implementation to support tab-expansion of globbed parameters. Also provides recursive diff --git a/wutil.cpp b/wutil.cpp index ffb4f2b22..6889e9c96 100644 --- a/wutil.cpp +++ b/wutil.cpp @@ -1,4 +1,4 @@ -/** \file wutil.c +/** \file wutil.cpp Wide character equivalents of various standard unix functions. */ diff --git a/xdgmime.cpp b/xdgmime.cpp index 633d0b0a5..52a8f21b9 100644 --- a/xdgmime.cpp +++ b/xdgmime.cpp @@ -1,3 +1,6 @@ +/** \file xdgmime.cpp +*/ + /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmime.c: XDG Mime Spec mime resolver. Based on version 0.11 of the spec. * diff --git a/xdgmimealias.cpp b/xdgmimealias.cpp index e556d4e64..4636b5652 100644 --- a/xdgmimealias.cpp +++ b/xdgmimealias.cpp @@ -1,5 +1,7 @@ +/** \file xdgmimealias.cpp +*/ /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.c: Private file. Datastructure for storing the aliases. +/* xdgmimealias.cpp: Private file. Datastructure for storing the aliases. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimeglob.cpp b/xdgmimeglob.cpp index 4182f3c97..06021d7cb 100644 --- a/xdgmimeglob.cpp +++ b/xdgmimeglob.cpp @@ -1,5 +1,7 @@ +/** \file xdgmimeglob.cpp +*/ /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeglob.c: Private file. Datastructure for storing the globs. +/* xdgmimeglob.cpp: Private file. Datastructure for storing the globs. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimeint.cpp b/xdgmimeint.cpp index 7e8ea31ca..0bad11af0 100644 --- a/xdgmimeint.cpp +++ b/xdgmimeint.cpp @@ -1,5 +1,8 @@ +/** \file xdgmimeint.cpp +*/ + /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeint.c: Internal defines and functions. +/* xdgmimeint.cpp: Internal defines and functions. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimemagic.cpp b/xdgmimemagic.cpp index aecca8822..762202202 100644 --- a/xdgmimemagic.cpp +++ b/xdgmimemagic.cpp @@ -1,3 +1,6 @@ +/** \file xdgmimemagic.cpp +*/ + /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmimemagic.: Private file. Datastructure for storing magic files. * diff --git a/xdgmimeparent.cpp b/xdgmimeparent.cpp index d0fa617dc..72fa8b08a 100644 --- a/xdgmimeparent.cpp +++ b/xdgmimeparent.cpp @@ -1,3 +1,5 @@ +/** \file xdgmimeparent.cpp +*/ /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmimealias.c: Private file. Datastructure for storing the hierarchy. * From 858b6aa257c13451d0537b19c6f035fdb5114ee6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 27 Feb 2014 19:56:37 -0800 Subject: [PATCH 094/145] Correct some mistakes in the fish grammar comment --- parse_tree.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/parse_tree.h b/parse_tree.h index 1835183df..0add08cdd 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -224,18 +224,18 @@ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse # A block is a conditional, loop, or begin/end if_statement = if_clause else_clause end_command arguments_or_redirections_list - if_clause = job STATEMENT_TERMINATOR job_list + if_clause = job job_list else_clause = | else_continuation else_continuation = if_clause else_clause | - STATEMENT_TERMINATOR job_list + job_list - switch_statement = SWITCH STATEMENT_TERMINATOR case_item_list end_command arguments_or_redirections_list + switch_statement = SWITCH case_item_list end_command arguments_or_redirections_list case_item_list = | case_item case_item_list | case_item_list - case_item = CASE argument_list STATEMENT_TERMINATOR job_list + case_item = CASE argument_list job_list block_statement = block_header job_list end_command arguments_or_redirections_list block_header = for_header | while_header | function_header | begin_header @@ -264,8 +264,6 @@ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse redirection = - terminator = | - optional_background = | end_command = END From 0e991c596f9ec1121689b04f558c4cf9b23fd220 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 27 Feb 2014 21:06:39 -0800 Subject: [PATCH 095/145] Enable new parser by default (!). Fixes #557. This entirely replaces fish's execution model. Bugs are likely. See commit 290aae80 for what this is about. --- parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parser.cpp b/parser.cpp index 69ff02368..7b1abe184 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3127,7 +3127,7 @@ bool parser_use_ast(void) env_var_t var = env_get_string(L"fish_new_parser"); if (var.missing_or_empty()) { - return 0; + return 1; } else { From be33d3f2a44ad16358b614c9f47fdb8094b4e127 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 28 Feb 2014 02:15:24 -0800 Subject: [PATCH 096/145] Revert "Merge pull request #1317 from pullreq/cpp" This reverts commit 74135c0600d5dcc40d396d0e7293c17b8d4bdaa7, reversing changes made to 6d749789ce240a3e6f1447777db63fd8e7525560. See discussion in #1317 --- Doxyfile | 2 +- builtin.cpp | 2 +- builtin_commandline.cpp | 2 +- builtin_complete.cpp | 6 +++--- builtin_jobs.cpp | 2 +- builtin_printf.cpp | 3 --- builtin_set.cpp | 2 +- builtin_test.cpp | 3 +++ builtin_ulimit.cpp | 2 +- common.cpp | 8 ++++++-- complete.cpp | 2 +- env.cpp | 2 +- env_universal.cpp | 6 ------ env_universal_common.cpp | 3 ++- event.cpp | 2 +- exec.cpp | 2 +- expand.cpp | 2 +- fallback.cpp | 3 +-- fish.cpp | 10 +++++++--- fish_indent.cpp | 8 +++++--- fish_pager.cpp | 7 +++---- fish_tests.cpp | 2 +- fishd.cpp | 2 +- function.cpp | 2 +- highlight.cpp | 2 +- input.cpp | 2 +- input_common.cpp | 2 +- intern.cpp | 2 +- io.cpp | 2 +- iothread.cpp | 3 --- key_reader.cpp | 3 +-- kill.cpp | 2 +- mimedb.cpp | 2 +- output.cpp | 2 +- pager.cpp | 14 +++++++++----- parse_execution.cpp | 2 ++ parse_productions.cpp | 4 ---- parse_tree.cpp | 4 +--- parse_util.cpp | 2 +- parser.cpp | 9 ++++++++- parser_keywords.cpp | 2 +- path.cpp | 4 ---- print_help.cpp | 3 ++- proc.cpp | 5 ++++- reader.cpp | 2 +- sanity.cpp | 2 +- screen.cpp | 3 ++- share/doxygen_sqlite3.db | Bin 13312 -> 0 bytes signal.cpp | 4 ++-- tokenizer.cpp | 2 +- util.cpp | 2 +- wgetopt.cpp | 2 +- wildcard.cpp | 2 +- wutil.cpp | 2 +- xdgmime.cpp | 3 --- xdgmimealias.cpp | 4 +--- xdgmimeglob.cpp | 4 +--- xdgmimeint.cpp | 5 +---- xdgmimemagic.cpp | 3 --- xdgmimeparent.cpp | 2 -- 60 files changed, 95 insertions(+), 103 deletions(-) delete mode 100644 share/doxygen_sqlite3.db diff --git a/Doxyfile b/Doxyfile index 57bd35efb..d25badb90 100644 --- a/Doxyfile +++ b/Doxyfile @@ -422,7 +422,7 @@ INPUT = # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm -FILE_PATTERNS = *.h *.cpp +FILE_PATTERNS = *.h *.c # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. diff --git a/builtin.cpp b/builtin.cpp index 947276e24..8b8b8d5c2 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -1,4 +1,4 @@ -/** \file builtin.cpp +/** \file builtin.c Functions for executing builtin functions. How to add a new builtin function: diff --git a/builtin_commandline.cpp b/builtin_commandline.cpp index 1dac978d7..564eee7bc 100644 --- a/builtin_commandline.cpp +++ b/builtin_commandline.cpp @@ -1,4 +1,4 @@ -/** \file builtin_commandline.cpp Functions defining the commandline builtin +/** \file builtin_commandline.c Functions defining the commandline builtin Functions used for implementing the commandline builtin. diff --git a/builtin_complete.cpp b/builtin_complete.cpp index ea69fa305..6e395f946 100644 --- a/builtin_complete.cpp +++ b/builtin_complete.cpp @@ -1,4 +1,4 @@ -/** \file builtin_complete.cpp Functions defining the complete builtin +/** \file builtin_complete.c Functions defining the complete builtin Functions used for implementing the complete builtin. @@ -279,8 +279,8 @@ const wchar_t *builtin_complete_get_temporary_buffer() /** The complete builtin. Used for specifying programmable - tab-completions. Calls the functions in complete.cpp for any heavy - lifting. Defined in builtin_complete.cpp + tab-completions. Calls the functions in complete.c for any heavy + lifting. Defined in builtin_complete.c */ static int builtin_complete(parser_t &parser, wchar_t **argv) { diff --git a/builtin_jobs.cpp b/builtin_jobs.cpp index a21aeafc8..c6ca77132 100644 --- a/builtin_jobs.cpp +++ b/builtin_jobs.cpp @@ -1,4 +1,4 @@ -/** \file builtin_jobs.cpp +/** \file builtin_jobs.c Functions for executing the jobs builtin. */ #include "config.h" diff --git a/builtin_printf.cpp b/builtin_printf.cpp index 92be1a961..1a1ab3350 100644 --- a/builtin_printf.cpp +++ b/builtin_printf.cpp @@ -1,6 +1,3 @@ -/** \file builtin_printf.cpp -*/ - /* printf - format and print data Copyright (C) 1990-2007 Free Software Foundation, Inc. diff --git a/builtin_set.cpp b/builtin_set.cpp index 399b7e827..633416497 100644 --- a/builtin_set.cpp +++ b/builtin_set.cpp @@ -1,4 +1,4 @@ -/** \file builtin_set.cpp Functions defining the set builtin +/** \file builtin_set.c Functions defining the set builtin Functions used for implementing the set builtin. diff --git a/builtin_test.cpp b/builtin_test.cpp index 6a353029f..0d16823af 100644 --- a/builtin_test.cpp +++ b/builtin_test.cpp @@ -646,11 +646,13 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err) expression *result = parser.parse_expression(0, (unsigned int)args.size()); /* Handle errors */ + bool errored = false; for (size_t i = 0; i < parser.errors.size(); i++) { err.append(L"test: "); err.append(parser.errors.at(i)); err.push_back(L'\n'); + errored = true; // For now we only show the first error break; } @@ -665,6 +667,7 @@ expression *test_parser::parse_args(const wcstring_list_t &args, wcstring &err) { append_format(err, L"test: unexpected argument at index %lu: '%ls'\n", (unsigned long)result->range.end, args.at(result->range.end).c_str()); } + errored = true; delete result; result = NULL; diff --git a/builtin_ulimit.cpp b/builtin_ulimit.cpp index 7a0731f18..37bebd61f 100644 --- a/builtin_ulimit.cpp +++ b/builtin_ulimit.cpp @@ -1,4 +1,4 @@ -/** \file builtin_ulimit.cpp Functions defining the ulimit builtin +/** \file builtin_ulimit.c Functions defining the ulimit builtin Functions used for implementing the ulimit builtin. diff --git a/common.cpp b/common.cpp index 6e2160097..08e8d7a1f 100644 --- a/common.cpp +++ b/common.cpp @@ -1,4 +1,4 @@ -/** \file common.cpp +/** \file common.c Various functions, mostly string utilities, that are used by most parts of fish. @@ -866,7 +866,11 @@ void write_screen(const wcstring &msg, wcstring &buff) /* If token is zero character long, we don't do anything */ - if (overflow) + if (pos == start) + { + start = pos = pos+1; + } + else if (overflow) { /* In case of overflow, we print a newline, except if we already are at position 0 diff --git a/complete.cpp b/complete.cpp index aee35bbda..9b8d5c0b1 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1,4 +1,4 @@ -/** \file complete.cpp Functions related to tab-completion. +/** \file complete.c Functions related to tab-completion. These functions are used for storing and retrieving tab-completion data, as well as for performing tab-completion. */ diff --git a/env.cpp b/env.cpp index 074e3d1a0..ab7f63e5d 100644 --- a/env.cpp +++ b/env.cpp @@ -1,4 +1,4 @@ -/** \file env.cpp +/** \file env.c Functions for setting and getting environment variables. */ #include "config.h" diff --git a/env_universal.cpp b/env_universal.cpp index 7e2a0970b..72e9cc0e6 100644 --- a/env_universal.cpp +++ b/env_universal.cpp @@ -1,9 +1,3 @@ -/** \file env_universal.cpp - -Various functions, mostly string utilities, that are used by most -parts of fish. -*/ - #include "config.h" diff --git a/env_universal_common.cpp b/env_universal_common.cpp index 2b54a3bc3..dbf79c1a6 100644 --- a/env_universal_common.cpp +++ b/env_universal_common.cpp @@ -1,4 +1,5 @@ -/** \file env_universal_common.cpp +/** + \file env_universal_common.c The utility library for universal variables. Used both by the client library and by the daemon. diff --git a/event.cpp b/event.cpp index 85cd5f978..65d337f02 100644 --- a/event.cpp +++ b/event.cpp @@ -1,4 +1,4 @@ -/** \file event.cpp +/** \file event.c Functions for handling event triggers diff --git a/exec.cpp b/exec.cpp index 12458a51f..832c88847 100644 --- a/exec.cpp +++ b/exec.cpp @@ -1,4 +1,4 @@ -/** \file exec.cpp +/** \file exec.c Functions for executing a program. Some of the code in this file is based on code from the Glibc diff --git a/expand.cpp b/expand.cpp index d087559da..cd7194a3b 100644 --- a/expand.cpp +++ b/expand.cpp @@ -1,4 +1,4 @@ -/**\file expand.cpp +/**\file expand.c String expansion functions. These functions perform several kinds of parameter expansion. diff --git a/fallback.cpp b/fallback.cpp index 48a6a220b..d26907e2b 100644 --- a/fallback.cpp +++ b/fallback.cpp @@ -1,5 +1,4 @@ -/** \file fallback.cpp - +/** This file only contains fallback implementations of functions which have been found to be missing or broken by the configuration scripts. diff --git a/fish.cpp b/fish.cpp index 21c9cb3f7..35b641ee0 100644 --- a/fish.cpp +++ b/fish.cpp @@ -1,6 +1,3 @@ -/** \file fish.cpp - The main loop of fish. -*/ /* Copyright (C) 2005-2008 Axel Liljencrantz @@ -18,6 +15,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/** \file fish.c + The main loop of fish. +*/ + #include "config.h" @@ -211,6 +213,8 @@ static struct config_paths_t determine_config_directory_paths(const char *argv0) paths.sysconf = L"" SYSCONFDIR "/fish"; paths.doc = L"" DOCDIR; paths.bin = L"" BINDIR; + + done = true; } return paths; diff --git a/fish_indent.cpp b/fish_indent.cpp index ec668a839..4560bb961 100644 --- a/fish_indent.cpp +++ b/fish_indent.cpp @@ -1,6 +1,3 @@ -/** \file fish_indent.cpp - The fish_indent proegram. -*/ /* Copyright (C) 2005-2008 Axel Liljencrantz @@ -18,6 +15,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + +/** \file fish_indent.cpp + The fish_indent proegram. +*/ + #include "config.h" #include diff --git a/fish_pager.cpp b/fish_pager.cpp index f0103be3e..f640e9959 100644 --- a/fish_pager.cpp +++ b/fish_pager.cpp @@ -1,7 +1,3 @@ -/** \file fish_pager.cpp -*/ - - #include "config.h" #include @@ -443,6 +439,9 @@ static void completion_print_item(const wchar_t *prefix, comp_t *c, int width, b writech(L' '); } set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg); + written += print_max(L"(", 1, 0); + written += print_max(c->desc.c_str(), desc_width, 0); + written += print_max(L")", 1, 0); } else { diff --git a/fish_tests.cpp b/fish_tests.cpp index 6494c6d36..7e82193cf 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -1,4 +1,4 @@ -/** \file fish_tests.cpp +/** \file fish_tests.c Various bug and feature tests. Compiled and run by make test. */ diff --git a/fishd.cpp b/fishd.cpp index 57f04a0fb..30ded3cdd 100644 --- a/fishd.cpp +++ b/fishd.cpp @@ -1,4 +1,4 @@ -/** \file fishd.cpp +/** \file fishd.c The universal variable server. fishd is automatically started by fish if a fishd server isn't already running. fishd reads any saved diff --git a/function.cpp b/function.cpp index e58652c1e..8421a4daa 100644 --- a/function.cpp +++ b/function.cpp @@ -1,4 +1,4 @@ -/** \file function.cpp +/** \file function.c Prototypes for functions for storing and retrieving function information. These functions also take care of autoloading diff --git a/highlight.cpp b/highlight.cpp index 216948845..eaaec750a 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -1,4 +1,4 @@ -/** \file highlight.cpp +/** \file highlight.c Functions for syntax highlighting */ #include "config.h" diff --git a/input.cpp b/input.cpp index f08a18bbd..93c73d466 100644 --- a/input.cpp +++ b/input.cpp @@ -1,4 +1,4 @@ -/** \file input.cpp +/** \file input.c Functions for reading a character of input from stdin. diff --git a/input_common.cpp b/input_common.cpp index c9a2afbf1..d26f30b97 100644 --- a/input_common.cpp +++ b/input_common.cpp @@ -1,4 +1,4 @@ -/** \file input_common.cpp +/** \file input_common.c Implementation file for the low level input library diff --git a/intern.cpp b/intern.cpp index 4cb2994fd..56dec21a8 100644 --- a/intern.cpp +++ b/intern.cpp @@ -1,4 +1,4 @@ -/** \file intern.cpp +/** \file intern.c Library for pooling common strings diff --git a/io.cpp b/io.cpp index 11b5cd684..3395942c2 100644 --- a/io.cpp +++ b/io.cpp @@ -1,4 +1,4 @@ -/** \file io.cpp +/** \file io.c Utilities for io redirection. diff --git a/iothread.cpp b/iothread.cpp index dbdff7ddc..736467925 100644 --- a/iothread.cpp +++ b/iothread.cpp @@ -1,6 +1,3 @@ -/** \file iothread.cpp -*/ - #include "config.h" #include "iothread.h" #include "common.h" diff --git a/key_reader.cpp b/key_reader.cpp index 74347ba8c..fae6f33fa 100644 --- a/key_reader.cpp +++ b/key_reader.cpp @@ -1,5 +1,4 @@ -/** \file key_reader.cpp - +/* A small utility to print the resulting key codes from pressing a key. Servers the same function as hitting ^V in bash, but I prefer the way key_reader works. diff --git a/kill.cpp b/kill.cpp index e7bf7ea49..6ae27c519 100644 --- a/kill.cpp +++ b/kill.cpp @@ -1,4 +1,4 @@ -/** \file kill.cpp +/** \file kill.c The killring. Works like the killring in emacs and readline. The killring is cut diff --git a/mimedb.cpp b/mimedb.cpp index fa1ab4002..fdf5da12d 100644 --- a/mimedb.cpp +++ b/mimedb.cpp @@ -1,4 +1,4 @@ -/** \file mimedb.cpp +/** \file mimedb.c mimedb is a program for checking the mimetype, description and default action associated with a file or mimetype. It uses the diff --git a/output.cpp b/output.cpp index df508a448..1f92c32ef 100644 --- a/output.cpp +++ b/output.cpp @@ -1,4 +1,4 @@ -/** \file output.cpp +/** \file output.c Generic output functions */ diff --git a/pager.cpp b/pager.cpp index 4fbed6387..b137bca2f 100644 --- a/pager.cpp +++ b/pager.cpp @@ -1,7 +1,3 @@ -/** \file pager.cpp -*/ - - #include "config.h" #include "pager.h" @@ -149,6 +145,9 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s { written += print_max(L" ", packed_color, 1, false, &line_data); } + written += print_max(L"(", packed_color, 1, false, &line_data); + written += print_max(c->desc, packed_color, desc_width, false, &line_data); + written += print_max(L")", packed_color, 1, false, &line_data); } else { @@ -632,6 +631,11 @@ bool pager_t::completion_try_print(size_t cols, const wcstring &prefix, const co { search_field_text.append(PAGER_SEARCH_FIELD_WIDTH - search_field_text.size(), L' '); } + line_t *search_field = &rendering->screen_data.insert_line_at_index(0); + + /* We limit the width to term_width - 1 */ + int search_field_written = print_max(SEARCH_FIELD_PROMPT, highlight_spec_normal, term_width - 1, false, search_field); + search_field_written += print_max(search_field_text, highlight_modifier_force_underline, term_width - search_field_written - 1, false, search_field); } } @@ -743,7 +747,7 @@ bool pager_t::select_next_completion_in_direction(selection_direction_t directio } /* Ok, we had something selected already. Select something different. */ - size_t new_selected_completion_idx; + size_t new_selected_completion_idx = selected_completion_idx; if (! selection_direction_is_cardinal(direction)) { /* Next, previous, or deselect, all easy */ diff --git a/parse_execution.cpp b/parse_execution.cpp index 13fbf0bb2..726f29207 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -506,6 +506,7 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars parse_execution_result_t parse_execution_context_t::run_switch_statement(const parse_node_t &statement) { assert(statement.type == symbol_switch_statement); + parse_execution_result_t ret = parse_execution_success; const parse_node_t *matching_case_item = NULL; parse_execution_result_t result = parse_execution_success; @@ -531,6 +532,7 @@ parse_execution_result_t parse_execution_context_t::run_switch_statement(const p { /* Store the node that failed to expand */ report_error(switch_value_node, WILDCARD_ERR_MSG, switch_value.c_str()); + ret = parse_execution_errored; break; } diff --git a/parse_productions.cpp b/parse_productions.cpp index d071be09c..d559a0d93 100644 --- a/parse_productions.cpp +++ b/parse_productions.cpp @@ -1,7 +1,3 @@ -/** \file parse_productions.cpp -*/ - - #include "parse_productions.h" using namespace parse_productions; diff --git a/parse_tree.cpp b/parse_tree.cpp index 9a174c732..484b79687 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -1,6 +1,3 @@ -/** \file parse_tree.cpp -*/ - #include "parse_productions.h" #include "tokenizer.h" #include "fallback.h" @@ -990,6 +987,7 @@ void parse_ll_t::accept_tokens(parse_token_t token1, parse_token_t token2) { fprintf(stderr, "Consumed token %ls\n", token1.describe().c_str()); } + consumed = true; break; } diff --git a/parse_util.cpp b/parse_util.cpp index 4802d7cca..230a328c9 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1,4 +1,4 @@ -/** \file parse_util.cpp +/** \file parse_util.c Various mostly unrelated utility functions related to parsing, loading and evaluating fish code. diff --git a/parser.cpp b/parser.cpp index 69ff02368..0a4f004ae 100644 --- a/parser.cpp +++ b/parser.cpp @@ -1,4 +1,4 @@ -/** \file parser.cpp +/** \file parser.c The fish parser. Contains functions for parsing and evaluating code. @@ -2590,6 +2590,13 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl parse_execution_context_t *ctx = new parse_execution_context_t(tree, cmd, this, exec_eval_level); execution_contexts.push_back(ctx); + /* Execute the first node */ + int result = 1; + if (! tree.empty()) + { + result = this->eval_block_node(0, io, block_type); + } + /* Clean up the execution context stack */ assert(! execution_contexts.empty() && execution_contexts.back() == ctx); execution_contexts.pop_back(); diff --git a/parser_keywords.cpp b/parser_keywords.cpp index 801cc3c89..8aacd8061 100644 --- a/parser_keywords.cpp +++ b/parser_keywords.cpp @@ -1,4 +1,4 @@ -/** \file parser_keywords.cpp +/** \file parser_keywords.c Functions having to do with parser keywords, like testing if a function is a block command. */ diff --git a/path.cpp b/path.cpp index da550c7b5..a2912f7b5 100644 --- a/path.cpp +++ b/path.cpp @@ -1,7 +1,3 @@ -/** \file path.cpp -*/ - - #include "config.h" #include diff --git a/print_help.cpp b/print_help.cpp index 965de7ec2..06bed30c2 100644 --- a/print_help.cpp +++ b/print_help.cpp @@ -1,4 +1,5 @@ -/** \file print_help.cpp + +/** \file print_help.c Print help message for the specified command */ diff --git a/proc.cpp b/proc.cpp index b6b250a70..2ea0d1bd4 100644 --- a/proc.cpp +++ b/proc.cpp @@ -1,4 +1,4 @@ -/** \file proc.cpp +/** \file proc.c Utilities for keeping track of jobs, processes and subshells, as well as signal handling functions for tracking children. These @@ -383,6 +383,8 @@ static void mark_process_status(const job_t *j, process_t *p, int status) } else { + ssize_t ignore; + /* This should never be reached */ p->completed = 1; @@ -396,6 +398,7 @@ static void mark_process_status(const job_t *j, process_t *p, int status) handler. If things aren't working properly, it's safer to give up. */ + ignore = write(2, mess, strlen(mess)); } } diff --git a/reader.cpp b/reader.cpp index 42e23e155..250884ffb 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1,4 +1,4 @@ -/** \file reader.cpp +/** \file reader.c Functions for reading data from stdin and passing to the parser. If stdin is a keyboard, it supplies a killring, history, diff --git a/sanity.cpp b/sanity.cpp index 6d5a90878..f89769414 100644 --- a/sanity.cpp +++ b/sanity.cpp @@ -1,4 +1,4 @@ -/** \file sanity.cpp +/** \file sanity.c Functions for performing sanity checks on the program state */ #include "config.h" diff --git a/screen.cpp b/screen.cpp index d4da5b6b8..7c02c3841 100644 --- a/screen.cpp +++ b/screen.cpp @@ -1,4 +1,4 @@ -/** \file screen.cpp High level library for handling the terminal screen +/** \file screen.c High level library for handling the terminal screen The screen library allows the interactive reader to write its output to screen efficiently by keeping an internal representation @@ -298,6 +298,7 @@ size_t escape_code_length(const wchar_t *code) if (code[1] >= L'@' && code[1] <= L'_') { resulting_length = 2; + found = true; } } diff --git a/share/doxygen_sqlite3.db b/share/doxygen_sqlite3.db deleted file mode 100644 index 0efa2bc71c024697799b4ff46f0ad3b6c1317d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 zcmeHO&2G~`5cbAy-2y#v@Bvlbst7fz3#uxFxDk*+rDKk3@(4;Pdm zREY=Rz;hwd3s)Y23m4Yg+Vwi2ZD^#%bgkG~&+P2ZeCvthneppaWgH^d^oeVRa9L6$ z0Hh}nN|FTVK1KI?;_js-Im|>Y=WA-l(A=3qf|3st@N~Pz+OI_$2MH4)QlHK6>d~l)=Jen zTs7*jv{_qUsZi-Pqf&#Fb-Hhs%Q|eB0fIH-O^S9hYKBVHp+oaMTf`5O*^)7LG3lii zJEp8^3k#roz>JONO<9^bRX8&<%+a-Rqc9$sSZ5XnI}W{Sw*s`&MxKQ-r!r?@hB@z< zF4C!Fv0DJDHa7=8uCg&>#B9_|H4EHWDaN2kMbl=M_#O5xw(9+^4{UEWv4eUq5eIvH zsFv@vT`%rU{cAFEXH{Vip7!cXyPg<8ARrLP3j)Ib^RiMxPl3Sj5fJ`Ad`!iN0)f0B zApAcsD<$+42n-(q;s3+ORE#JP$O{6I|0~jwBprbtg$MF&xh^f9rMr@osA*2rq-lbo z2X~VUL~-~r^XrglxK^nnasNN-*G}*R0{=Gx?EVi9C2&}{U-&LRm%d70M#5sH^JqfV zG!1muSbBD!-X{ZgxXGnt8EMdDEDVU1Nyb7u2(zTW=2&4m$*My>xmt8prg-NuQ#{Jj z2JCQyQ=E}v#XEP$RBd`1bnh@3>{(9RMnU{N&Pm49Sop#P365`>PMiZy{wC_=r=s~2|xi_wAv$LS9ov7&{VmW3&6^&aH8C7HYz{>XfU(~-SqBphvFH3M?6#Gn< z-)mLe|3~82PADM|xDo_}|6d90Vp4&?NFX5me#Aau9Q&`!i7qkPXfNC*U(cJu~FLf9ji7uiN3 zPYALE)1vPf1U^Z|Fl~NJf?R)>n}wJ-;0UbPKSrxxY=cH&8tICDy}<$4;Dbz2&?epc PG@6r^I;HZ`3BC9SIQ<{$ diff --git a/signal.cpp b/signal.cpp index d4a8d1b28..8e62f7885 100644 --- a/signal.cpp +++ b/signal.cpp @@ -1,4 +1,4 @@ -/** \file signal.cpp +/** \file signal.c The library for various signal related issues @@ -477,7 +477,7 @@ static void handle_int(int sig, siginfo_t *info, void *context) } /** - sigchld handler. Does notification and calls the handler in proc.cpp + sigchld handler. Does notification and calls the handler in proc.c */ static void handle_chld(int sig, siginfo_t *info, void *context) { diff --git a/tokenizer.cpp b/tokenizer.cpp index 7e4fe02eb..67b35fff2 100644 --- a/tokenizer.cpp +++ b/tokenizer.cpp @@ -1,4 +1,4 @@ -/** \file tokenizer.cpp +/** \file tokenizer.c A specialized tokenizer for tokenizing the fish language. In the future, the tokenizer should be extended to support marks, diff --git a/util.cpp b/util.cpp index 618836878..85b9d8d7d 100644 --- a/util.cpp +++ b/util.cpp @@ -1,4 +1,4 @@ -/** \file util.cpp +/** \file util.c Generic utilities library. Contains datastructures such as automatically growing array lists, priority queues, etc. diff --git a/wgetopt.cpp b/wgetopt.cpp index c28d5dc17..ecf1121e5 100644 --- a/wgetopt.cpp +++ b/wgetopt.cpp @@ -1,4 +1,4 @@ -/** \file wgetopt.cpp +/** \file wgetopt.c A version of the getopt library for use with wide character strings. This is simply the gnu getopt library, but converted for use with diff --git a/wildcard.cpp b/wildcard.cpp index 8682f75e1..2b93561b5 100644 --- a/wildcard.cpp +++ b/wildcard.cpp @@ -1,4 +1,4 @@ -/** \file wildcard.cpp +/** \file wildcard.c Fish needs it's own globbing implementation to support tab-expansion of globbed parameters. Also provides recursive diff --git a/wutil.cpp b/wutil.cpp index 6889e9c96..ffb4f2b22 100644 --- a/wutil.cpp +++ b/wutil.cpp @@ -1,4 +1,4 @@ -/** \file wutil.cpp +/** \file wutil.c Wide character equivalents of various standard unix functions. */ diff --git a/xdgmime.cpp b/xdgmime.cpp index 52a8f21b9..633d0b0a5 100644 --- a/xdgmime.cpp +++ b/xdgmime.cpp @@ -1,6 +1,3 @@ -/** \file xdgmime.cpp -*/ - /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmime.c: XDG Mime Spec mime resolver. Based on version 0.11 of the spec. * diff --git a/xdgmimealias.cpp b/xdgmimealias.cpp index 4636b5652..e556d4e64 100644 --- a/xdgmimealias.cpp +++ b/xdgmimealias.cpp @@ -1,7 +1,5 @@ -/** \file xdgmimealias.cpp -*/ /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.cpp: Private file. Datastructure for storing the aliases. +/* xdgmimealias.c: Private file. Datastructure for storing the aliases. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimeglob.cpp b/xdgmimeglob.cpp index 06021d7cb..4182f3c97 100644 --- a/xdgmimeglob.cpp +++ b/xdgmimeglob.cpp @@ -1,7 +1,5 @@ -/** \file xdgmimeglob.cpp -*/ /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeglob.cpp: Private file. Datastructure for storing the globs. +/* xdgmimeglob.c: Private file. Datastructure for storing the globs. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimeint.cpp b/xdgmimeint.cpp index 0bad11af0..7e8ea31ca 100644 --- a/xdgmimeint.cpp +++ b/xdgmimeint.cpp @@ -1,8 +1,5 @@ -/** \file xdgmimeint.cpp -*/ - /* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeint.cpp: Internal defines and functions. +/* xdgmimeint.c: Internal defines and functions. * * More info can be found at http://www.freedesktop.org/standards/ * diff --git a/xdgmimemagic.cpp b/xdgmimemagic.cpp index 762202202..aecca8822 100644 --- a/xdgmimemagic.cpp +++ b/xdgmimemagic.cpp @@ -1,6 +1,3 @@ -/** \file xdgmimemagic.cpp -*/ - /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmimemagic.: Private file. Datastructure for storing magic files. * diff --git a/xdgmimeparent.cpp b/xdgmimeparent.cpp index 72fa8b08a..d0fa617dc 100644 --- a/xdgmimeparent.cpp +++ b/xdgmimeparent.cpp @@ -1,5 +1,3 @@ -/** \file xdgmimeparent.cpp -*/ /* -*- mode: C; c-file-style: "gnu" -*- */ /* xdgmimealias.c: Private file. Datastructure for storing the hierarchy. * From 84ea96f383d3713f750d39a74d7b8693275db25d Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 28 Feb 2014 17:54:05 -0800 Subject: [PATCH 097/145] Begin removing remnants of old parser --- parser.cpp | 1539 +--------------------------------------------------- parser.h | 4 - 2 files changed, 1 insertion(+), 1542 deletions(-) diff --git a/parser.cpp b/parser.cpp index 7b1abe184..adfa263a6 100644 --- a/parser.cpp +++ b/parser.cpp @@ -47,106 +47,17 @@ The fish parser. Contains functions for parsing and evaluating code. #include "parse_tree.h" #include "parse_execution.h" -/** - Error message for unknown builtin -*/ -#define UNKNOWN_BUILTIN_ERR_MSG _(L"Unknown builtin '%ls'") - -/** - Error message for improper use of the exec builtin -*/ -#define EXEC_ERR_MSG _(L"This command can not be used in a pipeline") - /** Error message for tokenizer error. The tokenizer message is appended to this message. */ #define TOK_ERR_MSG _( L"Tokenizer error: '%ls'") -/** - Error message for short circuit command error. -*/ -#define COND_ERR_MSG _( L"An additional command is required" ) - -/** - Error message on a function that calls itself immediately -*/ -#define INFINITE_RECURSION_ERR_MSG _( L"The function calls itself immediately, which would result in an infinite loop.") - -/** - Error message used when the end of a block can't be located -*/ -#define BLOCK_END_ERR_MSG _( L"Could not locate end of block. The 'end' command is missing, misspelled or a ';' is missing.") - -/** Error message when a non-string token is found when expecting a command name */ -#define CMD_ERR_MSG _( L"Expected a command name, got token of type '%ls'") - -/** - Error message when encountering an illegal command name -*/ -#define ILLEGAL_CMD_ERR_MSG _( L"Illegal command name '%ls'") - -/** - Error message when encountering an illegal file descriptor -*/ -#define ILLEGAL_FD_ERR_MSG _( L"Illegal file descriptor in redirection '%ls'") - -/** - Error message for wildcards with no matches -*/ -#define WILDCARD_ERR_MSG _( L"No matches for wildcard '%ls'.") - -/** - Error when using case builtin outside of switch block -*/ -#define INVALID_CASE_ERR_MSG _( L"'case' builtin not inside of switch block") - -/** - Error when using loop control builtins (break or continue) outside of loop -*/ -#define INVALID_LOOP_ERR_MSG _( L"Loop control command while not inside of loop" ) - -/** - Error when using return builtin outside of function definition -*/ -#define INVALID_RETURN_ERR_MSG _( L"'return' builtin command outside of function definition" ) - -/** - Error when using else builtin outside of if block -*/ -#define INVALID_ELSE_ERR_MSG _( L"'%ls' builtin not inside of if block" ) - -/** - Error when using 'else if' past a naked 'else' -*/ -#define INVALID_ELSEIF_PAST_ELSE_ERR_MSG _( L"'%ls' used past terminating 'else'" ) - -/** - Error when using end builtin outside of block -*/ -#define INVALID_END_ERR_MSG _( L"'end' command outside of block") - -/** - Error message for Posix-style assignment: foo=bar -*/ -#define COMMAND_ASSIGN_ERR_MSG _( L"Unknown command '%ls'. Did you mean 'set %ls %ls'? See the help section on the set command by typing 'help set'.") - -/** - Error for invalid redirection token -*/ -#define REDIRECT_TOKEN_ERR_MSG _( L"Expected redirection specification, got token of type '%ls'") - -/** - Error when encountering redirection without a command -*/ -#define INVALID_REDIRECTION_ERR_MSG _( L"Encountered redirection when expecting a command name. Fish does not allow a redirection operation before a command.") - /** Error for evaluating in illegal scope */ #define INVALID_SCOPE_ERR_MSG _( L"Tried to evaluate commands using invalid block type '%ls'" ) - /** Error for wrong token type */ @@ -167,20 +78,16 @@ The fish parser. Contains functions for parsing and evaluating code. */ #define BREAKPOINT_BLOCK N_( L"Block created by breakpoint" ) - - /** If block description */ #define IF_BLOCK N_( L"'if' conditional block" ) - /** Function definition block description */ #define FUNCTION_DEF_BLOCK N_( L"function definition block" ) - /** Function invocation block description */ @@ -191,37 +98,31 @@ The fish parser. Contains functions for parsing and evaluating code. */ #define FUNCTION_CALL_NO_SHADOW_BLOCK N_( L"function invocation block with no variable shadowing" ) - /** Switch block description */ #define SWITCH_BLOCK N_( L"'switch' block" ) - /** Fake block description */ #define FAKE_BLOCK N_( L"unexecutable block" ) - /** Top block description */ #define TOP_BLOCK N_( L"global root block" ) - /** Command substitution block description */ #define SUBST_BLOCK N_( L"command substitution block" ) - /** Begin block description */ #define BEGIN_BLOCK N_( L"'begin' unconditional block" ) - /** Source block description */ @@ -232,7 +133,6 @@ The fish parser. Contains functions for parsing and evaluating code. */ #define EVENT_BLOCK N_( L"event handler block" ) - /** Unknown block description */ @@ -284,8 +184,6 @@ static const struct block_lookup_entry block_lookup[]= { (block_type_t)0, 0, 0 } }; -static bool job_should_skip_elseif(const job_t *job, const block_t *current_block); - // Given a file path, return something nicer. Currently we just "unexpand" tildes. static wcstring user_presentable_path(const wcstring &path) { @@ -1237,1332 +1135,6 @@ profile_item_t *parser_t::create_profile_item() return result; } -/** - Parse options for the specified job - - \param p the process to parse options for - \param j the job to which the process belongs to - \param tok the tokenizer to read options from - \param args the argument list to insert options into - \param args unskip whether we should ignore current_block()->skip. Big hack because of our dumb handling of if statements. -*/ -void parser_t::parse_job_argument_list(process_t *p, - job_t *j, - tokenizer_t *tok, - std::vector &args, - bool unskip) -{ - int is_finished=0; - - int proc_is_count=0; - - int matched_wildcard = 0, unmatched_wildcard = 0; - - wcstring unmatched; - int unmatched_pos=0; - - /* The set of IO redirections that we construct for the process */ - io_chain_t process_io_chain; - - /* - Test if this is the 'count' command. We need to special case - count in the shell, since it should display a help message on - 'count -h', but not on 'set foo -h; count $foo'. This is an ugly - workaround and a huge hack, but as near as I can tell, the - alternatives are worse. - */ - proc_is_count = (args.at(0).completion == L"count"); - - while (1) - { - - switch (tok_last_type(tok)) - { - case TOK_PIPE: - { - wchar_t *end; - - if (p->type == INTERNAL_EXEC) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - EXEC_ERR_MSG); - return; - } - - errno = 0; - p->pipe_write_fd = fish_wcstoi(tok_last(tok), &end, 10); - if (p->pipe_write_fd < 0 || errno || *end) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - ILLEGAL_FD_ERR_MSG, - tok_last(tok)); - return; - } - - p->set_argv(completions_to_wcstring_list(args)); - p->next = new process_t(); - - tok_next(tok); - - /* - Don't do anything on failure. parse_job will notice - the error flag and report any errors for us - */ - parse_job(p->next, j, tok); - - is_finished = 1; - break; - } - - case TOK_BACKGROUND: - { - job_set_flag(j, JOB_FOREGROUND, 0); - // PCA note fall through, this is deliberate. The background modifier & terminates a command - } - - case TOK_END: - { - if (!p->get_argv()) - p->set_argv(completions_to_wcstring_list(args)); - if (tok_has_next(tok)) - tok_next(tok); - - is_finished = 1; - - break; - } - - case TOK_STRING: - { - int skip=0; - - if (job_get_flag(j, JOB_SKIP)) - { - skip = 1; - } - else if (current_block()->skip && ! unskip) - { - /* - If this command should be skipped, we do not expand the arguments - */ - skip=1; - - /* But if this is in fact a case statement or an elseif statement, then it should be evaluated */ - block_type_t type = current_block()->type(); - if (type == SWITCH && args.at(0).completion == L"case" && p->type == INTERNAL_BUILTIN) - { - skip=0; - } - else if (job_get_flag(j, JOB_ELSEIF) && ! job_should_skip_elseif(j, current_block())) - { - skip=0; - } - } - else - { - /* If this is an else if, and we should skip it, then don't expand any arguments */ - if (job_get_flag(j, JOB_ELSEIF) && job_should_skip_elseif(j, current_block())) - { - skip = 1; - } - } - - if (!skip) - { - if ((proc_is_count) && - (args.size() == 1) && - (parser_t::is_help(tok_last(tok), 0)) && - (p->type == INTERNAL_BUILTIN)) - { - /* - Display help for count - */ - p->count_help_magic = 1; - } - - switch (expand_string(tok_last(tok), args, 0)) - { - case EXPAND_ERROR: - { - err_pos=tok_get_pos(tok); - if (error_code == 0) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - _(L"Could not expand string '%ls'"), - tok_last(tok)); - - } - break; - } - - case EXPAND_WILDCARD_NO_MATCH: - { - unmatched_wildcard = 1; - if (unmatched.empty()) - { - unmatched = tok_last(tok); - unmatched_pos = tok_get_pos(tok); - } - - break; - } - - case EXPAND_WILDCARD_MATCH: - { - matched_wildcard = 1; - break; - } - - case EXPAND_OK: - { - break; - } - - } - - } - - break; - } - - case TOK_REDIRECT_OUT: - case TOK_REDIRECT_IN: - case TOK_REDIRECT_APPEND: - case TOK_REDIRECT_FD: - case TOK_REDIRECT_NOCLOB: - { - int type = tok_last_type(tok); - shared_ptr new_io; - wcstring target; - bool has_target = false; - wchar_t *end; - - /* - Don't check redirections in skipped part - - Otherwise, bogus errors may be the result. (Do check - that token is string, though) - */ - if (current_block()->skip && ! unskip) - { - tok_next(tok); - if (tok_last_type(tok) != TOK_STRING) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - REDIRECT_TOKEN_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - } - - break; - } - - - errno = 0; - int fd = fish_wcstoi(tok_last(tok), - &end, - 10); - if (fd < 0 || errno || *end) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - ILLEGAL_FD_ERR_MSG, - tok_last(tok)); - } - else - { - - tok_next(tok); - - switch (tok_last_type(tok)) - { - case TOK_STRING: - { - target = tok_last(tok); - has_target = expand_one(target, no_exec ? EXPAND_SKIP_VARIABLES : 0); - - if (! has_target && error_code == 0) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - REDIRECT_TOKEN_ERR_MSG, - tok_last(tok)); - - } - break; - } - - default: - error(SYNTAX_ERROR, - tok_get_pos(tok), - REDIRECT_TOKEN_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - } - - if (! has_target || target.empty()) - { - if (error_code == 0) - error(SYNTAX_ERROR, - tok_get_pos(tok), - _(L"Invalid IO redirection")); - tok_next(tok); - } - else if (type == TOK_REDIRECT_FD) - { - if (target == L"-") - { - new_io.reset(new io_close_t(fd)); - } - else - { - wchar_t *end; - - errno = 0; - - int old_fd = fish_wcstoi(target.c_str(), &end, 10); - - if (old_fd < 0 || errno || *end) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - _(L"Requested redirection to something that is not a file descriptor %ls"), - target.c_str()); - - tok_next(tok); - } - else - { - new_io.reset(new io_fd_t(fd, old_fd)); - } - } - } - else - { - int flags = 0; - switch (type) - { - case TOK_REDIRECT_APPEND: - flags = O_CREAT | O_APPEND | O_WRONLY; - break; - - case TOK_REDIRECT_OUT: - flags = O_CREAT | O_WRONLY | O_TRUNC; - break; - - case TOK_REDIRECT_NOCLOB: - flags = O_CREAT | O_EXCL | O_WRONLY; - break; - - case TOK_REDIRECT_IN: - flags = O_RDONLY; - break; - - } - io_file_t *new_io_file = new io_file_t(fd, target, flags); - new_io.reset(new_io_file); - } - } - - if (new_io.get() != NULL) - { - process_io_chain.push_back(new_io); - } - - } - break; - - case TOK_ERROR: - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - TOK_ERR_MSG, - tok_last(tok)); - - return; - } - - default: - error(SYNTAX_ERROR, - tok_get_pos(tok), - UNEXPECTED_TOKEN_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - - tok_next(tok); - break; - } - - if ((is_finished) || (error_code != 0)) - break; - - tok_next(tok); - } - - if (!error_code) - { - if (unmatched_wildcard && !matched_wildcard) - { - job_set_flag(j, JOB_WILDCARD_ERROR, 1); - proc_set_last_status(STATUS_UNMATCHED_WILDCARD); - if (get_is_interactive() && !is_block) - { - int tmp; - - debug(1, WILDCARD_ERR_MSG, unmatched.c_str()); - tmp = current_tokenizer_pos; - current_tokenizer_pos = unmatched_pos; - - fwprintf(stderr, L"%ls", parser_t::current_line()); - - current_tokenizer_pos=tmp; - } - - } - } - - /* Store our IO chain. The existing chain should be empty. */ - assert(p->io_chain().empty()); - p->set_io_chain(process_io_chain); -} - -/** - Fully parse a single job. Does not call exec on it, but any command substitutions in the job will be executed. - - \param p The process structure that should be used to represent the first process in the job. - \param j The job structure to contain the parsed job - \param tok tokenizer to read from -f - \return 1 on success, 0 on error -*/ -int parser_t::parse_job(process_t *p, job_t *j, tokenizer_t *tok) -{ - std::vector args; // The list that will become the argv array for the program - int use_function = 1; // May functions be considered when checking what action this command represents - int use_builtin = 1; // May builtins be considered when checking what action this command represents - int use_command = 1; // May commands be considered when checking what action this command represents - int is_new_block=0; // Does this command create a new block? - bool unskip = false; // Maybe we are an elseif inside an if block; if so we may want to evaluate this even if the if block is currently set to skip - bool allow_bogus_command = false; // If we are an elseif that will not be executed, or an AND or OR that will have been short circuited, don't complain about non-existent commands - - const block_t *prev_block = current_block(); - scoped_push tokenizer_pos_push(¤t_tokenizer_pos, tok_get_pos(tok)); - - while (args.empty()) - { - wcstring nxt; - bool has_nxt = false; - bool consumed = false; // Set to one if the command requires a second command, like e.g. while does - int mark; // Use to save the position of the beginning of the token - - switch (tok_last_type(tok)) - { - case TOK_STRING: - { - nxt = tok_last(tok); - has_nxt = expand_one(nxt, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES); - - if (! has_nxt) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - ILLEGAL_CMD_ERR_MSG, - tok_last(tok)); - - return 0; - } - break; - } - - case TOK_ERROR: - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - TOK_ERR_MSG, - tok_last(tok)); - - return 0; - } - - case TOK_PIPE: - { - const wchar_t *str = tok_string(tok); - if (tok_get_pos(tok)>0 && str[tok_get_pos(tok)-1] == L'|') - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_OR_ERR_MSG); - } - else - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - } - - return 0; - } - - default: - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - - return 0; - } - } - - mark = tok_get_pos(tok); - - if (contains(nxt, - L"command", - L"builtin", - L"not", - L"and", - L"or", - L"exec")) - { - int sw; - int is_exec = nxt == L"exec"; - - if (is_exec && (p != j->first_process)) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - EXEC_ERR_MSG); - return 0; - } - - tok_next(tok); - sw = parser_keywords_is_switch(tok_last(tok)); - - if (sw == ARG_SWITCH) - { - tok_set_pos(tok, mark); - } - else - { - if (sw == ARG_SKIP) - { - tok_next(tok); - } - - consumed = true; - - if (nxt == L"command" || nxt == L"builtin") - { - use_function = 0; - if (nxt == L"command") - { - use_builtin = 0; - use_command = 1; - } - else - { - use_builtin = 1; - use_command = 0; - } - } - else if (nxt == L"not") - { - job_set_flag(j, JOB_NEGATE, !job_get_flag(j, JOB_NEGATE)); - } - else if (nxt == L"and") - { - bool skip = (proc_get_last_status() != 0); - job_set_flag(j, JOB_SKIP, skip); - allow_bogus_command = skip; - } - else if (nxt == L"or") - { - bool skip = (proc_get_last_status() == 0); - job_set_flag(j, JOB_SKIP, skip); - allow_bogus_command = skip; - } - else if (is_exec) - { - use_function = 0; - use_builtin=0; - p->type=INTERNAL_EXEC; - tokenizer_pos_push.restore(); - } - } - } - else if (nxt == L"while") - { - bool new_block = false; - tok_next(tok); - while_block_t *wb = NULL; - - if ((current_block()->type() != WHILE)) - { - new_block = true; - } - else if ((wb = static_cast(current_block()))->status == WHILE_TEST_AGAIN) - { - wb->status = WHILE_TEST_FIRST; - } - else - { - new_block = true; - } - - if (new_block) - { - while_block_t *wb = new while_block_t(); - wb->status = WHILE_TEST_FIRST; - wb->tok_pos = mark; - this->push_block(wb); - } - - consumed = true; - is_new_block=1; - - } - else if (nxt == L"if") - { - tok_next(tok); - - if_block_t *ib = new if_block_t(); - this->push_block(ib); - ib->tok_pos = mark; - - is_new_block=1; - consumed = true; - } - else if (nxt == L"else") - { - /* Record where the else is for error reporting */ - const int else_pos = tok_get_pos(tok); - /* See if we have any more arguments, that is, whether we're ELSE IF ... or just ELSE. */ - tok_next(tok); - if (tok_last_type(tok) == TOK_STRING && current_block()->type() == IF) - { - const if_block_t *ib = static_cast(current_block()); - - /* If we've already encountered an else, complain */ - if (ib->else_evaluated) - { - error(SYNTAX_ERROR, - else_pos, - INVALID_ELSEIF_PAST_ELSE_ERR_MSG, - L"else if"); - - } - else - { - - job_set_flag(j, JOB_ELSEIF, 1); - consumed = true; - - /* We're at the IF. Go past it. */ - tok_next(tok); - - /* We want to execute this ELSEIF if the IF expression was evaluated, it failed, and so has every other ELSEIF (if any) */ - unskip = (ib->if_expr_evaluated && ! ib->any_branch_taken); - - /* But if we're not executing it, don't complain about its command if it doesn't exist */ - if (! unskip) - allow_bogus_command = true; - } - } - } - - /* - Test if we need another command - */ - if (consumed) - { - /* - Yes we do, around in the loop for another lap, then! - */ - continue; - } - - if (use_function && (unskip || ! current_block()->skip)) - { - bool nxt_forbidden=false; - wcstring forbid; - - int is_function_call=0; - - /* - This is a bit fragile. It is a test to see if we are - inside of function call, but not inside a block in that - function call. If, in the future, the rules for what - block scopes are pushed on function invocation changes, - then this check will break. - */ - const block_t *current = this->block_at_index(0), *parent = this->block_at_index(1); - if (current && parent && current->type() == TOP && parent->type() == FUNCTION_CALL) - is_function_call = 1; - - /* - If we are directly in a function, and this is the first - command of the block, then the function we are executing - may not be called, since that would mean an infinite - recursion. - */ - if (is_function_call && !current->had_command) - { - forbid = forbidden_function.empty() ? wcstring(L"") : forbidden_function.back(); - if (forbid == nxt) - { - /* Infinite recursive loop */ - nxt_forbidden = true; - error(SYNTAX_ERROR, tok_get_pos(tok), INFINITE_RECURSION_ERR_MSG); - } - } - - if (!nxt_forbidden && has_nxt && function_exists(nxt)) - { - /* - Check if we have reached the maximum recursion depth - */ - if (forbidden_function.size() > FISH_MAX_STACK_DEPTH) - { - error(SYNTAX_ERROR, tok_get_pos(tok), CALL_STACK_LIMIT_EXCEEDED_ERR_MSG); - } - else - { - p->type = INTERNAL_FUNCTION; - } - } - } - append_completion(args, nxt); - } - - if (error_code == 0) - { - if (!p->type) - { - if (use_builtin && - builtin_exists(args.at(0).completion)) - { - p->type = INTERNAL_BUILTIN; - is_new_block |= parser_keywords_is_block(args.at(0).completion); - } - } - - if ((!p->type || (p->type == INTERNAL_EXEC))) - { - /* - If we are not executing the current block, allow - non-existent commands. - */ - if (current_block()->skip && ! unskip) - allow_bogus_command = true; //note this may already be true for other reasons - - if (allow_bogus_command) - { - p->actual_cmd.clear(); - } - else - { - int err; - bool has_command = path_get_path(args.at(0).completion, &p->actual_cmd); - err = errno; - - bool use_implicit_cd = false; - if (! has_command) - { - /* If the specified command does not exist, try using an implicit cd. */ - wcstring implicit_cd_path; - use_implicit_cd = path_can_be_implicit_cd(args.at(0).completion, &implicit_cd_path); - if (use_implicit_cd) - { - args.clear(); - append_completion(args, L"cd"); - append_completion(args, implicit_cd_path); - - /* If we have defined a wrapper around cd, use it, otherwise use the cd builtin */ - if (use_function && function_exists(L"cd")) - p->type = INTERNAL_FUNCTION; - else - p->type = INTERNAL_BUILTIN; - } - } - - // Disabled pending discussion in https://github.com/fish-shell/fish-shell/issues/367 -#if 0 - if (! has_command && ! use_implicit_cd) - { - if (fish_openSUSE_dbus_hack_hack_hack_hack(&args)) - { - has_command = true; - p->type = INTERNAL_BUILTIN; - } - } -#endif - - /* Check if the specified command exists */ - if (! has_command && ! use_implicit_cd) - { - - const wchar_t *cmd = args.at(0).completion.c_str(); - - /* - We couldn't find the specified command. - - What we want to happen now is that the - specified job won't get executed, and an - error message is printed on-screen, but - otherwise, the parsing/execution of the - file continues. Because of this, we don't - want to call error(), since that would stop - execution of the file. Instead we let - p->actual_command be 0 (null), which will - cause the job to silently not execute. We - also print an error message and set the - status to 127 (This is the standard number - for this, used by other shells like bash - and zsh). - */ - - const wchar_t * const equals_ptr = wcschr(cmd, L'='); - 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'."), - cmd, - next_str.c_str(), - name_str.c_str(), - val_str.c_str(), - next_str.c_str(), - ellipsis_str.c_str()); - } - else - { - debug(0, - COMMAND_ASSIGN_ERR_MSG, - cmd, - name_str.c_str(), - val_str.c_str()); - } - } - else if (cmd[0]==L'$' || cmd[0] == VARIABLE_EXPAND || cmd[0] == VARIABLE_EXPAND_SINGLE) - { - - const env_var_t val_wstr = env_get_string(cmd+1); - const wchar_t *val = val_wstr.missing() ? NULL : val_wstr.c_str(); - if (val) - { - debug(0, - _(L"Variables may not be used as commands. Instead, define a function like 'function %ls; %ls $argv; end' or use the eval builtin instead, like 'eval %ls'. See the help section for the function command by typing 'help function'."), - cmd+1, - val, - cmd, - cmd); - } - else - { - debug(0, - _(L"Variables may not be used as commands. Instead, define a function or use the eval builtin instead, like 'eval %ls'. See the help section for the function command by typing 'help function'."), - cmd, - cmd); - } - } - else if (wcschr(cmd, L'$')) - { - debug(0, - _(L"Commands may not contain variables. Use the eval builtin instead, like 'eval %ls'. See the help section for the eval command by typing 'help eval'."), - cmd, - cmd); - } - else if (err!=ENOENT) - { - debug(0, - _(L"The file '%ls' is not executable by this user"), - cmd?cmd:L"UNKNOWN"); - } - else - { - /* - Handle unrecognized commands with standard - command not found handler that can make better - error messages - */ - - wcstring_list_t event_args; - event_args.push_back(args.at(0).completion); - event_fire_generic(L"fish_command_not_found", &event_args); - } - - int tmp = current_tokenizer_pos; - current_tokenizer_pos = tok_get_pos(tok); - - fwprintf(stderr, L"%ls", parser_t::current_line()); - - current_tokenizer_pos=tmp; - - job_set_flag(j, JOB_SKIP, 1); - - proc_set_last_status(err==ENOENT?STATUS_UNKNOWN_COMMAND:STATUS_NOT_EXECUTABLE); - } - } - } - - if ((p->type == EXTERNAL) && !use_command) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - UNKNOWN_BUILTIN_ERR_MSG, - args.back().completion.c_str()); - } - } - - - if (is_new_block) - { - - const wchar_t *end=parser_find_end(tok_string(tok) + - current_tokenizer_pos); - int make_sub_block = j->first_process != p; - - if (!end) - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - BLOCK_END_ERR_MSG); - - } - else - { - - if (!make_sub_block) - { - int done=0; - - tokenizer_t subtok(end, 0); - for (; ! done && tok_has_next(&subtok); tok_next(&subtok)) - { - - switch (tok_last_type(&subtok)) - { - case TOK_END: - done = 1; - break; - - case TOK_REDIRECT_OUT: - case TOK_REDIRECT_NOCLOB: - case TOK_REDIRECT_APPEND: - case TOK_REDIRECT_IN: - case TOK_REDIRECT_FD: - case TOK_PIPE: - { - done = 1; - make_sub_block = 1; - break; - } - - case TOK_STRING: - { - break; - } - - default: - { - done = 1; - error(SYNTAX_ERROR, - current_tokenizer_pos, - BLOCK_END_ERR_MSG); - } - } - } - } - - if (make_sub_block) - { - - long end_pos = end-tok_string(tok); - const wcstring sub_block(tok_string(tok) + current_tokenizer_pos, end_pos - current_tokenizer_pos); - - p->type = INTERNAL_BLOCK; - args.at(0) = completion_t(sub_block); - - tok_set_pos(tok, (int)end_pos); - - while (prev_block != this->current_block()) - { - parser_t::pop_block(); - } - - } - else tok_next(tok); - } - - } - else tok_next(tok); - - if (!error_code) - { - if (p->type == INTERNAL_BUILTIN && parser_keywords_skip_arguments(args.at(0).completion)) - { - if (!p->get_argv()) - p->set_argv(completions_to_wcstring_list(args)); - } - else - { - parse_job_argument_list(p, j, tok, args, unskip); - } - } - - if (!error_code) - { - if (!is_new_block) - { - current_block()->had_command = true; - } - } - - if (error_code) - { - /* - Make sure the block stack is consistent - */ - while (prev_block != current_block()) - { - parser_t::pop_block(); - } - } - return !error_code; -} - -/** - Do skipped execution of command. This means that only limited - execution of block level commands such as end and switch should be - preformed. - - \param j the job to execute - -*/ -void parser_t::skipped_exec(job_t * j) -{ - process_t *p; - - /* Handle other skipped guys */ - for (p = j->first_process; p; p=p->next) - { - if (p->type == INTERNAL_BUILTIN) - { - if ((wcscmp(p->argv0(), L"for")==0) || - (wcscmp(p->argv0(), L"switch")==0) || - (wcscmp(p->argv0(), L"begin")==0) || - (wcscmp(p->argv0(), L"function")==0)) - { - this->push_block(new fake_block_t()); - } - else if (wcscmp(p->argv0(), L"end")==0) - { - const block_t *parent = this->block_at_index(1); - if (parent && ! parent->skip) - { - exec_job(*this, j); - return; - } - parser_t::pop_block(); - } - else if (wcscmp(p->argv0(), L"else")==0) - { - if (current_block()->type() == IF) - { - /* Evaluate this ELSE if the IF expression failed, and so has every ELSEIF (if any) expression thus far */ - const if_block_t *ib = static_cast(current_block()); - if (ib->if_expr_evaluated && ! ib->any_branch_taken) - { - exec_job(*this, j); - return; - } - } - } - else if (wcscmp(p->argv0(), L"case")==0) - { - if (current_block()->type() == SWITCH) - { - exec_job(*this, j); - return; - } - } - } - } - job_free(j); -} - -/* Return whether we should skip the current block, if it is an elseif. */ -static bool job_should_skip_elseif(const job_t *job, const block_t *current_block) -{ - if (current_block->type() != IF) - { - /* Not an IF block, so just honor the skip property */ - return current_block->skip; - } - else - { - /* We are an IF block */ - const if_block_t *ib = static_cast(current_block); - - /* Execute this ELSEIF if the IF expression has been evaluated, it evaluated to false, and all ELSEIFs so far have evaluated to false. */ - bool execute_elseif = (ib->if_expr_evaluated && ! ib->any_branch_taken); - - /* Invert the sense */ - return ! execute_elseif; - } -} - -/** - Evaluates a job from the specified tokenizer. First calls - parse_job to parse the job and then calls exec to execute it. - - \param tok The tokenizer to read tokens from -*/ - -void parser_t::eval_job(tokenizer_t *tok) -{ - ASSERT_IS_MAIN_THREAD(); - - int start_pos = job_start_pos = tok_get_pos(tok); - long long t1=0, t2=0, t3=0; - - - bool skip = false; - int job_begin_pos; - - profile_item_t *profile_item = create_profile_item(); - const bool do_profile = (profile_item != NULL); - if (do_profile) - { - profile_item->skipped = 1; - t1 = get_time(); - } - - switch (tok_last_type(tok)) - { - case TOK_STRING: - { - job_t *j = this->job_create(this->block_io); - job_set_flag(j, JOB_FOREGROUND, 1); - job_set_flag(j, JOB_TERMINAL, job_get_flag(j, JOB_CONTROL)); - job_set_flag(j, JOB_TERMINAL, job_get_flag(j, JOB_CONTROL) \ - && (!is_subshell && !is_event)); - job_set_flag(j, JOB_SKIP_NOTIFICATION, is_subshell \ - || is_block \ - || is_event \ - || (!get_is_interactive())); - - current_block()->job = j; - - if (get_is_interactive()) - { - if (tcgetattr(0, &j->tmodes)) - { - tok_next(tok); - wperror(L"tcgetattr"); - job_free(j); - break; - } - } - - j->first_process = new process_t(); - job_begin_pos = tok_get_pos(tok); - - if (parse_job(j->first_process, j, tok) && - j->first_process->get_argv()) - { - if (job_start_pos < tok_get_pos(tok)) - { - long stop_pos = tok_get_pos(tok); - const wchar_t *newline = wcschr(tok_string(tok)+start_pos, L'\n'); - if (newline) - stop_pos = mini(stop_pos, newline - tok_string(tok)); - - j->set_command(wcstring(tok_string(tok)+start_pos, stop_pos-start_pos)); - } - else - j->set_command(L""); - - if (do_profile) - { - t2 = get_time(); - profile_item->cmd = j->command(); - profile_item->skipped=current_block()->skip; - } - - /* If we're an ELSEIF, then we may want to unskip, if we're skipping because of an IF */ - if (job_get_flag(j, JOB_ELSEIF)) - { - bool skip_elseif = job_should_skip_elseif(j, current_block()); - - /* Record that we're entering an elseif */ - if (! skip_elseif) - { - /* We must be an IF block here */ - assert(current_block()->type() == IF); - static_cast(current_block())->is_elseif_entry = true; - } - - /* Record that in the block too. This is similar to what builtin_else does. */ - current_block()->skip = skip_elseif; - } - - skip = skip || current_block()->skip; - skip = skip || job_get_flag(j, JOB_WILDCARD_ERROR); - skip = skip || job_get_flag(j, JOB_SKIP); - - if (!skip) - { - int was_builtin = 0; - if (j->first_process->type==INTERNAL_BUILTIN && !j->first_process->next) - { - was_builtin = 1; - } - scoped_push tokenizer_pos_push(¤t_tokenizer_pos, job_begin_pos); - exec_job(*this, j); - - /* Only external commands require a new fishd barrier */ - if (!was_builtin) - set_proc_had_barrier(false); - } - else - { - this->skipped_exec(j); - } - - if (do_profile) - { - t3 = get_time(); - profile_item->level=eval_level; - profile_item->parse = (int)(t2-t1); - profile_item->exec=(int)(t3-t2); - } - - if (current_block()->type() == WHILE) - { - while_block_t *wb = static_cast(current_block()); - switch (wb->status) - { - case WHILE_TEST_FIRST: - { - // PCA I added the 'wb->skip ||' part because we couldn't reliably - // control-C out of loops like this: while test 1 -eq 1; end - wb->skip = wb->skip || proc_get_last_status()!= 0; - wb->status = WHILE_TESTED; - } - break; - } - } - - if (current_block()->type() == IF) - { - if_block_t *ib = static_cast(current_block()); - - if (ib->skip) - { - /* Nothing */ - } - else if (! ib->if_expr_evaluated) - { - /* Execute the IF */ - bool if_result = (proc_get_last_status() == 0); - ib->any_branch_taken = if_result; - - /* Don't execute if the expression failed */ - current_block()->skip = ! if_result; - ib->if_expr_evaluated = true; - } - else if (ib->is_elseif_entry && ! ib->any_branch_taken) - { - /* Maybe mark an ELSEIF branch as taken */ - bool elseif_taken = (proc_get_last_status() == 0); - ib->any_branch_taken = elseif_taken; - current_block()->skip = ! elseif_taken; - ib->is_elseif_entry = false; - } - } - - } - else - { - /* - This job could not be properly parsed. We free it - instead, and set the status to 1. This should be - rare, since most errors should be detected by the - ahead of time validator. - */ - job_free(j); - - proc_set_last_status(1); - } - current_block()->job = 0; - break; - } - - case TOK_END: - { - if (tok_has_next(tok)) - tok_next(tok); - break; - } - - case TOK_BACKGROUND: - { - const wchar_t *str = tok_string(tok); - if (tok_get_pos(tok)>0 && str[tok_get_pos(tok)-1] == L'&') - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_AND_ERR_MSG); - } - else - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - } - - return; - } - - case TOK_ERROR: - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - TOK_ERR_MSG, - tok_last(tok)); - - return; - } - - default: - { - error(SYNTAX_ERROR, - tok_get_pos(tok), - CMD_ERR_MSG, - tok_get_desc(tok_last_type(tok))); - - return; - } - } - - job_reap(0); -} int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum block_type_t block_type) { @@ -2664,116 +1236,7 @@ int parser_t::eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum int parser_t::eval(const wcstring &cmd_str, const io_chain_t &io, enum block_type_t block_type) { - - if (parser_use_ast()) - return this->eval_new_parser(cmd_str, io, block_type); - - const wchar_t * const cmd = cmd_str.c_str(); - size_t forbid_count; - int code; - const block_t *start_current_block = current_block(); - - /* Record the current chain so we can put it back later */ - scoped_push block_io_push(&block_io, io); - - scoped_push forbidden_function_push(&forbidden_function); - - if (block_type == SUBST) - { - forbidden_function.clear(); - } - - CHECK_BLOCK(1); - - forbid_count = forbidden_function.size(); - - job_reap(0); - - debug(4, L"eval: %ls", cmd); - - - if ((block_type != TOP) && - (block_type != SUBST)) - { - debug(1, - INVALID_SCOPE_ERR_MSG, - parser_t::get_block_desc(block_type)); - bugreport(); - return 1; - } - - eval_level++; - - this->push_block(new scope_block_t(block_type)); - - tokenizer_t local_tokenizer(cmd, 0); - scoped_push tokenizer_push(¤t_tokenizer, &local_tokenizer); - scoped_push tokenizer_pos_push(¤t_tokenizer_pos, 0); - - error_code = 0; - - event_fire(NULL); - - while (tok_has_next(current_tokenizer) && - !error_code && - !sanity_check() && - !shell_is_exiting()) - { - this->eval_job(current_tokenizer); - event_fire(NULL); - } - - parser_t::pop_block(); - - while (start_current_block != current_block()) - { - if (current_block() == NULL) - { - debug(0, - _(L"End of block mismatch. Program terminating.")); - bugreport(); - FATAL_EXIT(); - break; - } - - if ((!error_code) && (!shell_is_exiting()) && (!proc_get_last_status())) - { - - //debug( 2, L"Status %d\n", proc_get_last_status() ); - - debug(1, - L"%ls", parser_t::get_block_desc(current_block()->type())); - debug(1, - BLOCK_END_ERR_MSG); - fwprintf(stderr, L"%ls", parser_t::current_line()); - - const wcstring h = builtin_help_get(*this, L"end"); - if (h.size()) - fwprintf(stderr, L"%ls", h.c_str()); - break; - - } - parser_t::pop_block(); - } - - this->print_errors_stderr(); - - tokenizer_push.restore(); - - while (forbidden_function.size() > forbid_count) - parser_t::allow_function(); - - /* - Restore previous eval state - */ - eval_level--; - - code=error_code; - error_code=0; - - job_reap(0); - - return code; + return this->eval_new_parser(cmd_str, io, block_type); } diff --git a/parser.h b/parser.h index f4dfcac25..931d5b165 100644 --- a/parser.h +++ b/parser.h @@ -325,11 +325,7 @@ private: parser_t(const parser_t&); parser_t& operator=(const parser_t&); - - void parse_job_argument_list(process_t *p, job_t *j, tokenizer_t *tok, std::vector&, bool); - int parse_job(process_t *p, job_t *j, tokenizer_t *tok); void skipped_exec(job_t * j); - void eval_job(tokenizer_t *tok); int parser_test_argument(const wchar_t *arg, wcstring *out, const wchar_t *prefix, int offset); void print_errors(wcstring &target, const wchar_t *prefix); void print_errors_stderr(); From d232a0f9512d0e1b575235fdf4119a63353ecedd Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 1 Mar 2014 16:04:13 -0800 Subject: [PATCH 098/145] Implement status -n (line number) with new parser --- parse_execution.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++- parse_execution.h | 10 ++++++++ parser.cpp | 10 ++++++++ tests/test9.in | 5 ++++ tests/test9.out | 3 +++ 5 files changed, 87 insertions(+), 1 deletion(-) diff --git a/parse_execution.cpp b/parse_execution.cpp index 726f29207..15c7de5f2 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -50,7 +50,7 @@ static wcstring profiling_cmd_name_for_redirectable_block(const parse_node_t &no return result; } -parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level) : tree(t), src(s), parser(p), eval_level(initial_eval_level) +parse_execution_context_t::parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level) : tree(t), src(s), parser(p), eval_level(initial_eval_level), executing_node_idx(NODE_OFFSET_INVALID), cached_lineno_offset(0), cached_lineno_count(0) { } @@ -1302,6 +1302,9 @@ parse_execution_result_t parse_execution_context_t::run_1_job(const parse_node_t /* Increment the eval_level for the duration of this command */ scoped_push saved_eval_level(&eval_level, eval_level + 1); + + /* Save the node index */ + scoped_push saved_node_offset(&executing_node_idx, this->get_offset(job_node)); /* Profiling support */ long long start_time = 0, parse_time = 0, exec_time = 0; @@ -1525,3 +1528,58 @@ parse_execution_result_t parse_execution_context_t::eval_node_at_offset(node_off return status; } + +int parse_execution_context_t::get_current_line_number() +{ + /* If we're not executing anything, return -1 */ + if (this->executing_node_idx == NODE_OFFSET_INVALID) + { + return -1; + } + + /* If for some reason we're executing a node without source, return -1 */ + const parse_node_t &node = tree.at(this->executing_node_idx); + if (! node.has_source()) + { + return -1; + } + + /* Count the number of newlines, leveraging our cache */ + const size_t offset = tree.at(this->executing_node_idx).source_start; + assert(offset <= src.size()); + + /* Easy hack to handle 0 */ + if (offset == 0) + { + return 1; + } + + /* We want to return (one plus) the number of newlines at offsets less than the given offset. cached_lineno_count is the number of newlines at indexes less than cached_lineno_offset. */ + const wchar_t *str = src.c_str(); + if (offset > cached_lineno_offset) + { + size_t i; + for (i = cached_lineno_offset; str[i] != L'\0' && i < offset; i++) + { + /* Add one for every newline we find in the range [cached_lineno_offset, offset) */ + if (str[i] == L'\n') + { + cached_lineno_count++; + } + } + cached_lineno_offset = i; //note: i, not offset, in case offset is beyond the length of the string + } + else if (offset < cached_lineno_offset) + { + /* Subtract one for every newline we find in the range [offset, cached_lineno_offset) */ + for (size_t i = offset; i < cached_lineno_offset; i++) + { + if (str[i] == L'\n') + { + cached_lineno_count--; + } + } + cached_lineno_offset = offset; + } + return cached_lineno_count + 1; +} diff --git a/parse_execution.h b/parse_execution.h index 8ab5c5d6e..91c32c99b 100644 --- a/parse_execution.h +++ b/parse_execution.h @@ -39,6 +39,13 @@ private: //parse_error_list_t errors; int eval_level; + + /* The currently executing node index, used to indicate the line number */ + node_offset_t executing_node_idx; + + /* Cached line number information */ + size_t cached_lineno_offset; + int cached_lineno_count; /* No copying allowed */ parse_execution_context_t(const parse_execution_context_t&); @@ -105,6 +112,9 @@ public: /* Returns the current eval level */ int current_eval_level() const { return eval_level; } + + /* Returns the current line number. Not const since it touches cached_lineno_offset */ + int get_current_line_number(); /* Start executing at the given node offset. Returns 0 if there was no error, 1 if there was an error */ parse_execution_result_t eval_node_at_offset(node_offset_t offset, const block_t *associated_block, const io_chain_t &io); diff --git a/parser.cpp b/parser.cpp index 0a4f004ae..3febef097 100644 --- a/parser.cpp +++ b/parser.cpp @@ -928,6 +928,16 @@ const wchar_t *parser_t::is_function() const int parser_t::get_lineno() const { + if (parser_use_ast()) + { + int lineno = -1; + if (! execution_contexts.empty()) + { + lineno = execution_contexts.back()->get_current_line_number(); + } + return lineno; + } + int lineno; if (! current_tokenizer || ! tok_string(current_tokenizer)) diff --git a/tests/test9.in b/tests/test9.in index 32a537f78..a3a48151a 100644 --- a/tests/test9.in +++ b/tests/test9.in @@ -79,4 +79,9 @@ for $var1 in 1 2 3 end echo +# Test status -n +eval 'status -n +status -n +status -n' + false diff --git a/tests/test9.out b/tests/test9.out index e44b26044..d42618630 100644 --- a/tests/test9.out +++ b/tests/test9.out @@ -10,3 +10,6 @@ Foop Doop Testing for loop 123 +1 +2 +3 From 6b3a37c59785872eb62112e9045e7cc2b2e2406e Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 2 Mar 2014 13:11:17 -0800 Subject: [PATCH 099/145] Remove obviated builtins and additional cleanup of old parser --- builtin.cpp | 619 +--------------------------------------------------- parser.cpp | 111 +--------- 2 files changed, 10 insertions(+), 720 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index 8b8b8d5c2..930d10be2 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -1728,7 +1728,7 @@ static int builtin_pwd(parser_t &parser, wchar_t **argv) } } -/* This is nearly identical to builtin_function, and is intended to be the successor (with no block manipulation, no function/end split) */ +/** Adds a function to the function set. It calls into function.cpp to perform any heavy lifting. */ int define_function(parser_t &parser, const wcstring_list_t &c_args, const wcstring &contents, wcstring *out_err) { assert(out_err != NULL); @@ -2034,338 +2034,6 @@ int define_function(parser_t &parser, const wcstring_list_t &c_args, const wcstr return res; } -/** - The function builtin, used for providing subroutines. - It calls various functions from function.c to perform any heavy lifting. -*/ -static int builtin_function(parser_t &parser, wchar_t **argv) -{ - /* Hack hack hack - with the new parser, this is only invoked for help */ - if (parser_use_ast()) - { - builtin_print_help(parser, argv[0], stdout_buffer); - return STATUS_BUILTIN_OK; - } - - int argc = builtin_count_args(argv); - int res=STATUS_BUILTIN_OK; - wchar_t *desc=0; - std::vector events; - std::auto_ptr named_arguments(NULL); - - wchar_t *name = 0; - bool shadows = true; - - woptind=0; - - function_def_block_t * const fdb = new function_def_block_t(); - parser.push_block(fdb); - - const struct woption long_options[] = - { - { L"description", required_argument, 0, 'd' }, - { L"on-signal", required_argument, 0, 's' }, - { L"on-job-exit", required_argument, 0, 'j' }, - { L"on-process-exit", required_argument, 0, 'p' }, - { L"on-variable", required_argument, 0, 'v' }, - { L"on-event", required_argument, 0, 'e' }, - { L"help", no_argument, 0, 'h' }, - { L"argument-names", no_argument, 0, 'a' }, - { L"no-scope-shadowing", no_argument, 0, 'S' }, - { 0, 0, 0, 0 } - }; - - while (1 && (!res)) - { - int opt_index = 0; - - int opt = wgetopt_long(argc, - argv, - L"d:s:j:p:v:e:haS", - long_options, - &opt_index); - if (opt == -1) - break; - - switch (opt) - { - case 0: - if (long_options[opt_index].flag != 0) - break; - append_format(stderr_buffer, - BUILTIN_ERR_UNKNOWN, - argv[0], - long_options[opt_index].name); - - res = 1; - break; - - case 'd': - desc=woptarg; - break; - - case 's': - { - int sig = wcs2sig(woptarg); - - if (sig < 0) - { - append_format(stderr_buffer, - _(L"%ls: Unknown signal '%ls'\n"), - argv[0], - woptarg); - res=1; - break; - } - events.push_back(event_t::signal_event(sig)); - break; - } - - case 'v': - { - if (wcsvarname(woptarg)) - { - append_format(stderr_buffer, - _(L"%ls: Invalid variable name '%ls'\n"), - argv[0], - woptarg); - res=STATUS_BUILTIN_ERROR; - break; - } - - events.push_back(event_t::variable_event(woptarg)); - break; - } - - - case 'e': - { - events.push_back(event_t::generic_event(woptarg)); - break; - } - - case 'j': - case 'p': - { - pid_t pid; - wchar_t *end; - event_t e(EVENT_ANY); - - if ((opt == 'j') && - (wcscasecmp(woptarg, L"caller") == 0)) - { - int job_id = -1; - - if (is_subshell) - { - size_t block_idx = 0; - - /* Find the outermost substitution block */ - for (block_idx = 0; ; block_idx++) - { - const block_t *b = parser.block_at_index(block_idx); - if (b == NULL || b->type() == SUBST) - break; - } - - /* Go one step beyond that, to get to the caller */ - const block_t *caller_block = parser.block_at_index(block_idx + 1); - if (caller_block != NULL && caller_block->job != NULL) - { - job_id = caller_block->job->job_id; - } - } - - if (job_id == -1) - { - append_format(stderr_buffer, - _(L"%ls: Cannot find calling job for event handler\n"), - argv[0]); - res=1; - } - else - { - e.type = EVENT_JOB_ID; - e.param1.job_id = job_id; - } - - } - else - { - errno = 0; - pid = fish_wcstoi(woptarg, &end, 10); - if (errno || !end || *end) - { - append_format(stderr_buffer, - _(L"%ls: Invalid process id %ls\n"), - argv[0], - woptarg); - res=1; - break; - } - - - e.type = EVENT_EXIT; - e.param1.pid = (opt=='j'?-1:1)*abs(pid); - } - if (res) - { - /* nothing */ - } - else - { - events.push_back(e); - } - break; - } - - case 'a': - if (named_arguments.get() == NULL) - named_arguments.reset(new wcstring_list_t); - break; - - case 'S': - shadows = 0; - break; - - case 'h': - parser.pop_block(); - parser.push_block(new fake_block_t()); - builtin_print_help(parser, argv[0], stdout_buffer); - return STATUS_BUILTIN_OK; - - case '?': - builtin_unknown_option(parser, argv[0], argv[woptind-1]); - res = 1; - break; - - } - - } - - if (!res) - { - - if (argc == woptind) - { - append_format(stderr_buffer, - _(L"%ls: Expected function name\n"), - argv[0]); - res=1; - } - else if (wcsfuncname(argv[woptind])) - { - append_format(stderr_buffer, - _(L"%ls: Illegal function name '%ls'\n"), - argv[0], - argv[woptind]); - - res=1; - } - else if (parser_keywords_is_reserved(argv[woptind])) - { - - append_format(stderr_buffer, - _(L"%ls: The name '%ls' is reserved,\nand can not be used as a function name\n"), - argv[0], - argv[woptind]); - - res=1; - } - else if (! wcslen(argv[woptind])) - { - append_format(stderr_buffer, _(L"%ls: No function name given\n"), argv[0]); - } - else - { - - name = argv[woptind++]; - - if (named_arguments.get()) - { - while (woptind < argc) - { - if (wcsvarname(argv[woptind])) - { - append_format(stderr_buffer, - _(L"%ls: Invalid variable name '%ls'\n"), - argv[0], - argv[woptind]); - res = STATUS_BUILTIN_ERROR; - break; - } - - named_arguments->push_back(argv[woptind++]); - } - } - else if (woptind != argc) - { - append_format(stderr_buffer, - _(L"%ls: Expected one argument, got %d\n"), - argv[0], - argc); - res=1; - - } - } - } - - if (res) - { - size_t i; - size_t chars=0; - - builtin_print_help(parser, argv[0], stderr_buffer); - const wchar_t *cfa = _(L"Current functions are: "); - stderr_buffer.append(cfa); - chars += wcslen(cfa); - - wcstring_list_t names = function_get_names(0); - sort(names.begin(), names.end()); - - for (i=0; i (size_t)common_get_width()) - { - chars = 0; - stderr_buffer.push_back(L'\n'); - } - - stderr_buffer.append(nxt); - stderr_buffer.append(L" "); - } - stderr_buffer.push_back(L'\n'); - - parser.pop_block(); - parser.push_block(new fake_block_t()); - } - else - { - function_data_t &d = fdb->function_data; - - d.name = name; - if (desc) - d.description = desc; - d.events.swap(events); - d.shadows = shadows; - if (named_arguments.get()) - d.named_arguments.swap(*named_arguments); - - for (size_t i=0; itok_pos = parser.get_pos(); - parser.current_block()->skip = 1; - - return STATUS_BUILTIN_OK; -} - /** The random builtin. For generating random numbers. */ @@ -3713,195 +3381,6 @@ static int builtin_for(parser_t &parser, wchar_t **argv) return res; } -/** - The begin builtin. Creates a new block. -*/ -static int builtin_begin(parser_t &parser, wchar_t **argv) -{ - parser.push_block(new scope_block_t(BEGIN)); - parser.current_block()->tok_pos = parser.get_pos(); - return proc_get_last_status(); -} - - -/** - Builtin for ending a block of code, such as a for-loop or an if statement. - - The end command is whare a lot of the block-level magic happens. -*/ -static int builtin_end(parser_t &parser, wchar_t **argv) -{ - if (! parser.block_at_index(1)) - { - append_format(stderr_buffer, - _(L"%ls: Not inside of block\n"), - argv[0]); - - builtin_print_help(parser, argv[0], stderr_buffer); - return STATUS_BUILTIN_ERROR; - } - else - { - /** - By default, 'end' kills the current block scope. But if we - are rewinding a loop, this should be set to false, so that - variables in the current loop scope won't die between laps. - */ - bool kill_block = true; - - block_t * const current_block = parser.current_block(); - switch (current_block->type()) - { - case WHILE: - { - /* - If this is a while loop, we rewind the loop unless - it's the last lap, in which case we continue. - */ - if (!(current_block->skip && (current_block->loop_status != LOOP_CONTINUE))) - { - current_block->loop_status = LOOP_NORMAL; - current_block->skip = 0; - kill_block = false; - parser.set_pos(current_block->tok_pos); - while_block_t *blk = static_cast(current_block); - blk->status = WHILE_TEST_AGAIN; - } - - break; - } - - case IF: - /* Always return success (#1061) */ - proc_set_last_status(0); - break; - - case SUBST: - case BEGIN: - case SWITCH: - case FAKE: - /* - Nothing special happens at the end of these commands. The scope just ends. - */ - - break; - - case FOR: - { - /* - set loop variable to next element, and rewind to the beginning of the block. - */ - for_block_t *fb = static_cast(current_block); - wcstring_list_t &for_vars = fb->sequence; - if (current_block->loop_status == LOOP_BREAK) - { - for_vars.clear(); - } - - if (! for_vars.empty()) - { - const wcstring val = for_vars.back(); - for_vars.pop_back(); - const wcstring &for_variable = fb->variable; - env_set(for_variable, val.c_str(), ENV_LOCAL); - current_block->loop_status = LOOP_NORMAL; - current_block->skip = 0; - - kill_block = false; - parser.set_pos(current_block->tok_pos); - } - break; - } - - case FUNCTION_DEF: - { - function_def_block_t *fdb = static_cast(current_block); - function_data_t &d = fdb->function_data; - - if (d.name.empty()) - { - /* Disallow empty function names */ - append_format(stderr_buffer, _(L"%ls: No function name given\n"), argv[0]); - - /* Return an error via a crummy way. Don't just return here, since we need to pop the block. */ - proc_set_last_status(STATUS_BUILTIN_ERROR); - } - else - { - /** - Copy the text from the beginning of the function - until the end command and use as the new definition - for the specified function - */ - - wchar_t *def = wcsndup(parser.get_buffer()+current_block->tok_pos, - parser.get_job_pos()-current_block->tok_pos); - d.definition = def; - - function_add(d, parser); - free(def); - } - } - break; - - default: - assert(false); //should never get here - break; - - } - if (kill_block) - { - parser.pop_block(); - } - - /* - If everything goes ok, return status of last command to execute. - */ - return proc_get_last_status(); - } -} - -/** - Builtin for executing commands if an if statement is false -*/ -static int builtin_else(parser_t &parser, wchar_t **argv) -{ - bool block_ok = false; - if_block_t *if_block = NULL; - if (parser.current_block() != NULL && parser.current_block()->type() == IF) - { - if_block = static_cast(parser.current_block()); - /* Ensure that we're past IF but not up to an ELSE */ - if (if_block->if_expr_evaluated && ! if_block->else_evaluated) - { - block_ok = true; - } - } - - if (! block_ok) - { - append_format(stderr_buffer, - _(L"%ls: Not inside of 'if' block\n"), - argv[0]); - builtin_print_help(parser, argv[0], stderr_buffer); - return STATUS_BUILTIN_ERROR; - } - else - { - /* Run the else block if the IF expression was false and so were all the ELSEIF expressions (if any) */ - bool run_else = ! if_block->any_branch_taken; - if_block->skip = ! run_else; - if_block->else_evaluated = true; - env_pop(); - env_push(false); - } - - /* - If everything goes ok, return status of last command to execute. - */ - return proc_get_last_status(); -} - /** This function handles both the 'continue' and the 'break' builtins that are used for loop control. @@ -4037,90 +3516,6 @@ static int builtin_return(parser_t &parser, wchar_t **argv) return status; } -/** - Builtin for executing one of several blocks of commands depending - on the value of an argument. -*/ -static int builtin_switch(parser_t &parser, wchar_t **argv) -{ - int res=STATUS_BUILTIN_OK; - int argc = builtin_count_args(argv); - - /* Hackish - if we have no arguments other than the command, we are a "naked invocation" and we just print help */ - if (argc == 1) - { - builtin_print_help(parser, argv[0], stdout_buffer); - return STATUS_BUILTIN_ERROR; - } - - if (argc != 2) - { - append_format(stderr_buffer, - _(L"%ls: Expected exactly one argument, got %d\n"), - argv[0], - argc-1); - - builtin_print_help(parser, argv[0], stderr_buffer); - res=1; - parser.push_block(new fake_block_t()); - } - else - { - parser.push_block(new switch_block_t(argv[1])); - parser.current_block()->skip=1; - res = proc_get_last_status(); - } - - return res; -} - -/** - Builtin used together with the switch builtin for conditional - execution -*/ -static int builtin_case(parser_t &parser, wchar_t **argv) -{ - int argc = builtin_count_args(argv); - int i; - wchar_t *unescaped=0; - - if (parser.current_block()->type() != SWITCH) - { - append_format(stderr_buffer, - _(L"%ls: 'case' command while not in switch block\n"), - argv[0]); - builtin_print_help(parser, argv[0], stderr_buffer); - return STATUS_BUILTIN_ERROR; - } - - parser.current_block()->skip = 1; - switch_block_t *sb = static_cast(parser.current_block()); - if (sb->switch_taken) - { - return proc_get_last_status(); - } - - const wcstring &switch_value = sb->switch_value; - for (i=1; iskip = 0; - sb->switch_taken = true; - break; - } - } - - return proc_get_last_status(); -} - - /** History of commands executed by user */ @@ -4317,14 +3712,14 @@ static const builtin_data_t builtin_datas[]= { L"[", &builtin_test, N_(L"Test a condition") }, { L"__fish_parse", &builtin_parse, N_(L"Try out the new parser") }, { L"and", &builtin_generic, N_(L"Execute command if previous command suceeded") }, - { L"begin", &builtin_begin, N_(L"Create a block of code") }, + { L"begin", &builtin_generic, N_(L"Create a block of code") }, { L"bg", &builtin_bg, N_(L"Send job to background") }, { L"bind", &builtin_bind, N_(L"Handle fish key bindings") }, { L"block", &builtin_block, N_(L"Temporarily block delivery of events") }, { L"break", &builtin_break_continue, N_(L"Stop the innermost loop") }, { L"breakpoint", &builtin_breakpoint, N_(L"Temporarily halt execution of a script and launch an interactive debug prompt") }, { L"builtin", &builtin_builtin, N_(L"Run a builtin command instead of a function") }, - { L"case", &builtin_case, N_(L"Conditionally execute a block of commands") }, + { L"case", &builtin_generic, N_(L"Conditionally execute a block of commands") }, { L"cd", &builtin_cd, N_(L"Change working directory") }, { L"command", &builtin_generic, N_(L"Run a program instead of a function or builtin") }, { L"commandline", &builtin_commandline, N_(L"Set or get the commandline") }, @@ -4333,14 +3728,14 @@ static const builtin_data_t builtin_datas[]= { L"continue", &builtin_break_continue, N_(L"Skip the rest of the current lap of the innermost loop") }, { L"count", &builtin_count, N_(L"Count the number of arguments") }, { L"echo", &builtin_echo, N_(L"Print arguments") }, - { L"else", &builtin_else, N_(L"Evaluate block if condition is false") }, + { L"else", &builtin_generic, N_(L"Evaluate block if condition is false") }, { L"emit", &builtin_emit, N_(L"Emit an event") }, - { L"end", &builtin_end, N_(L"End a block of commands") }, + { L"end", &builtin_generic, N_(L"End a block of commands") }, { L"exec", &builtin_generic, N_(L"Run command in current process") }, { L"exit", &builtin_exit, N_(L"Exit the shell") }, { L"fg", &builtin_fg, N_(L"Send job to foreground") }, { L"for", &builtin_for, N_(L"Perform a set of commands multiple times") }, - { L"function", &builtin_function, N_(L"Define a new function") }, + { L"function", &builtin_generic, N_(L"Define a new function") }, { L"functions", &builtin_functions, N_(L"List or remove functions") }, { L"history", &builtin_history, N_(L"History of commands executed by user") }, { L"if", &builtin_generic, N_(L"Evaluate block if condition is true") }, @@ -4356,7 +3751,7 @@ static const builtin_data_t builtin_datas[]= { L"set_color", &builtin_set_color, N_(L"Set the terminal color") }, { L"source", &builtin_source, N_(L"Evaluate contents of file") }, { L"status", &builtin_status, N_(L"Return status information about fish") }, - { L"switch", &builtin_switch, N_(L"Conditionally execute a block of commands") }, + { L"switch", &builtin_generic, N_(L"Conditionally execute a block of commands") }, { L"test", &builtin_test, N_(L"Test a condition") }, { L"ulimit", &builtin_ulimit, N_(L"Set or get the shells resource usage limits") }, { L"while", &builtin_generic, N_(L"Perform a command multiple times") } diff --git a/parser.cpp b/parser.cpp index de1a635a6..f23ddda92 100644 --- a/parser.cpp +++ b/parser.cpp @@ -349,93 +349,6 @@ block_t *parser_t::current_block() return block_stack.empty() ? NULL : block_stack.back(); } -/** - Search the text for the end of the current block -*/ -static const wchar_t *parser_find_end(const wchar_t * buff) -{ - int had_cmd=0; - int count = 0; - int error=0; - int mark=0; - - CHECK(buff, 0); - - tokenizer_t tok(buff, 0); - for (; tok_has_next(&tok) && !error; tok_next(&tok)) - { - int last_type = tok_last_type(&tok); - switch (last_type) - { - case TOK_STRING: - { - if (!had_cmd) - { - if (wcscmp(tok_last(&tok), L"end")==0) - { - count--; - } - else if (parser_keywords_is_block(tok_last(&tok))) - { - count++; - } - - if (count < 0) - { - error = 1; - } - had_cmd = 1; - } - break; - } - - case TOK_END: - { - had_cmd = 0; - break; - } - - case TOK_PIPE: - case TOK_BACKGROUND: - { - if (had_cmd) - { - had_cmd = 0; - } - else - { - error = 1; - } - break; - - } - - case TOK_ERROR: - error = 1; - break; - - default: - break; - - } - if (!count) - { - tok_next(&tok); - mark = tok_get_pos(&tok); - break; - } - - } - if (!count && !error) - { - - return buff+mark; - } - return 0; - -} - - void parser_t::forbid_function(const wcstring &function) { forbidden_function.push_back(function); @@ -826,29 +739,11 @@ const wchar_t *parser_t::is_function() const int parser_t::get_lineno() const { - if (parser_use_ast()) + int lineno = -1; + if (! execution_contexts.empty()) { - int lineno = -1; - if (! execution_contexts.empty()) - { - lineno = execution_contexts.back()->get_current_line_number(); - } - return lineno; + lineno = execution_contexts.back()->get_current_line_number(); } - - int lineno; - - if (! current_tokenizer || ! tok_string(current_tokenizer)) - return -1; - - lineno = current_tokenizer->line_number_of_character_at_offset(current_tokenizer_pos); - - const wchar_t *function_name; - if ((function_name = is_function())) - { - lineno += function_get_definition_offset(function_name); - } - return lineno; } From cc12225142fbb0085dc4af935aa84a747384d717 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 2 Mar 2014 13:46:30 -0800 Subject: [PATCH 100/145] Clean up various block types and state as part of new parser --- builtin.cpp | 75 +-------------------------------------------- parse_execution.cpp | 20 +++++------- parser.cpp | 41 ++++++------------------- parser.h | 44 +++----------------------- 4 files changed, 22 insertions(+), 158 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index 930d10be2..85d60a29a 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -3309,78 +3309,6 @@ static int builtin_bg(parser_t &parser, wchar_t **argv) } -/** - Builtin for looping over a list -*/ -static int builtin_for(parser_t &parser, wchar_t **argv) -{ - int argc = builtin_count_args(argv); - int res=STATUS_BUILTIN_ERROR; - - /* Hackish - if we have no arguments other than the command, we are a "naked invocation" and we just print help */ - if (argc == 1) - { - builtin_print_help(parser, argv[0], stdout_buffer); - return STATUS_BUILTIN_ERROR; - } - - if (argc < 3) - { - append_format(stderr_buffer, - BUILTIN_FOR_ERR_COUNT, - argv[0] , - argc); - builtin_print_help(parser, argv[0], stderr_buffer); - } - else if (wcsvarname(argv[1])) - { - append_format(stderr_buffer, - BUILTIN_FOR_ERR_NAME, - argv[0], - argv[1]); - builtin_print_help(parser, argv[0], stderr_buffer); - } - else if (wcscmp(argv[2], L"in") != 0) - { - append_format(stderr_buffer, - BUILTIN_FOR_ERR_IN, - argv[0]); - builtin_print_help(parser, argv[0], stderr_buffer); - } - else - { - res=0; - } - - - if (res) - { - parser.push_block(new fake_block_t()); - } - else - { - const wchar_t *for_variable = argv[1]; - for_block_t *fb = new for_block_t(for_variable); - parser.push_block(fb); - fb->tok_pos = parser.get_pos(); - - /* Note that we store the sequence of values in opposite order */ - wcstring_list_t &for_vars = fb->sequence; - for (int i=argc-1; i>3; i--) - for_vars.push_back(argv[i]); - - if (argc > 3) - { - env_set(for_variable, argv[3], ENV_LOCAL); - } - else - { - parser.current_block()->skip=1; - } - } - return res; -} - /** This function handles both the 'continue' and the 'break' builtins that are used for loop control. @@ -3509,7 +3437,6 @@ static int builtin_return(parser_t &parser, wchar_t **argv) for (size_t i=0; i < function_block_idx; i++) { block_t *b = parser.block_at_index(i); - b->mark_as_fake(); b->skip = true; } parser.block_at_index(function_block_idx)->skip = true; @@ -3734,7 +3661,7 @@ static const builtin_data_t builtin_datas[]= { L"exec", &builtin_generic, N_(L"Run command in current process") }, { L"exit", &builtin_exit, N_(L"Exit the shell") }, { L"fg", &builtin_fg, N_(L"Send job to foreground") }, - { L"for", &builtin_for, N_(L"Perform a set of commands multiple times") }, + { L"for", &builtin_generic, N_(L"Perform a set of commands multiple times") }, { L"function", &builtin_generic, N_(L"Define a new function") }, { L"functions", &builtin_functions, N_(L"List or remove functions") }, { L"history", &builtin_history, N_(L"History of commands executed by user") }, diff --git a/parse_execution.cpp b/parse_execution.cpp index 15c7de5f2..47a1d8579 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -447,7 +447,7 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars /* Get the contents to iterate over. */ const parse_node_t *unmatched_wildcard = NULL; - wcstring_list_t argument_list = this->determine_arguments(header, &unmatched_wildcard); + wcstring_list_t argument_sequence = this->determine_arguments(header, &unmatched_wildcard); if (unmatched_wildcard != NULL) { return report_unmatched_wildcard_error(*unmatched_wildcard); @@ -455,15 +455,12 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars parse_execution_result_t ret = parse_execution_success; - for_block_t *fb = new for_block_t(for_var_name); + for_block_t *fb = new for_block_t(); parser->push_block(fb); - /* Note that we store the sequence of values in opposite order */ - std::reverse(argument_list.begin(), argument_list.end()); - fb->sequence = argument_list; - /* Now drive the for loop. */ - while (! fb->sequence.empty()) + const size_t arg_count = argument_sequence.size(); + for (size_t i=0; i < arg_count; i++) { if (should_cancel_execution(fb)) { @@ -471,10 +468,8 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars break; } - const wcstring &for_variable = fb->variable; - const wcstring &val = fb->sequence.back(); - env_set(for_variable, val.c_str(), ENV_LOCAL); - fb->sequence.pop_back(); + const wcstring &val = argument_sequence.at(i); + env_set(for_var_name, val.c_str(), ENV_LOCAL); fb->loop_status = LOOP_NORMAL; fb->skip = 0; @@ -551,7 +546,7 @@ parse_execution_result_t parse_execution_context_t::run_switch_statement(const p } const wcstring &switch_value_expanded = switch_values_expanded.at(0).completion; - switch_block_t *sb = new switch_block_t(switch_value_expanded); + switch_block_t *sb = new switch_block_t(); parser->push_block(sb); if (result == parse_execution_success) @@ -620,7 +615,6 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(const pa /* Push a while block */ while_block_t *wb = new while_block_t(); - wb->status = WHILE_TEST_FIRST; wb->node_offset = this->get_offset(header); parser->push_block(wb); diff --git a/parser.cpp b/parser.cpp index f23ddda92..33a8b7e04 100644 --- a/parser.cpp +++ b/parser.cpp @@ -249,7 +249,9 @@ void parser_t::push_block(block_t *new_current) const block_t *old_current = this->current_block(); if (old_current && old_current->skip) - new_current->mark_as_fake(); + { + new_current->skip = true; + } /* New blocks should be skipped if the outer block is skipped, @@ -1407,7 +1409,6 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro block_t::block_t(block_type_t t) : block_type(t), - made_fake(false), skip(), had_command(), tok_pos(), @@ -1427,12 +1428,7 @@ block_t::~block_t() /* Various block constructors */ -if_block_t::if_block_t() : - block_t(IF), - if_expr_evaluated(false), - is_elseif_entry(false), - any_branch_taken(false), - else_evaluated(false) +if_block_t::if_block_t() : block_t(IF) { } @@ -1455,45 +1451,28 @@ source_block_t::source_block_t(const wchar_t *src) : { } -for_block_t::for_block_t(const wcstring &var) : - block_t(FOR), - variable(var), - sequence() +for_block_t::for_block_t() : block_t(FOR) { } -while_block_t::while_block_t() : - block_t(WHILE), - status(0) +while_block_t::while_block_t() : block_t(WHILE) { } -switch_block_t::switch_block_t(const wcstring &sv) : - block_t(SWITCH), - switch_taken(false), - switch_value(sv) +switch_block_t::switch_block_t() : block_t(SWITCH) { } -fake_block_t::fake_block_t() : - block_t(FAKE) +fake_block_t::fake_block_t() : block_t(FAKE) { } -function_def_block_t::function_def_block_t() : - block_t(FUNCTION_DEF), - function_data() -{ -} - -scope_block_t::scope_block_t(block_type_t type) : - block_t(type) +scope_block_t::scope_block_t(block_type_t type) : block_t(type) { assert(type == BEGIN || type == TOP || type == SUBST); } -breakpoint_block_t::breakpoint_block_t() : - block_t(BREAKPOINT) +breakpoint_block_t::breakpoint_block_t() : block_t(BREAKPOINT) { } diff --git a/parser.h b/parser.h index 931d5b165..0c3066829 100644 --- a/parser.h +++ b/parser.h @@ -64,8 +64,7 @@ enum block_type_t SOURCE, /**< Block created by the . (source) builtin */ EVENT, /**< Block created on event notifier invocation */ BREAKPOINT, /**< Breakpoint block */ -} -; +}; /** block_t represents a block of commands. @@ -78,18 +77,11 @@ protected: private: const block_type_t block_type; /**< Type of block. */ - bool made_fake; public: block_type_t type() const { - return this->made_fake ? FAKE : this->block_type; - } - - /** Mark a block as fake; this is used by the return statement. */ - void mark_as_fake() - { - this->made_fake = true; + return this->block_type; } bool skip; /**< Whether execution of the commands in this block should be skipped */ @@ -122,11 +114,6 @@ public: struct if_block_t : public block_t { - bool if_expr_evaluated; // whether we've evaluated the if expression - bool is_elseif_entry; // whether we're at the beginning of an ELSEIF branch - bool any_branch_taken; // whether the clause of the if statement or any elseif has been found to be true - bool else_evaluated; // whether we've encountered a terminal else block - if_block_t(); }; @@ -151,22 +138,17 @@ struct source_block_t : public block_t struct for_block_t : public block_t { - wcstring variable; // the variable that will be assigned each value in the sequence - wcstring_list_t sequence; // the sequence of values - for_block_t(const wcstring &var); + for_block_t(); }; struct while_block_t : public block_t { - int status; while_block_t(); }; struct switch_block_t : public block_t { - bool switch_taken; - const wcstring switch_value; - switch_block_t(const wcstring &sv); + switch_block_t(); }; struct fake_block_t : public block_t @@ -174,12 +156,6 @@ struct fake_block_t : public block_t fake_block_t(); }; -struct function_def_block_t : public block_t -{ - function_data_t function_data; - function_def_block_t(); -}; - struct scope_block_t : public block_t { scope_block_t(block_type_t type); //must be BEGIN, TOP or SUBST @@ -201,18 +177,6 @@ enum loop_status }; -/** - Possible states for a while block -*/ -enum while_status -{ - WHILE_TEST_FIRST, /**< This is the first command of the first lap of a while loop */ - WHILE_TEST_AGAIN, /**< This is not the first lap of the while loop, but it is the first command of the loop */ - WHILE_TESTED, /**< This is not the first command in the loop */ -} -; - - /** Errors that can be generated by the parser */ From 1fa9167f25d24b9c067ecb67c688adf40e418c00 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 2 Mar 2014 16:03:05 -0800 Subject: [PATCH 101/145] Allow the caller to specify the goal node when parsing a string via the new parser. This enables parsing either a job list or an argument list. --- parse_tree.cpp | 32 ++++++++++++++++---------------- parse_tree.h | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/parse_tree.cpp b/parse_tree.cpp index 484b79687..537d0c146 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -580,11 +580,11 @@ class parse_ll_t public: /* Constructor */ - parse_ll_t() : fatal_errored(false), should_generate_error_messages(true) + parse_ll_t(enum parse_token_type_t goal) : fatal_errored(false), should_generate_error_messages(true) { this->symbol_stack.reserve(16); this->nodes.reserve(64); - this->reset_symbols_and_nodes(); + this->reset_symbols_and_nodes(goal); } /* Input */ @@ -605,11 +605,11 @@ public: this->should_generate_error_messages = flag; } - /* Clear the parse symbol stack (but not the node tree). Add a new job_list_t goal node. This is called from the constructor */ - void reset_symbols(void); + /* Clear the parse symbol stack (but not the node tree). Add a node of the given type as the goal node. This is called from the constructor */ + void reset_symbols(enum parse_token_type_t goal); - /* Clear the parse symbol stack and the node tree. Add a new job_list_t goal node. This is called from the constructor. */ - void reset_symbols_and_nodes(void); + /* Clear the parse symbol stack and the node tree. Add a node of the given type as the goal node. This is called from the constructor. */ + void reset_symbols_and_nodes(enum parse_token_type_t goal); /* Once parsing is complete, determine the ranges of intermediate nodes */ void determine_node_ranges(); @@ -830,22 +830,22 @@ void parse_ll_t::parse_error(const wchar_t *expected, parse_token_t token) } } -void parse_ll_t::reset_symbols(void) +void parse_ll_t::reset_symbols(enum parse_token_type_t goal) { - /* Add a new job_list node, and then reset our symbol list to point at it */ + /* Add a new goal node, and then reset our symbol list to point at it */ node_offset_t where = nodes.size(); - nodes.push_back(parse_node_t(symbol_job_list)); + nodes.push_back(parse_node_t(goal)); symbol_stack.clear(); - symbol_stack.push_back(parse_stack_element_t(symbol_job_list, where)); // goal token + symbol_stack.push_back(parse_stack_element_t(goal, where)); // goal token this->fatal_errored = false; } /* Reset both symbols and nodes */ -void parse_ll_t::reset_symbols_and_nodes(void) +void parse_ll_t::reset_symbols_and_nodes(enum parse_token_type_t goal) { nodes.clear(); - this->reset_symbols(); + this->reset_symbols(goal); } static bool type_is_terminal_type(parse_token_type_t type) @@ -1116,9 +1116,9 @@ static inline parse_token_t next_parse_token(tokenizer_t *tok) return result; } -bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, parse_node_tree_t *output, parse_error_list_t *errors) +bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, parse_node_tree_t *output, parse_error_list_t *errors, parse_token_type_t goal) { - parse_ll_t parser; + parse_ll_t parser(goal); parser.set_should_generate_error_messages(errors != NULL); /* Construct the tokenizer */ @@ -1173,7 +1173,7 @@ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, /* Mark a special error token, and then keep going */ const parse_token_t token = {parse_special_type_parse_error, parse_keyword_none, false, false, queue[error_token_idx].source_start, queue[error_token_idx].source_length}; parser.accept_tokens(token, kInvalidToken); - parser.reset_symbols(); + parser.reset_symbols(goal); } else { @@ -1499,7 +1499,7 @@ const parse_node_t *parse_node_tree_t::next_node_in_node_list(const parse_node_t const parse_node_t *list_cursor = &node_list; const parse_node_t *list_entry = NULL; - /* Loop while we don't have an item but do have a list. Note that not every node in the list may contain an in item that we care about - e.g. job_list contains blank lines as a production */ + /* Loop while we don't have an item but do have a list. Note that some nodes may contain nothing - e.g. job_list contains blank lines as a production */ while (list_entry == NULL && list_cursor != NULL) { const parse_node_t *next_cursor = NULL; diff --git a/parse_tree.h b/parse_tree.h index 0add08cdd..f6406be4f 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -200,8 +200,8 @@ public: parse_node_list_t specific_statements_for_job(const parse_node_t &job) const; }; -/* The big entry point. Parse a string! */ -bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse_node_tree_t *output, parse_error_list_t *errors); +/* The big entry point. Parse a string, attempting to produce a tree for the given goal type */ +bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse_node_tree_t *output, parse_error_list_t *errors, parse_token_type_t goal = symbol_job_list); /* Fish grammar: From 14867742492f928cd702499da8662d344c144e39 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Mon, 3 Mar 2014 22:17:55 +0100 Subject: [PATCH 102/145] Force at least one line of output for `set_color`. This should fix #1323. --- share/functions/vared.fish | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/share/functions/vared.fish b/share/functions/vared.fish index fe548dd1d..cc9912e79 100644 --- a/share/functions/vared.fish +++ b/share/functions/vared.fish @@ -1,4 +1,3 @@ - # # This is a neat function, stolen from zsh. It allows you to edit the # value of a variable interactively. @@ -39,11 +38,11 @@ function vared --description "Edit variable value" end else - printf (_ '%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of %s\n') vared $argv (set_color $fish_color_command) (set_color $fish_color_normal) $argv $argv + printf (_ '%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of %s\n') vared $argv (set_color $fish_color_command; echo) (set_color $fish_color_normal; echo) $argv $argv end end else - printf (_ '%s: Expected exactly one argument, got %s.\n\nSynopsis:\n\t%svared%s VARIABLE\n') vared (count $argv) (set_color $fish_color_command) (set_color $fish_color_normal) + printf (_ '%s: Expected exactly one argument, got %s.\n\nSynopsis:\n\t%svared%s VARIABLE\n') vared (count $argv) (set_color $fish_color_command; echo) (set_color $fish_color_normal; echo) end end From 8d6b0c8d764ee6500301ecb937eb636216d9bcd4 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 2 Mar 2014 16:03:05 -0800 Subject: [PATCH 103/145] Allow the caller to specify the goal node when parsing a string via the new parser. This enables parsing either a job list or an argument list. --- parse_tree.cpp | 32 ++++++++++++++++---------------- parse_tree.h | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/parse_tree.cpp b/parse_tree.cpp index 484b79687..537d0c146 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -580,11 +580,11 @@ class parse_ll_t public: /* Constructor */ - parse_ll_t() : fatal_errored(false), should_generate_error_messages(true) + parse_ll_t(enum parse_token_type_t goal) : fatal_errored(false), should_generate_error_messages(true) { this->symbol_stack.reserve(16); this->nodes.reserve(64); - this->reset_symbols_and_nodes(); + this->reset_symbols_and_nodes(goal); } /* Input */ @@ -605,11 +605,11 @@ public: this->should_generate_error_messages = flag; } - /* Clear the parse symbol stack (but not the node tree). Add a new job_list_t goal node. This is called from the constructor */ - void reset_symbols(void); + /* Clear the parse symbol stack (but not the node tree). Add a node of the given type as the goal node. This is called from the constructor */ + void reset_symbols(enum parse_token_type_t goal); - /* Clear the parse symbol stack and the node tree. Add a new job_list_t goal node. This is called from the constructor. */ - void reset_symbols_and_nodes(void); + /* Clear the parse symbol stack and the node tree. Add a node of the given type as the goal node. This is called from the constructor. */ + void reset_symbols_and_nodes(enum parse_token_type_t goal); /* Once parsing is complete, determine the ranges of intermediate nodes */ void determine_node_ranges(); @@ -830,22 +830,22 @@ void parse_ll_t::parse_error(const wchar_t *expected, parse_token_t token) } } -void parse_ll_t::reset_symbols(void) +void parse_ll_t::reset_symbols(enum parse_token_type_t goal) { - /* Add a new job_list node, and then reset our symbol list to point at it */ + /* Add a new goal node, and then reset our symbol list to point at it */ node_offset_t where = nodes.size(); - nodes.push_back(parse_node_t(symbol_job_list)); + nodes.push_back(parse_node_t(goal)); symbol_stack.clear(); - symbol_stack.push_back(parse_stack_element_t(symbol_job_list, where)); // goal token + symbol_stack.push_back(parse_stack_element_t(goal, where)); // goal token this->fatal_errored = false; } /* Reset both symbols and nodes */ -void parse_ll_t::reset_symbols_and_nodes(void) +void parse_ll_t::reset_symbols_and_nodes(enum parse_token_type_t goal) { nodes.clear(); - this->reset_symbols(); + this->reset_symbols(goal); } static bool type_is_terminal_type(parse_token_type_t type) @@ -1116,9 +1116,9 @@ static inline parse_token_t next_parse_token(tokenizer_t *tok) return result; } -bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, parse_node_tree_t *output, parse_error_list_t *errors) +bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, parse_node_tree_t *output, parse_error_list_t *errors, parse_token_type_t goal) { - parse_ll_t parser; + parse_ll_t parser(goal); parser.set_should_generate_error_messages(errors != NULL); /* Construct the tokenizer */ @@ -1173,7 +1173,7 @@ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t parse_flags, /* Mark a special error token, and then keep going */ const parse_token_t token = {parse_special_type_parse_error, parse_keyword_none, false, false, queue[error_token_idx].source_start, queue[error_token_idx].source_length}; parser.accept_tokens(token, kInvalidToken); - parser.reset_symbols(); + parser.reset_symbols(goal); } else { @@ -1499,7 +1499,7 @@ const parse_node_t *parse_node_tree_t::next_node_in_node_list(const parse_node_t const parse_node_t *list_cursor = &node_list; const parse_node_t *list_entry = NULL; - /* Loop while we don't have an item but do have a list. Note that not every node in the list may contain an in item that we care about - e.g. job_list contains blank lines as a production */ + /* Loop while we don't have an item but do have a list. Note that some nodes may contain nothing - e.g. job_list contains blank lines as a production */ while (list_entry == NULL && list_cursor != NULL) { const parse_node_t *next_cursor = NULL; diff --git a/parse_tree.h b/parse_tree.h index 0add08cdd..f6406be4f 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -200,8 +200,8 @@ public: parse_node_list_t specific_statements_for_job(const parse_node_t &job) const; }; -/* The big entry point. Parse a string! */ -bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse_node_tree_t *output, parse_error_list_t *errors); +/* The big entry point. Parse a string, attempting to produce a tree for the given goal type */ +bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse_node_tree_t *output, parse_error_list_t *errors, parse_token_type_t goal = symbol_job_list); /* Fish grammar: From 79d14521db4c71250109785b8317aeceecd539c9 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 4 Mar 2014 02:53:34 -0800 Subject: [PATCH 104/145] Support for error detection in arguments in new parser. Restores error reporting for bad arguments (e.g. with bad variable names) --- expand.cpp | 25 ------ parse_constants.h | 25 ++++++ parse_util.cpp | 201 +++++++++++++++++++++++++++++++++++++++++++++- parse_util.h | 2 + 4 files changed, 226 insertions(+), 27 deletions(-) diff --git a/expand.cpp b/expand.cpp index cd7194a3b..5b92cac7e 100644 --- a/expand.cpp +++ b/expand.cpp @@ -53,31 +53,6 @@ parameter expansion. #include "parse_util.h" -/** - Error issued on invalid variable name -*/ -#define COMPLETE_VAR_DESC _( L"The '$' character begins a variable name. The character '%lc', which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'.") - -/** - Error issued on $? -*/ -#define COMPLETE_YOU_WANT_STATUS _( L"$? is not a valid variable in fish. If you want the exit status of the last command, try $status.") - -/** - Error issued on invalid variable name -*/ -#define COMPLETE_VAR_NULL_DESC _( L"The '$' begins a variable name. It was given at the end of an argument. Variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'.") - -/** - Error issued on invalid variable name -*/ -#define COMPLETE_VAR_BRACKET_DESC _( L"Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A bracket, which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'." ) - -/** - Error issued on invalid variable name -*/ -#define COMPLETE_VAR_PARAN_DESC _( L"Did you mean (COMMAND)? In fish, the '$' character is only used for accessing variables. To learn more about command substitution in fish, type 'help expand-command-substitution'.") - /** Description for child process */ diff --git a/parse_constants.h b/parse_constants.h index 884b76f73..8ff96407f 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -178,6 +178,31 @@ typedef unsigned int parser_test_error_bits_t; /** Error message for Posix-style assignment: foo=bar */ #define COMMAND_ASSIGN_ERR_MSG _( L"Unknown command '%ls'. Did you mean 'set %ls %ls'? See the help section on the set command by typing 'help set'.") +/** + Error issued on invalid variable name +*/ +#define COMPLETE_VAR_DESC _( L"The '$' character begins a variable name. The character '%lc', which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'.") + +/** + Error issued on $? +*/ +#define COMPLETE_YOU_WANT_STATUS _( L"$? is not a valid variable in fish. If you want the exit status of the last command, try $status.") + +/** + Error issued on invalid variable name +*/ +#define COMPLETE_VAR_NULL_DESC _( L"The '$' begins a variable name. It was given at the end of an argument. Variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'.") + +/** + Error issued on invalid variable name +*/ +#define COMPLETE_VAR_BRACKET_DESC _( L"Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A bracket, which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'." ) + +/** + Error issued on invalid variable name +*/ +#define COMPLETE_VAR_PARAN_DESC _( L"Did you mean (COMMAND)? In fish, the '$' character is only used for accessing variables. To learn more about command substitution in fish, type 'help expand-command-substitution'.") + /** While block description */ diff --git a/parse_util.cpp b/parse_util.cpp index 230a328c9..d6e1c9eac 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1001,11 +1001,205 @@ static bool first_argument_is_help(const parse_node_tree_t &node_tree, const par return is_help; } +void parse_util_expand_variable_error(const parse_node_t &node, const wcstring &token, size_t token_pos, size_t error_pos, parse_error_list_t *out_errors) +{ + size_t stop_pos = token_pos+1; + + switch (token[stop_pos]) + { + case BRACKET_BEGIN: + { + 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); + wchar_t *post; + int is_var=0; + if (end) + { + post = end+1; + *end = 0; + + if (!wcsvarname(name)) + { + is_var = 1; + } + } + + if (is_var) + { + append_syntax_error(out_errors, + node, + COMPLETE_VAR_BRACKET_DESC, + cpy, + name, + post); + } + else + { + append_syntax_error(out_errors, + node, + COMPLETE_VAR_BRACKET_DESC, + L"", + L"VARIABLE", + L""); + } + free(cpy); + + break; + } + + case INTERNAL_SEPARATOR: + { + append_syntax_error(out_errors, + node, + COMPLETE_VAR_PARAN_DESC); + break; + } + + case 0: + { + append_syntax_error(out_errors, + node, + COMPLETE_VAR_NULL_DESC); + break; + } + + default: + { + wchar_t token_stop_char = token[stop_pos]; + // Unescape (see http://github.com/fish-shell/fish-shell/issues/50) + if (token_stop_char == ANY_CHAR) + token_stop_char = L'?'; + else if (token_stop_char == ANY_STRING || token_stop_char == ANY_STRING_RECURSIVE) + token_stop_char = L'*'; + + append_syntax_error(out_errors, + node, + (token_stop_char == L'?' ? COMPLETE_YOU_WANT_STATUS : COMPLETE_VAR_DESC), + token_stop_char); + break; + } + } +} + + +/** + Test if this argument contains any errors. Detected errors include + syntax errors in command substitutions, improperly escaped + characters and improper use of the variable expansion operator. +*/ +parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t &node, const wcstring &arg_src, parse_error_list_t *out_errors) +{ + int err=0; + + wchar_t *paran_begin, *paran_end; + wchar_t *arg_cpy; + int do_loop = 1; + + arg_cpy = wcsdup(arg_src.c_str()); + + while (do_loop) + { + switch (parse_util_locate_cmdsubst(arg_cpy, + ¶n_begin, + ¶n_end, + false)) + { + case -1: + { + err=1; + if (out_errors) + { + append_syntax_error(out_errors, node, L"Mismatched parenthesis"); + } + free(arg_cpy); + return err; + } + + case 0: + { + do_loop = 0; + break; + } + + case 1: + { + + const wcstring subst(paran_begin + 1, paran_end); + wcstring tmp; + + tmp.append(arg_cpy, paran_begin - arg_cpy); + tmp.push_back(INTERNAL_SEPARATOR); + tmp.append(paran_end+1); + + parse_error_list_t errors; + err |= parse_util_detect_errors(subst, &errors); + if (out_errors != NULL) + { + /* Todo: have to tweak the offsets of the errors in the command substitution */ + out_errors->insert(out_errors->end(), errors.begin(), errors.end()); + } + + free(arg_cpy); + arg_cpy = wcsdup(tmp.c_str()); + + break; + } + } + } + + wcstring unesc; + if (! unescape_string(arg_cpy, &unesc, UNESCAPE_SPECIAL)) + { + if (out_errors) + { + append_syntax_error(out_errors, node, L"Invalid token '%ls'", arg_cpy); + } + return 1; + } + else + { + /* Check for invalid variable expansions */ + const size_t unesc_size = unesc.size(); + for (size_t idx = 0; idx < unesc_size; idx++) + { + switch (unesc.at(idx)) + { + case VARIABLE_EXPAND: + case VARIABLE_EXPAND_SINGLE: + { + wchar_t next_char = (idx + 1 < unesc_size ? unesc.at(idx + 1) : L'\0'); + + if (next_char != VARIABLE_EXPAND && + next_char != VARIABLE_EXPAND_SINGLE && + ! wcsvarchr(next_char)) + { + err=1; + if (out_errors) + { + parse_util_expand_variable_error(node, unesc, idx, node.source_start, out_errors); + } + } + + break; + } + } + } + } + + free(arg_cpy); + + return err; +} + parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, parse_error_list_t *out_errors) { parse_node_tree_t node_tree; parse_error_list_t parse_errors; + parser_test_error_bits_t res = 0; + // Whether we encountered a parse error bool errored = false; @@ -1065,6 +1259,11 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars errored = append_syntax_error(&parse_errors, node, EXEC_ERR_MSG, is_and ? L"and" : L"or"); } } + else if (node.type == symbol_argument) + { + const wcstring arg_src = node.get_source(buff_src); + res |= parse_util_detect_errors_in_argument(node, arg_src, &parse_errors); + } else if (node.type == symbol_plain_statement) { // In a few places below, we want to know if we are in a pipeline @@ -1159,8 +1358,6 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars } } - parser_test_error_bits_t res = 0; - if (errored) res |= PARSER_TEST_ERROR; diff --git a/parse_util.h b/parse_util.h index c53b35153..cf885e050 100644 --- a/parse_util.h +++ b/parse_util.h @@ -171,4 +171,6 @@ std::vector parse_util_compute_indents(const wcstring &src); parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, parse_error_list_t *out_errors = NULL); +parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t &node, const wcstring &arg_src, parse_error_list_t *out_errors = NULL); + #endif From 7dc0b6f40be172915783e26cd77e86cbdb7ddaba Mon Sep 17 00:00:00 2001 From: "Daniel J. Hofmann" Date: Fri, 7 Mar 2014 18:20:42 +0100 Subject: [PATCH 105/145] Fixed various Undefined Behavior occurrences. Conditionally uninitialized: - builtin_commandline.cpp:577 - expand.cpp:869 - parse_util.cpp:1036 Initialization of POD structs: - event.cpp:61 - autoload.cpp:22 References used with va_start: - common.cpp:608:18 Found with clang-3.4's awesome -Wconditional-uninitialized, -Wmissing-field-initializers and -Wvarargs. --- autoload.cpp | 2 +- builtin_commandline.cpp | 2 +- common.cpp | 2 +- common.h | 2 +- event.cpp | 2 +- expand.cpp | 2 +- parse_util.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/autoload.cpp b/autoload.cpp index e2e532de2..5a72a5cd5 100644 --- a/autoload.cpp +++ b/autoload.cpp @@ -19,7 +19,7 @@ static const int kAutoloadStalenessInterval = 15; file_access_attempt_t access_file(const wcstring &path, int mode) { //printf("Touch %ls\n", path.c_str()); - file_access_attempt_t result = {0}; + file_access_attempt_t result = {}; struct stat statbuf; if (wstat(path, &statbuf)) { diff --git a/builtin_commandline.cpp b/builtin_commandline.cpp index 564eee7bc..2b1ba6fb3 100644 --- a/builtin_commandline.cpp +++ b/builtin_commandline.cpp @@ -214,7 +214,7 @@ static int builtin_commandline(parser_t &parser, wchar_t **argv) int line_mode = 0; int search_mode = 0; int paging_mode = 0; - const wchar_t *begin, *end; + const wchar_t *begin = NULL, *end = NULL; current_buffer = (wchar_t *)builtin_complete_get_temporary_buffer(); if (current_buffer) diff --git a/common.cpp b/common.cpp index 08e8d7a1f..025912129 100644 --- a/common.cpp +++ b/common.cpp @@ -599,7 +599,7 @@ bool contains_internal(const wchar_t *a, ...) } /* wcstring variant of contains_internal. The first parameter is a wcstring, the rest are const wchar_t* */ -__sentinel bool contains_internal(const wcstring &needle, ...) +__sentinel bool contains_internal(const wcstring needle, ...) { const wchar_t *arg; va_list va; diff --git a/common.h b/common.h index 33fbb0e5e..e5573fa79 100644 --- a/common.h +++ b/common.h @@ -689,7 +689,7 @@ wcstring wsetlocale(int category, const wchar_t *locale); \return zero if needle is not found, of if needle is null, non-zero otherwise */ __sentinel bool contains_internal(const wchar_t *needle, ...); -__sentinel bool contains_internal(const wcstring &needle, ...); +__sentinel bool contains_internal(const wcstring needle, ...); /** Call read while blocking the SIGCHLD signal. Should only be called diff --git a/event.cpp b/event.cpp index 65d337f02..6851a9e30 100644 --- a/event.cpp +++ b/event.cpp @@ -58,7 +58,7 @@ signal_list_t; active, which is the one that new events is written to. The inactive one contains the events that are currently beeing performed. */ -static signal_list_t sig_list[]= {{0,0},{0,0}}; +static signal_list_t sig_list[]= {{},{}}; /** The index of sig_list that is the list of signals currently written to diff --git a/expand.cpp b/expand.cpp index 5b92cac7e..1bd7e0247 100644 --- a/expand.cpp +++ b/expand.cpp @@ -846,7 +846,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token *(cpy+token_pos)=0; wchar_t *name = &cpy[stop_pos+1]; wchar_t *end = wcschr(name, BRACKET_END); - wchar_t *post; + wchar_t *post = NULL; int is_var=0; if (end) { diff --git a/parse_util.cpp b/parse_util.cpp index d6e1c9eac..2fcb24aa3 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1013,7 +1013,7 @@ void parse_util_expand_variable_error(const parse_node_t &node, const wcstring & *(cpy+token_pos)=0; wchar_t *name = &cpy[stop_pos+1]; wchar_t *end = wcschr(name, BRACKET_END); - wchar_t *post; + wchar_t *post = NULL; int is_var=0; if (end) { From 390a49072d50ac2fdfa65f4fdebb445bcfbfabaf Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 10 Mar 2014 07:37:49 +0800 Subject: [PATCH 106/145] Reorganize keyword recognition in the parser to use a single table --- parse_tree.cpp | 101 ++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 64 deletions(-) diff --git a/parse_tree.cpp b/parse_tree.cpp index 537d0c146..ae8e42d02 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -207,46 +207,44 @@ wcstring token_type_description(parse_token_type_t type) return format_string(L"Unknown token type %ld", static_cast(type)); } +#define LONGIFY(x) L ## x +#define KEYWORD_MAP(x) { parse_keyword_ ## x , LONGIFY(#x) } +static const struct +{ + const parse_keyword_t keyword; + const wchar_t * const name; +} +keyword_map[] = +{ + KEYWORD_MAP(none), + KEYWORD_MAP(if), + KEYWORD_MAP(else), + KEYWORD_MAP(for), + KEYWORD_MAP(in), + KEYWORD_MAP(while), + KEYWORD_MAP(begin), + KEYWORD_MAP(function), + KEYWORD_MAP(switch), + KEYWORD_MAP(case), + KEYWORD_MAP(end), + KEYWORD_MAP(and), + KEYWORD_MAP(or), + KEYWORD_MAP(not), + KEYWORD_MAP(command), + KEYWORD_MAP(builtin), + KEYWORD_MAP(exec) +}; + wcstring keyword_description(parse_keyword_t k) { - switch (k) + if (k >= 0 && k <= LAST_KEYWORD) { - case parse_keyword_none: - return L"none"; - case parse_keyword_if: - return L"if"; - case parse_keyword_else: - return L"else"; - case parse_keyword_for: - return L"for"; - case parse_keyword_in: - return L"in"; - case parse_keyword_while: - return L"while"; - case parse_keyword_begin: - return L"begin"; - case parse_keyword_function: - return L"function"; - case parse_keyword_switch: - return L"switch"; - case parse_keyword_case: - return L"case"; - case parse_keyword_end: - return L"end"; - case parse_keyword_and: - return L"and"; - case parse_keyword_or: - return L"or"; - case parse_keyword_not: - return L"not"; - case parse_keyword_command: - return L"command"; - case parse_keyword_builtin: - return L"builtin"; - case parse_keyword_exec: - return L"exec"; + return keyword_map[k].name; + } + else + { + return format_string(L"Unknown keyword type %ld", static_cast(k)); } - return format_string(L"Unknown keyword type %ld", static_cast(k)); } static wcstring token_type_user_presentable_description(parse_token_type_t type, parse_keyword_t keyword) @@ -1036,36 +1034,11 @@ static parse_keyword_t keyword_for_token(token_type tok, const wchar_t *tok_txt) parse_keyword_t result = parse_keyword_none; if (tok == TOK_STRING) { - - const struct + for (size_t i=0; i < sizeof keyword_map / sizeof *keyword_map; i++) { - const wchar_t *txt; - parse_keyword_t keyword; - } keywords[] = - { - {L"if", parse_keyword_if}, - {L"else", parse_keyword_else}, - {L"for", parse_keyword_for}, - {L"in", parse_keyword_in}, - {L"while", parse_keyword_while}, - {L"begin", parse_keyword_begin}, - {L"function", parse_keyword_function}, - {L"switch", parse_keyword_switch}, - {L"case", parse_keyword_case}, - {L"end", parse_keyword_end}, - {L"and", parse_keyword_and}, - {L"or", parse_keyword_or}, - {L"not", parse_keyword_not}, - {L"command", parse_keyword_command}, - {L"builtin", parse_keyword_builtin}, - {L"exec", parse_keyword_exec} - }; - - for (size_t i=0; i < sizeof keywords / sizeof *keywords; i++) - { - if (! wcscmp(keywords[i].txt, tok_txt)) + if (! wcscmp(keyword_map[i].name, tok_txt)) { - result = keywords[i].keyword; + result = keyword_map[i].keyword; break; } } From 689d0082d829e26ff3c58307687e801cc5a98656 Mon Sep 17 00:00:00 2001 From: David Adam Date: Mon, 10 Mar 2014 10:09:30 +0800 Subject: [PATCH 107/145] README.md: document build and runtime dependencies even better. --- README.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 6ba505030..860149e69 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ For more on fish's design philosophy, see the [design document](http://fishshell ## Quick Start -fish generally works like other shells, like bash or zsh. A few important differences can be found at by searching for magic phrase 'unlike other shells'. +fish generally works like other shells, like bash or zsh. A few important differences can be found at by searching for the magic phrase 'unlike other shells'. Detailed user documentation is available by running `help` within fish, and also at @@ -17,8 +17,12 @@ fish is written in a sane subset of C++98, with a few components from C++TR1. It fish can be built using autotools or Xcode. autoconf 2.60 or later is required. +fish depends on a curses implementation, such as ncurses. The headers and libraries are required for building. + fish requires gettext for translation support. +Building the documentation requires Doxygen 1.5 or newer. + ### Autotools Build autoconf @@ -36,7 +40,7 @@ fish requires gettext for translation support. xcodebuild install sudo ditto /tmp/fish.dst / -## Build Dependencies (or, Help, it didn't build!) +## Help, it didn't build! If fish reports that it could not find curses, try installing a curses development package and build again. @@ -44,23 +48,21 @@ On Debian or Ubuntu you want: sudo apt-get install libncurses5-dev -on RedHat, CentOS, or Amazon EC2: +On RedHat, CentOS, or Amazon EC2: sudo yum install ncurses-devel -To build with translation support, make sure you have a gettext package installed. - -To build the documentation, make sure you have Doxygen installed. - ## Runtime Dependencies -fish requires a number of utilities to operate, which should be present on any Unix, GNU/Linux or OS X system. These include (but are not limited to) grep, awk, sed, which, and getopt. The bc program is also required. +fish requires a curses implementation, such as ncurses, to run. + +fish requires a number of utilities to operate, which should be present on any Unix, GNU/Linux or OS X system. These include (but are not limited to) hostname, grep, awk, sed, which, and getopt. fish also requires the bc program. + +Translation support requires the gettext program. Some optional features of fish, such as the manual page completion parser and the web configuration tool, require Python. -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. +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. ## Packages for Linux From e47ad09130e20000616450da7db90de595ad4fc7 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 10 Mar 2014 09:43:40 +0800 Subject: [PATCH 108/145] Make `contains` take the string by const reference again, for performance reasons --- common.cpp | 14 ++++++++------ common.h | 6 +++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/common.cpp b/common.cpp index 025912129..9d62f489d 100644 --- a/common.cpp +++ b/common.cpp @@ -576,7 +576,7 @@ wcstring wsetlocale(int category, const wchar_t *locale) return format_string(L"%s", res); } -bool contains_internal(const wchar_t *a, ...) +bool contains_internal(const wchar_t *a, int vararg_handle, ...) { const wchar_t *arg; va_list va; @@ -584,7 +584,7 @@ bool contains_internal(const wchar_t *a, ...) CHECK(a, 0); - va_start(va, a); + va_start(va, vararg_handle); while ((arg=va_arg(va, const wchar_t *))!= 0) { if (wcscmp(a,arg) == 0) @@ -598,17 +598,19 @@ bool contains_internal(const wchar_t *a, ...) return res; } -/* wcstring variant of contains_internal. The first parameter is a wcstring, the rest are const wchar_t* */ -__sentinel bool contains_internal(const wcstring needle, ...) +/* wcstring variant of contains_internal. The first parameter is a wcstring, the rest are const wchar_t *. vararg_handle exists only to give us a POD-value to apss to va_start */ +__sentinel bool contains_internal(const wcstring &needle, int vararg_handle, ...) { const wchar_t *arg; va_list va; int res = 0; - va_start(va, needle); + const wchar_t *needle_cstr = needle.c_str(); + va_start(va, vararg_handle); while ((arg=va_arg(va, const wchar_t *))!= 0) { - if (needle == arg) + /* libc++ has an unfortunate implementation of operator== that unconditonally wcslen's the wchar_t* parameter, so prefer wcscmp directly */ + if (! wcscmp(needle_cstr, arg)) { res=1; break; diff --git a/common.h b/common.h index e5573fa79..b0646e4d8 100644 --- a/common.h +++ b/common.h @@ -228,7 +228,7 @@ extern const wchar_t *program_name; /** Check if the specified string element is a part of the specified string list */ -#define contains( str,... ) contains_internal( str, __VA_ARGS__, NULL ) +#define contains( str, ... ) contains_internal( str, 0, __VA_ARGS__, NULL ) /** Print a stack trace to stderr @@ -688,8 +688,8 @@ wcstring wsetlocale(int category, const wchar_t *locale); \return zero if needle is not found, of if needle is null, non-zero otherwise */ -__sentinel bool contains_internal(const wchar_t *needle, ...); -__sentinel bool contains_internal(const wcstring needle, ...); +__sentinel bool contains_internal(const wchar_t *needle, int vararg_handle, ...); +__sentinel bool contains_internal(const wcstring &needle, int vararg_handle, ...); /** Call read while blocking the SIGCHLD signal. Should only be called From eaf023b4d8643d185280d119492c4ceb2fda0df0 Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 13 Mar 2014 21:08:24 +0800 Subject: [PATCH 109/145] Makefile: separate messages.pot error lines --- Makefile.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile.in b/Makefile.in index b42561ab8..98829b55d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -411,9 +411,9 @@ messages.pot: *.cpp *.h share/completions/*.fish share/functions/*.fish 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"\ - rm messages.pot\ - false;\ + echo "Your xgettext version is too old to build the messages.pot file"; \ + rm messages.pot; \ + false; \ fi; \ fi From b0716253a2456272519c16a3a794696d8b12cb91 Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 13 Mar 2014 21:10:46 +0800 Subject: [PATCH 110/145] Makefile: assume UTF-8 in our codebase for translation generation --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 98829b55d..ccd908330 100644 --- a/Makefile.in +++ b/Makefile.in @@ -410,7 +410,7 @@ doc.h: $(HDR_FILES) messages.pot: *.cpp *.h share/completions/*.fish share/functions/*.fish 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 \ + if xgettext -j -k_ -kN_ -k--description -LShell --from-code=UTF-8 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"; \ rm messages.pot; \ false; \ From d2851cf5c546902fdbb7a5b2106ec27c8db2c69d Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 13 Mar 2014 21:16:14 +0800 Subject: [PATCH 111/145] translations: correct strings for fish_greeting default message --- po/de.po | 12 ++++++------ po/en.po | 4 ++-- po/fr.po | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/po/de.po b/po/de.po index 2d6979b33..e1c2261a6 100644 --- a/po/de.po +++ b/po/de.po @@ -505,8 +505,8 @@ msgid "Could not get user information" msgstr "Kann Benutzerinformation nicht abrufen" #: env.c:291 -msgid "Changing language to english" -msgstr "Sprachwechsel zu Englisch" +msgid "Changing language to English" +msgstr "Sprachwechsel zu Deutsch" #: env.c:849 #, c-format @@ -1344,12 +1344,12 @@ msgid "fish" 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" +msgid "Welcome to fish, the friendly interactive shell" +msgstr "Willkommen zu fish, der freundlichen interaktiven Shell" #: init/fish_interactive.fish.in:14 init/fish_interactive.fish:14 -msgid "Type %shelp%s for instructions on how to use fish\\n" -msgstr "Anweisungen zur fish-Benutzung erhalten Sie über %shelp%s\\n" +msgid "Type %shelp%s for instructions on how to use fish" +msgstr "Anweisungen zur fish-Benutzung erhalten Sie über %shelp%s" #: init/fish_interactive.fish.in:20 init/fish_interactive.fish:20 msgid "Commands to execute when fish exits" diff --git a/po/en.po b/po/en.po index 8af215a52..691b7c5d1 100644 --- a/po/en.po +++ b/po/en.po @@ -6772,12 +6772,12 @@ msgstr "" #: share/functions/__fish_config_interactive.fish:81 #, fuzzy msgid "Welcome to fish, the friendly interactive shell" -msgstr "Welcome to fish, the friendly interactive shell\\n" +msgstr "Welcome to fish, the friendly interactive shell" #: share/functions/__fish_config_interactive.fish:82 #, fuzzy msgid "Type %shelp%s for instructions on how to use fish" -msgstr "Type %shelp%s for instructions on how to use fish\\n" +msgstr "Type %shelp%s for instructions on how to use fish" #: share/functions/__fish_config_interactive.fish:98 msgid "Commands to execute when fish exits" diff --git a/po/fr.po b/po/fr.po index 3f0470b46..1216a87db 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1576,12 +1576,12 @@ msgid "Did you mean (COMMAND)? In fish, the '$' character is only used for acces msgstr "Vouliez-vous dire (COMMANDE)? Dans fish, le caractère '$' est seulement utilisé pour accéder à des variables. Pour en apprendre plus sur la substitution de commande dans fish, tapez 'help expand-command-substitution'." #: etc/fish_interactive.fish.in:14 -msgid "Welcome to fish, the friendly interactive shell\\n" -msgstr "Bienvenue dans fish, le shell amical et interactif\\n" +msgid "Welcome to fish, the friendly interactive shell" +msgstr "Bienvenue dans fish, le shell amical et interactif" #: etc/fish_interactive.fish.in:15 -msgid "Type %shelp%s for instructions on how to use fish\\n" -msgstr "Tappez %shelp%s pour des instructions sur l'utilisation de fish\\n" +msgid "Type %shelp%s for instructions on how to use fish" +msgstr "Tappez %shelp%s pour des instructions sur l'utilisation de fish" #: etc/fish_interactive.fish.in:21 msgid "Commands to execute when fish exits" From 8c21cf7761aa3e2dd03bfcdecfc1a4db66e4686c Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 13 Mar 2014 21:56:04 +0800 Subject: [PATCH 112/145] translations: update new strings, convert all to UTF-8 --- po/de.po | 17274 ++++++++++++++++++++++++++++++++--------------------- po/en.po | 6858 +++++++++++++-------- po/fr.po | 13664 +++++++++++++++++++----------------------- po/sv.po | 7021 ++++++++++++++-------- 4 files changed, 25096 insertions(+), 19721 deletions(-) diff --git a/po/de.po b/po/de.po index e1c2261a6..8c19ee368 100644 --- a/po/de.po +++ b/po/de.po @@ -8,84 +8,126 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-01-16 20:57+0100\n" +"POT-Creation-Date: 2014-03-13 21:29+0800\n" "PO-Revision-Date: 2013-11-01 18:36+0100\n" "Last-Translator: Benjamin\n" "Language-Team: deutsch \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.5\n" -#: builtin.c:80 +#: autoload.cpp:113 +#, c-format +msgid "Could not autoload item '%ls', it is already being autoloaded. " +msgstr "" + +#: builtin.cpp:83 #, c-format msgid "Send job %d, '%ls' to foreground\n" msgstr "Job %d, '%ls' in den Vordergrund schicken\n" -#: builtin.c:370 +#: builtin.cpp:344 +#, c-format +msgid "" +"%ls: Type 'help %ls' for related documentation\n" +"\n" +msgstr "" + +#: builtin.cpp:484 +#, c-format +msgid "%ls: No key with name '%ls' found\n" +msgstr "" + +#: builtin.cpp:490 +#, fuzzy, c-format +msgid "%ls: Key with name '%ls' does not have any mapping\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: builtin.cpp:496 +#, fuzzy, c-format +msgid "%ls: Unknown error trying to bind to key named '%ls'\n" +msgstr "%ls: Unbekannte Option '%ls'\n" + +#: builtin.cpp:668 +#, fuzzy, c-format +msgid "%ls: Expected zero or two parameters, got %d\n" +msgstr "%ls: Erwartete kein oder ein Argument, erhielt %d\n" + +#: builtin.cpp:692 +#, fuzzy, c-format +msgid "%ls: Invalid state\n" +msgstr "%ls: Ungültiger Indexstart bei '%ls'\n" + +#: builtin.cpp:796 #, c-format msgid "%ls: Can not specify scope when removing block\n" -msgstr "%ls: Bei Blocklöschung kann kein Bereich angegeben werden\n" +msgstr "%ls: Bei Blocklöschung kann kein Bereich angegeben werden\n" -#: builtin.c:376 +#: builtin.cpp:802 #, c-format msgid "%ls: No blocks defined\n" -msgstr "%ls: Keine Blöcke definiert\n" +msgstr "%ls: Keine Blöcke definiert\n" -#: builtin.c:830 builtin.h:28 +#: builtin.cpp:1312 builtin.h:32 #, c-format msgid "%ls: Invalid combination of options\n" -msgstr "%ls: Ungültige Kombination der Optionen\n" +msgstr "%ls: Ungültige Kombination der Optionen\n" -#: builtin.c:854 +#: builtin.cpp:1334 #, c-format msgid "%ls: Expected exactly one function name\n" msgstr "%ls: Erwartete genau einen Funktionsnamen\n" -#: builtin.c:864 +#: builtin.cpp:1344 builtin.cpp:1406 #, c-format msgid "%ls: Function '%ls' does not exist\n" msgstr "%ls: Funktion '%ls' existiert nicht\n" -#: builtin.c:925 +#: builtin.cpp:1394 +#, fuzzy, c-format msgid "" -"Current function definitions are:\n" -"\n" -msgstr "" -"Aktuelle Funktionsdefinitionen:\n" -"\n" +"%ls: Expected exactly two names (current function name, and new function " +"name)\n" +msgstr "%ls: Erwartete genau einen Funktionsnamen\n" -#: builtin.c:1087 +#: builtin.cpp:1417 builtin.cpp:1952 builtin.cpp:2259 +#, c-format +msgid "%ls: Illegal function name '%ls'\n" +msgstr "%ls: Ungültiger Funktionsname '%ls'\n" + +#: builtin.cpp:1428 +#, fuzzy, c-format +msgid "%ls: Function '%ls' already exists. Cannot create copy '%ls'\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: builtin.cpp:1809 builtin.cpp:2114 #, c-format msgid "%ls: Unknown signal '%ls'\n" msgstr "%ls: Unbekanntes Signal '%ls'\n" -#: builtin.c:1111 +#: builtin.cpp:1824 builtin.cpp:1984 builtin.cpp:2129 builtin.cpp:2291 #, c-format msgid "%ls: Invalid variable name '%ls'\n" -msgstr "%ls: Ungültiger Variablenname '%ls'\n" +msgstr "%ls: Ungültiger Variablenname '%ls'\n" -#: builtin.c:1173 +#: builtin.cpp:1877 builtin.cpp:2182 #, c-format msgid "%ls: Cannot find calling job for event handler\n" msgstr "%ls: Kann aufrufenden Job zur Ereignisbehandlung nicht finden\n" -#: builtin.c:1191 +#: builtin.cpp:1895 builtin.cpp:2200 #, c-format msgid "%ls: Invalid process id %ls\n" -msgstr "%ls: Ungültige Prozesskennung %ls\n" +msgstr "%ls: Ungültige Prozesskennung %ls\n" -#: builtin.c:1228 -#, c-format -msgid "%ls: Expected one argument, got %d\n" -msgstr "%ls: Erwartete ein Argument, erhielt %d\n" +#: builtin.cpp:1945 builtin.cpp:2252 +#, fuzzy, c-format +msgid "%ls: Expected function name\n" +msgstr "%ls: Erwartete genau einen Funktionsnamen\n" -#: builtin.c:1236 -#, c-format -msgid "%ls: Illegal function name '%ls'\n" -msgstr "%ls: Ungültiger Funktionsname '%ls'\n" - -#: builtin.c:1246 +#: builtin.cpp:1962 builtin.cpp:2269 #, c-format msgid "" "%ls: The name '%ls' is reserved,\n" @@ -94,675 +136,999 @@ msgstr "" "%ls: Der Name '%ls' ist reserviert,\n" "und kann nicht als Funktionsname benutzt werden\n" -#: builtin.c:1262 +#: builtin.cpp:1970 builtin.cpp:2277 builtin.cpp:3824 +#, fuzzy, c-format +msgid "%ls: No function name given\n" +msgstr "%ls: Ungültiger Funktionsname '%ls'\n" + +#: builtin.cpp:1997 builtin.cpp:2304 +#, c-format +msgid "%ls: Expected one argument, got %d\n" +msgstr "%ls: Erwartete ein Argument, erhielt %d\n" + +#: builtin.cpp:2319 msgid "Current functions are: " msgstr "Aktuelle Funktionen sind: " -#: builtin.c:1405 +#: builtin.cpp:2459 #, c-format msgid "%ls: Seed value '%ls' is not a valid number\n" -msgstr "%ls: Seed-Wert '%ls' ist keine gültige Zahl\n" +msgstr "%ls: Seed-Wert '%ls' ist keine gültige Zahl\n" -#: builtin.c:1419 +#: builtin.cpp:2473 #, c-format msgid "%ls: Expected zero or one argument, got %d\n" msgstr "%ls: Erwartete kein oder ein Argument, erhielt %d\n" -#: builtin.c:1860 builtin.c:3060 +#: builtin.cpp:2981 fish.cpp:518 parser.cpp:1095 +#, fuzzy +msgid "Standard input" +msgstr "Standardmodus" + +#: builtin.cpp:3024 +#, fuzzy +msgid "This is a login shell\n" +msgstr "Login-Shell erstellen" + +#: builtin.cpp:3026 +#, fuzzy +msgid "This is not a login shell\n" +msgstr "Login-Shell erstellen" + +#: builtin.cpp:3028 +#, c-format +msgid "Job control: %ls\n" +msgstr "" + +#: builtin.cpp:3029 +#, fuzzy +msgid "Only on interactive jobs" +msgstr "Ausführung im interaktiven Modus" + +#: builtin.cpp:3030 +msgid "Never" +msgstr "" + +#: builtin.cpp:3030 +msgid "Always" +msgstr "" + +#: builtin.cpp:3066 builtin.cpp:3995 #, c-format msgid "%ls: Argument '%ls' must be an integer\n" msgstr "%ls: Argument '%ls' muss eine Ganzzahl sein\n" -#: builtin.c:1871 builtin.c:2164 builtin.c:3071 -#, c-format -msgid "%ls: Too many arguments\n" -msgstr "%ls: Zu viele Argumente\n" - -#: builtin.c:1916 +#: builtin.cpp:3108 #, c-format msgid "%ls: Could not find home directory\n" 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" - -#: builtin.c:1940 +#: builtin.cpp:3128 builtin.cpp:3182 #, c-format msgid "%ls: '%ls' is not a directory\n" msgstr "%ls: '%ls' ist kein Verzeichnis\n" -#: builtin.c:1955 +#: builtin.cpp:3135 +#, fuzzy, c-format +msgid "%ls: The directory '%ls' does not exist\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: builtin.cpp:3142 +#, fuzzy, c-format +msgid "%ls: '%ls' is a rotten symlink\n" +msgstr "%ls: '%ls' ist keine Datei\n" + +#: builtin.cpp:3150 +#, fuzzy, c-format +msgid "%ls: Unknown error trying to locate directory '%ls'\n" +msgstr "%ls: Unbekannte Option '%ls'\n" + +#: builtin.cpp:3173 +#, fuzzy, c-format +msgid "%ls: Permission denied: '%ls'\n" +msgstr "%ls: Ungültiger Funktionsname '%ls'\n" + +#: builtin.cpp:3197 #, c-format msgid "%ls: Could not set PWD variable\n" msgstr "%ls: Konnte PWD-Variable nicht festlegen\n" -#: builtin.c:2110 -#, c-format -msgid "%ls: Parameter '%ls' is too long\n" -msgstr "%ls: Parameter '%ls' ist zu lang\n" +#: builtin.cpp:3284 +#, fuzzy, c-format +msgid "%ls: Key not specified\n" +msgstr "%s: Schlüssel nicht angegeben\\n" -#: builtin.c:2231 builtin.c:3116 -#, c-format -msgid "%ls: Expected exactly one argument, got %d\n" -msgstr "%ls: Erwartete genau ein Argument, erhielt %d\n" +#: builtin.cpp:3328 builtin.cpp:3336 +#, fuzzy, c-format +msgid "%ls: Error encountered while sourcing file '%ls':\n" +msgstr "%ls: Fehler beim Lesen der Datei '%ls'\n" -#: builtin.c:2244 +#: builtin.cpp:3344 #, c-format msgid "%ls: '%ls' is not a file\n" msgstr "%ls: '%ls' ist keine Datei\n" -#: builtin.c:2269 +#: builtin.cpp:3363 #, c-format msgid "%ls: Error while reading file '%ls'\n" msgstr "%ls: Fehler beim Lesen der Datei '%ls'\n" -#: builtin.c:2329 builtin.c:2750 -#, c-format -msgid "%ls: There are no jobs\n" +#: builtin.cpp:3419 builtin.cpp:3599 +#, fuzzy, c-format +msgid "%ls: There are no suitable jobs\n" msgstr "%ls: Es gibt keine Jobs\n" -#: builtin.c:2346 +#: builtin.cpp:3448 #, c-format msgid "%ls: Ambiguous job\n" msgstr "%ls: Mehrdeutiger Job\n" -#: builtin.c:2352 builtin.c:2709 +#: builtin.cpp:3454 builtin.cpp:3622 builtin_jobs.cpp:301 #, c-format msgid "%ls: '%ls' is not a job\n" msgstr "%ls: '%ls' ist kein Job\n" -#: builtin.c:2365 builtin.c:2724 +#: builtin.cpp:3485 builtin_jobs.cpp:316 #, c-format msgid "%ls: No suitable job: %d\n" msgstr "%ls: Kein passender Job: %d\n" -#: builtin.c:2416 +#: builtin.cpp:3494 +#, c-format +msgid "" +"%ls: Can't put job %d, '%ls' to foreground because it is not under job " +"control\n" +msgstr "" + +#: builtin.cpp:3547 #, c-format msgid "%ls: Unknown job '%ls'\n" msgstr "%ls: Unbekannter Job '%ls'\n" -#: builtin.c:2425 +#: builtin.cpp:3556 +#, c-format +msgid "" +"%ls: Can't put job %d, '%ls' to background because it is not under job " +"control\n" +msgstr "" + +#: builtin.cpp:3566 #, c-format msgid "Send job %d '%ls' to background\n" msgstr "Sende Job %d '%ls' in den Hintergrund\n" -#: builtin.c:2445 +#: builtin.cpp:3605 msgid "(default)" msgstr "(Standard)" -#: builtin.c:2499 -msgid "Job\tGroup\t" -msgstr "Job\tGruppe\t" - -#: builtin.c:2501 -msgid "CPU\t" -msgstr "CPU\t" - -#: builtin.c:2503 -msgid "State\tCommand\n" -msgstr "Status\tBefehl\n" - -#: builtin.c:2512 proc.c:632 -msgid "stopped" -msgstr "gestoppt" - -#: builtin.c:2512 -msgid "running" -msgstr "aktiv" - -#: builtin.c:2527 -msgid "Group\n" -msgstr "Gruppe\n" - -#: builtin.c:2540 -msgid "Procces\n" -msgstr "Prozess\n" - -#: builtin.c:2557 -msgid "Command\n" -msgstr "Befehl\n" - -#: builtin.c:2769 -#, c-format -msgid "%ls: Expected at least two arguments\n" -msgstr "%ls: Erwartete mindestens zwei Argumente\n" - -#: builtin.c:2776 -#, c-format -msgid "%ls: '%ls' is not a valid variable name\n" -msgstr "%ls: '%ls' ist kein gültiger Variablenname\n" - -#: builtin.c:2784 -#, c-format -msgid "%ls: Second argument must be 'in'\n" -msgstr "%ls: Zweites Argument muss 'in' sein'\n" - -#: builtin.c:2844 +#: builtin.cpp:3737 #, c-format msgid "%ls: Not inside of block\n" msgstr "%ls: Nicht innerhalb eines Blocks\n" -#: builtin.c:2968 +#: builtin.cpp:3884 #, c-format msgid "%ls: Not inside of 'if' block\n" msgstr "%ls: Nicht innerhalb eines 'if'-Blocks\n" -#: builtin.c:3020 +#: builtin.cpp:3938 #, c-format msgid "%ls: Not inside of loop\n" msgstr "%ls: Nicht innerhalb einer Schleife\n" -#: builtin.c:3087 +#: builtin.cpp:4005 builtin_complete.cpp:539 builtin_set_color.cpp:140 +#: builtin.h:83 +#, c-format +msgid "%ls: Too many arguments\n" +msgstr "%ls: Zu viele Argumente\n" + +#: builtin.cpp:4023 #, c-format msgid "%ls: Not inside of function\n" msgstr "%ls: Nicht innerhalb einer Funktion\n" -#: builtin.c:3147 +#: builtin.cpp:4059 +#, c-format +msgid "%ls: Expected exactly one argument, got %d\n" +msgstr "%ls: Erwartete genau ein Argument, erhielt %d\n" + +#: builtin.cpp:4090 #, c-format msgid "%ls: 'case' command while not in switch block\n" -msgstr "%ls: 'case'-Befehl außerhalb eines switch-Blocks\n" +msgstr "%ls: 'case'-Befehl außerhalb eines switch-Blocks\n" -#: builtin.c:3345 +#: builtin.cpp:4317 builtin.cpp:4360 +#, fuzzy +msgid "Test a condition" +msgstr "Konfigurationsoption festlegen" + +#: builtin.cpp:4318 +msgid "Try out the new parser" +msgstr "" + +#: builtin.cpp:4319 +msgid "Execute command if previous command suceeded" +msgstr "Befehl ausführen, wenn vorheriger Befehl fehlerfrei war" + +#: builtin.cpp:4320 +msgid "Create a block of code" +msgstr "Codeblock erstellen" + +#: builtin.cpp:4321 +msgid "Send job to background" +msgstr "Job in Hintergrund schicken" + +#: builtin.cpp:4322 +msgid "Handle fish key bindings" +msgstr "Fish-Tastenbelegungen bearbeiten" + +#: builtin.cpp:4323 +msgid "Temporarily block delivery of events" +msgstr "Ereignisweitergabe vorübergehend blockieren" + +#: builtin.cpp:4324 +msgid "Stop the innermost loop" +msgstr "Innerste Schleife beenden" + +#: builtin.cpp:4325 +msgid "" +"Temporarily halt execution of a script and launch an interactive debug prompt" +msgstr "" + +#: builtin.cpp:4326 +msgid "Run a builtin command instead of a function" +msgstr "Internen Befehl anstatt einer Funktion ausführen" + +#: builtin.cpp:4327 builtin.cpp:4359 +msgid "Conditionally execute a block of commands" +msgstr "Befehlsblock bedingt ausführen" + +#: builtin.cpp:4328 +msgid "Change working directory" +msgstr "Arbeitsverzeichnis wechseln" + +#: builtin.cpp:4329 +msgid "Run a program instead of a function or builtin" +msgstr "Programm statt Funktion oder internem Befehl ausführen" + +#: builtin.cpp:4330 +msgid "Set or get the commandline" +msgstr "Festlegen oder Abrufen der Befehlszeile" + +#: builtin.cpp:4331 +msgid "Edit command specific completions" +msgstr "Befehlsspezifische Erweiterungen bearbeiten" + +#: builtin.cpp:4332 +msgid "Search for a specified string in a list" +msgstr "" + +#: builtin.cpp:4333 +msgid "Skip the rest of the current lap of the innermost loop" +msgstr "Rest des aktuellen Durchlaufs der innersten Schleife überspringen" + +#: builtin.cpp:4334 +#, fuzzy +msgid "Count the number of arguments" +msgstr "Anzahl der Vorkommen ausgeben" + +#: builtin.cpp:4335 +#, fuzzy +msgid "Print arguments" +msgstr "Wortzählung ausgeben" + +#: builtin.cpp:4336 +msgid "Evaluate block if condition is false" +msgstr "Werte Block aus, wenn die Bedingung falsch ist" + +#: builtin.cpp:4337 +#, fuzzy +msgid "Emit an event" +msgstr "Debian-Version auslassen" + +#: builtin.cpp:4338 +msgid "End a block of commands" +msgstr "Befehlsblock beenden" + +#: builtin.cpp:4339 +msgid "Run command in current process" +msgstr "Befehl im aktuellen Prozess ausführen" + +#: builtin.cpp:4340 +msgid "Exit the shell" +msgstr "Shell verlassen" + +#: builtin.cpp:4341 +msgid "Send job to foreground" +msgstr "Job in Vordergrund schicken" + +#: builtin.cpp:4342 +msgid "Perform a set of commands multiple times" +msgstr "Eine Befehlsfolge mehrmals ausführen" + +#: builtin.cpp:4343 +msgid "Define a new function" +msgstr "Neue Funktion definieren" + +#: builtin.cpp:4344 +msgid "List or remove functions" +msgstr "Funktionen auflisten oder entfernen" + +#: builtin.cpp:4345 +msgid "History of commands executed by user" +msgstr "" + +#: builtin.cpp:4346 +msgid "Evaluate block if condition is true" +msgstr "Block auswerten, wenn Bedingung wahr ist" + +#: builtin.cpp:4347 +msgid "Print currently running jobs" +msgstr "Derzeit laufende Jobs ausgeben" + +#: builtin.cpp:4348 +msgid "Negate exit status of job" +msgstr "Exit-Status des Jobs verneinen" + +#: builtin.cpp:4349 +msgid "Execute command if previous command failed" +msgstr "Befehl ausführen, wenn vorheriger Befehl fehlerhaft war" + +#: builtin.cpp:4350 +#, fuzzy +msgid "Prints formatted text" +msgstr "Befehlstyp ausgeben" + +#: builtin.cpp:4351 +#, fuzzy +msgid "Print the working directory" +msgstr "Arbeitsverzeichnis ausgeben" + +#: builtin.cpp:4352 +msgid "Generate random number" +msgstr "Zufallszahl generieren" + +#: builtin.cpp:4353 +msgid "Read a line of input into variables" +msgstr "Eine Eingabezeile in Variablen einlesen" + +#: builtin.cpp:4354 +msgid "Stop the currently evaluated function" +msgstr "Derzeit ausgewertete Funktion stoppen" + +#: builtin.cpp:4355 +msgid "Handle environment variables" +msgstr "Behandlung von Umgebungsvariablen" + +#: builtin.cpp:4356 +msgid "Set the terminal color" +msgstr "" + +#: builtin.cpp:4357 +msgid "Evaluate contents of file" +msgstr "Inhalt einer Datei auswerten" + +#: builtin.cpp:4358 +msgid "Return status information about fish" +msgstr "Statusinformation über Fish zurückgeben" + +#: builtin.cpp:4361 +msgid "Set or get the shells resource usage limits" +msgstr "Die Ressourcengrenzen der Shell festlegen/abrufen" + +#: builtin.cpp:4362 +msgid "Perform a command multiple times" +msgstr "Einen Befehl mehrmals ausführen" + +#: builtin.cpp:4442 parser.cpp:53 #, c-format msgid "Unknown builtin '%ls'" msgstr "unbekannter interner Befehl '%ls'" -#: builtin.c:3367 -msgid "Temporarily block delivery of events" -msgstr "Ereignisweitergabe vorübergehend blockieren" +#: builtin_commandline.cpp:411 +#, fuzzy, c-format +msgid "%ls: Unknown input function '%ls'\n" +msgstr "%ls: Unbekannte Option '%ls'\n" -#: builtin.c:3368 -msgid "Run a builtin command instead of a function" -msgstr "Internen Befehl anstatt einer Funktion ausführen" +#: builtin_jobs.cpp:87 +msgid "Job\tGroup\t" +msgstr "Job\tGruppe\t" -#: builtin.c:3369 -msgid "Edit command specific completions" -msgstr "Befehlsspezifische Erweiterungen bearbeiten" +#: builtin_jobs.cpp:89 +msgid "CPU\t" +msgstr "CPU\t" -#: builtin.c:3370 -msgid "Change working directory" -msgstr "Arbeitsverzeichnis wechseln" +#: builtin_jobs.cpp:91 +msgid "State\tCommand\n" +msgstr "Status\tBefehl\n" -#: builtin.c:3371 -msgid "Exit the shell" -msgstr "Shell verlassen" +#: builtin_jobs.cpp:99 proc.cpp:751 +msgid "stopped" +msgstr "gestoppt" -#: builtin.c:3372 -msgid "Define a new function" -msgstr "Neue Funktion definieren" +#: builtin_jobs.cpp:99 +msgid "running" +msgstr "aktiv" -#: builtin.c:3373 -msgid "List or remove functions" -msgstr "Funktionen auflisten oder entfernen" +#: builtin_jobs.cpp:113 +msgid "Group\n" +msgstr "Gruppe\n" -#: builtin.c:3374 -msgid "End a block of commands" -msgstr "Befehlsblock beenden" +#: builtin_jobs.cpp:126 +#, fuzzy +msgid "Process\n" +msgstr "Prozess\n" -#: builtin.c:3375 -msgid "Evaluate block if condition is false" -msgstr "Werte Block aus, wenn die Bedingung falsch ist" +#: builtin_jobs.cpp:143 +msgid "Command\n" +msgstr "Befehl\n" -#: builtin.c:3376 -msgid "Evaluate parameters as a command" -msgstr "Parameter als Befehl auswerten" +#: builtin_jobs.cpp:344 +#, c-format +msgid "%ls: There are no jobs\n" +msgstr "%ls: Es gibt keine Jobs\n" -#: builtin.c:3377 -msgid "Perform a set of commands multiple times" -msgstr "Eine Befehlsfolge mehrmals ausführen" +#: builtin_printf.cpp:175 +#, c-format +msgid "" +"warning: %ls: character(s) following character constant have been ignored" +msgstr "" -#: builtin.c:3378 -msgid "Evaluate contents of file" -msgstr "Inhalt einer Datei auswerten" +#: builtin_printf.cpp:256 +#, fuzzy, c-format +msgid "%ls: expected a numeric value" +msgstr "%ls: Argument erwartet\n" -#: builtin.c:3379 -msgid "Handle environment variables" -msgstr "Behandlung von Umgebungsvariablen" +#: builtin_printf.cpp:258 +#, c-format +msgid "%ls: value not completely converted" +msgstr "" -#: builtin.c:3380 -msgid "Send job to foreground" -msgstr "Job in Vordergrund schicken" +#: builtin_printf.cpp:359 +msgid "missing hexadecimal number in escape" +msgstr "" -#: builtin.c:3381 -msgid "Send job to background" -msgstr "Job in Hintergrund schicken" +#: builtin_printf.cpp:387 +msgid "Missing hexadecimal number in Unicode escape" +msgstr "" -#: builtin.c:3382 -msgid "Print currently running jobs" -msgstr "Derzeit laufende Jobs ausgeben" +#: builtin_printf.cpp:401 +#, c-format +msgid "Unicode character out of range: \\%c%0*x" +msgstr "" -#: builtin.c:3383 -msgid "Read a line of input into variables" -msgstr "Eine Eingabezeile in Variablen einlesen" +#: builtin_printf.cpp:668 +#, c-format +msgid "invalid field width: %ls" +msgstr "" -#: builtin.c:3384 -msgid "Stop the innermost loop" -msgstr "Innerste Schleife beenden" +#: builtin_printf.cpp:706 +#, fuzzy, c-format +msgid "invalid precision: %ls" +msgstr "%ls: Ungültige Prozesskennung %ls\n" -#: builtin.c:3385 -msgid "Skip the rest of the current lap of the innermost loop" -msgstr "Rest des aktuellen Durchlaufs der innersten Schleife überspringen" +#: builtin_printf.cpp:737 +#, fuzzy, c-format +msgid "%.*ls: invalid conversion specification" +msgstr "%ls: Ungültige Kombination der Optionen\n" -#: builtin.c:3386 -msgid "Stop the currently evaluated function" -msgstr "Derzeit ausgewertete Funktion stoppen" +#: builtin_printf.cpp:769 +#, fuzzy +msgid "printf: not enough arguments" +msgstr "Dateiargumente nicht sortieren" -#: builtin.c:3387 -msgid "Set or get the commandline" -msgstr "Festlegen oder Abrufen der Befehlszeile" +#: builtin_set.cpp:155 +#, fuzzy, c-format +msgid "%ls: Tried to change the read-only variable '%ls'\n" +msgstr "%ls: Fehler beim Lesen der Datei '%ls'\n" -#: builtin.c:3388 builtin.c:3389 -msgid "Conditionally execute a block of commands" -msgstr "Befehlsblock bedingt ausführen" +#: builtin_set.cpp:162 +#, fuzzy, c-format +msgid "%ls: Unknown error" +msgstr "%ls: Unbekannter Job '%ls'\n" -#: builtin.c:3390 -msgid "Run a program instead of a function or builtin" -msgstr "Programm statt Funktion oder internem Befehl ausführen" +#: builtin_set.cpp:214 +#, c-format +msgid "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" +msgstr "" -#: builtin.c:3391 -msgid "Evaluate block if condition is true" -msgstr "Block auswerten, wenn Bedingung wahr ist" - -#: builtin.c:3392 -msgid "Perform a command multiple times" -msgstr "Einen Befehl mehrmals ausführen" - -#: builtin.c:3393 -msgid "Handle fish key bindings" -msgstr "Fish-Tastenbelegungen bearbeiten" - -#: builtin.c:3394 -msgid "Generate random number" -msgstr "Zufallszahl generieren" - -#: builtin.c:3395 -msgid "Run command in current process" -msgstr "Befehl im aktuellen Prozess ausführen" - -#: builtin.c:3396 -msgid "Negate exit status of job" -msgstr "Exit-Status des Jobs verneinen" - -#: builtin.c:3397 -msgid "Execute command if previous command failed" -msgstr "Befehl ausführen, wenn vorheriger Befehl fehlerhaft war" - -#: builtin.c:3398 -msgid "Execute command if previous command suceeded" -msgstr "Befehl ausführen, wenn vorheriger Befehl fehlerfrei war" - -#: builtin.c:3399 -msgid "Create a block of code" -msgstr "Codeblock erstellen" - -#: builtin.c:3400 -msgid "Return status information about fish" -msgstr "Statusinformation über Fish zurückgeben" - -#: builtin.c:3401 -msgid "Set or get the shells resource usage limits" -msgstr "Die Ressourcengrenzen der Shell festlegen/abrufen" - -#: builtin_set.c:96 +#: builtin_set.cpp:241 #, c-format msgid "%ls: Invalid index starting at '%ls'\n" -msgstr "%ls: Ungültiger Indexstart bei '%ls'\n" +msgstr "%ls: Ungültiger Indexstart bei '%ls'\n" -#: builtin_set.c:488 -#, c-format -msgid "" -"%ls: Erase needs a variable name\n" -"%ls\n" +#: builtin_set.cpp:640 +#, fuzzy, c-format +msgid "%ls: Erase needs a variable name\n" msgstr "" -"%ls: Erase benötigt einen Variablennamen\n" +"%ls: Erase benötigt einen Variablennamen\n" "%ls\n" -#: builtin_set.c:525 -#, c-format -msgid "" -"%ls: Values cannot be specfied with erase\n" -"%ls\n" +#: builtin_set.cpp:684 +#, fuzzy, c-format +msgid "%ls: Can not specify scope when erasing array slice\n" +msgstr "%ls: Bei Blocklöschung kann kein Bereich angegeben werden\n" + +#: builtin_set.cpp:783 +#, fuzzy, c-format +msgid "%ls: Values cannot be specfied with erase\n" msgstr "" -"%ls: Bei erase können keine Werte angegeben werden\n" +"%ls: Bei erase können keine Werte angegeben werden\n" "%ls\n" -#: complete.c:52 -msgid "User home" -msgstr "Benutzer-Startverzeichnis" +#: builtin_set_color.cpp:149 +#, fuzzy, c-format +msgid "%ls: Expected an argument\n" +msgstr "%ls: Argument erwartet\n" -#: complete.c:57 -msgid "Variable: " +#: builtin_set_color.cpp:157 builtin_set_color.cpp:164 +#, fuzzy, c-format +msgid "%ls: Unknown color '%ls'\n" +msgstr "%ls: Unbekannter Job '%ls'\n" + +#: builtin_set_color.cpp:171 +#, fuzzy, c-format +msgid "%ls: Could not set up terminal\n" +msgstr "Konnte Terminal nicht einrichten" + +#: common.cpp:1882 +msgid "This is a bug. Break on bugreport to debug." +msgstr "" + +#: common.cpp:1901 +msgid "empty" +msgstr "leer" + +#: complete.cpp:61 +#, c-format +msgid "Home for %ls" +msgstr "" + +#: complete.cpp:66 +#, fuzzy, c-format +msgid "Variable: %ls" msgstr "Variable: " -#: complete.c:62 -msgid "Executable" -msgstr "Programm" - -#: complete.c:66 -msgid "Executable link" -msgstr "Programmlink" - -#: complete.c:71 -msgid "File" -msgstr "Datei" - -#: complete.c:75 -msgid "Character device" -msgstr "zeichenorientiertes Gerät" - -#: complete.c:79 -msgid "Block device" -msgstr "blockorientiertes Gerät" - -#: complete.c:83 -msgid "Fifo" -msgstr "Fifo" - -#: complete.c:87 -msgid "Symbolic link" -msgstr "Symbolischer Link" - -#: complete.c:91 -msgid "Rotten symbolic link" -msgstr "zerstörter symbolischer Link" - -#: complete.c:95 -msgid "Symbolic link loop" -msgstr "Schleife bei symbolischem Link" - -#: complete.c:99 -msgid "Socket" -msgstr "Socket" - -#: complete.c:103 init/fish_complete.fish.in:68 init/fish_complete.fish:68 -#: init/completions/ruby.fish:23 -msgid "Directory" -msgstr "Verzeichnis" - -#: complete.c:108 init/completions/function.fish:2 -#: init/completions/functions.fish:2 -msgid "Function" -msgstr "Funktion" - -#: complete.c:112 init/completions/function.fish:3 -msgid "Builtin" -msgstr "eingebauter Befehl" - -#: complete.c:764 complete.c:783 +#: complete.cpp:907 complete.cpp:925 msgid "Unknown option: " msgstr "Unbekannte Option: " -#: complete.c:788 +#: complete.cpp:929 msgid "Multiple matches for option: " -msgstr "Mehrere Treffer für Option: " +msgstr "Mehrere Treffer für Option: " -#: env.c:195 +#: env.cpp:251 msgid "Could not get user information" msgstr "Kann Benutzerinformation nicht abrufen" -#: env.c:291 +#: env.cpp:362 msgid "Changing language to English" msgstr "Sprachwechsel zu Deutsch" -#: env.c:849 -#, c-format -msgid "No history item at index %d\n" -msgstr "Kein Eintrag im Befehlsverlauf bei Index %d\n" - -#: env.c:1024 +#: env.cpp:1252 msgid "Tried to pop empty environment stack." msgstr "Versuchte, einen leeren Umgebungsstack zu poppen." -#: event.c:490 -msgid "Signal list overflow. Signals have been ignored." -msgstr "Signallistenüberlauf. Signale wurden ignoriert." +#: env_universal_common.cpp:529 +#, c-format +msgid "Could not convert message '%s' to wide character string" +msgstr "" -#: exec.c:52 +#: event.cpp:168 +#, c-format +msgid "signal handler for %ls (%ls)" +msgstr "" + +#: event.cpp:172 +#, fuzzy, c-format +msgid "handler for variable '%ls'" +msgstr "Behandlung von Umgebungsvariablen" + +#: event.cpp:178 +#, c-format +msgid "exit handler for process %d" +msgstr "" + +#: event.cpp:184 event.cpp:195 +#, c-format +msgid "exit handler for job %d, '%ls'" +msgstr "" + +#: event.cpp:186 +#, c-format +msgid "exit handler for job with process group %d" +msgstr "" + +#: event.cpp:197 +#, c-format +msgid "exit handler for job with job id %d" +msgstr "" + +#: event.cpp:203 +#, c-format +msgid "handler for generic event '%ls'" +msgstr "" + +#: event.cpp:207 +#, fuzzy, c-format +msgid "Unknown event type '0x%x'" +msgstr "Unbekannter Typ %d bei Eingabeumleitung " + +#: event.cpp:621 +msgid "Signal list overflow. Signals have been ignored." +msgstr "Signallistenüberlauf. Signale wurden ignoriert." + +#: exec.cpp:57 #, c-format msgid "An error occurred while redirecting file descriptor %d" msgstr "Fehler beim Umleiten des Dateideskriptors %d" -#: exec.c:56 -#, c-format -msgid "An error occurred while redirecting file '%ls'" +#: exec.cpp:62 +#, fuzzy +msgid "An error occurred while writing output" +msgstr "Fehler beim Einrichten der Pipe aufgetreten" + +#: exec.cpp:67 +#, fuzzy, c-format +msgid "An error occurred while redirecting file '%s'" msgstr "Fehler beim Umleiten der Datei '%ls'" -#: exec.c:60 -msgid "Could not create child process - exiting" -msgstr "Konnte Kindprozess nicht starten - Abbruch" - -#: exec.c:448 -#, c-format -msgid "Failed to execute process '%ls'" -msgstr "Konnte Prozess '%ls' nicht ausführen" - -#: exec.c:619 -#, c-format -msgid "Could not send process %d from group %d to group %d" -msgstr "Konnte Prozess %d nicht von Gruppe %d an Gruppe %d senden" - -#: exec.c:631 exec.c:643 proc.c:895 proc.c:907 -#, c-format -msgid "Could not send job %d ('%ls') to foreground" -msgstr "Konnte Job %d ('%ls') nicht in den Vordergrund schicken" - -#: exec.c:814 +#: exec.cpp:912 #, c-format msgid "Unknown function '%ls'" msgstr "Unbekannte Funktion '%ls'" -#: exec.c:922 +#: exec.cpp:1063 #, c-format msgid "Unknown input redirection type %d" 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." +#: expand.cpp:59 +#, fuzzy +msgid "Child process" +msgstr "Prozessor ausgeben" + +#: expand.cpp:64 +#, fuzzy +msgid "Process" +msgstr "Prozess\n" + +#: expand.cpp:69 +msgid "Job" 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 +#: expand.cpp:74 #, c-format -msgid "Subshell '%ls' returned illegal string, discarded one entry" +msgid "Job: %ls" msgstr "" -"Subshell '%ls' gab ungültige Zeichenkette zurück, ein Eintrag verworfen" -#: input.c:409 -msgid "Invalid Control sequence" -msgstr "Ungültige Kontrollsequenz" +#: expand.cpp:79 +#, fuzzy +msgid "Shell process" +msgstr "Preprozessoren" -#: input.c:521 +#: expand.cpp:84 +#, fuzzy +msgid "Last background job" +msgstr "In Hintergrund verzweigen" + +#: expand.cpp:1306 +#, fuzzy +msgid "Mismatched brackets" +msgstr "Unpassendes Anführungszeichen" + +#: fish.cpp:320 #, c-format -msgid "Could not parse sequence '%ls'" -msgstr "Konnte Sequenz '%ls' nicht auswerten" +msgid "Invalid value '%s' for debug level switch" +msgstr "" -#: input.c:687 -msgid "Invalid sequence - no dash after control\n" -msgstr "Ungültige Sequenz - kein Bindestrich nach Steuerung\n" - -#: input.c:717 -msgid "Invalid sequence - Control-nothing?\n" -msgstr "Ungültige Sequenz - Steuerung-Nichts?\n" - -#: input.c:732 -msgid "Invalid sequence - no dash after meta\n" -msgstr "Ungültige Sequenz - kein Bindestrich nach Alt\n" - -#: input.c:737 -msgid "Invalid sequence - Meta-nothing?" -msgstr "Ungültige Sequenz - Alt-Nichts?" - -#: input.c:782 +#: fish.cpp:361 mimedb.cpp:1335 #, c-format -msgid "Invalid sequence - '%ls' expanded to zero characters" -msgstr "Ungültige Sequenz - '%ls' wurde zu null Zeichen erweitert" +msgid "%s, version %s\n" +msgstr "" -#: input.c:846 -msgid "Mismatched $endif in inputrc file" -msgstr "Unpassendes $endif in der Datei inputrc" +#: fish.cpp:416 +msgid "Can not use the no-execute mode when running an interactive session" +msgstr "" -#: input.c:898 -msgid "Mismatched quote" -msgstr "Unpassendes Anführungszeichen" +#: fish.cpp:517 +#, fuzzy, c-format +msgid "Error while reading file %ls\n" +msgstr "%ls: Fehler beim Lesen der Datei '%ls'\n" -#: input.c:912 -msgid "Expected a ':'" -msgstr "Erwartete ein ':'" - -#: input.c:957 +#: fish_indent.cpp:345 #, c-format -msgid "I don't know what '%ls' means" -msgstr "Ich weiß nicht, was '%ls' bedeutet" +msgid "%ls, version %s\n" +msgstr "" -#: input.c:961 +#: fish_pager.cpp:113 +#, fuzzy, c-format +msgid "%ls: Argument '%s' is not a valid file descriptor\n" +msgstr "%ls: '%ls' ist kein gültiger Variablenname\n" + +#: fish_pager.cpp:703 #, c-format -msgid "Expected end of line, got '%ls'" -msgstr "Zeilenende erwartet, erhielt '%ls'" +msgid " %d to %d of %d" +msgstr "" -#: input.c:966 -msgid "Syntax: set KEY VALUE" -msgstr "Syntax: set SCHLÜSSEL WERT" +#: fish_pager.cpp:1012 +msgid "Could not set up output file descriptors for pager" +msgstr "" -#: input.c:1032 -msgid "Unable to parse key binding" -msgstr "Konnte Tastenkürzel nicht analysieren" +#: fish_pager.cpp:1018 +#, fuzzy +msgid "Could not set up input file descriptors for pager" +msgstr "Konnte Terminalmodus für neue Shell nicht festlegen" -#: input.c:1058 -#, c-format -msgid "I don't know what %ls means" -msgstr "Ich weiß nicht, was '%ls' bedeutet" +#: fish_pager.cpp:1024 +#, fuzzy +msgid "Could not open tty for pager" +msgstr "Konnte Shell nicht wieder in Vordergrund zurückholen" -#: input.c:1084 -#, c-format -msgid "Error while reading input information from file '%ls'" -msgstr "Fehler beim Lesen der Eingabeinformationen aus Datei '%ls'" +#: fish_pager.cpp:1031 +msgid "Could not initialize result pipe" +msgstr "" -#: input.c:1312 +#: fish_pager.cpp:1075 input.cpp:384 input.cpp:394 msgid "Could not set up terminal" msgstr "Konnte Terminal nicht einrichten" -#: io.c:73 +#: fish_pager.cpp:1110 input.cpp:436 +#, fuzzy +msgid "Error while closing terminfo" +msgstr "Fehler beim Schließen des Eingabestroms" + +#: fish_pager.cpp:1306 +#, fuzzy +msgid "Unspecified file descriptors" +msgstr "Datei-Deskriptoren beobachten" + +#: fish_pager.cpp:1318 +#, fuzzy +msgid "Could not read completions" +msgstr "Befehl, bei dem Vervollständigung genutzt werden soll" + +#: fishd.cpp:766 path.cpp:358 +msgid "" +"Unable to create a configuration directory for fish. Your personal settings " +"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " +"where the current user has write access." +msgstr "" + +#: input.cpp:387 +#, c-format +msgid "Check that your terminal type, '%ls', is supported on this system" +msgstr "" + +#: input.cpp:389 +#, c-format +msgid "Attempting to use '%ls' instead" +msgstr "" + +#: io.cpp:110 #, c-format 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 +#: mimedb.cpp:173 mimedb.cpp:187 mimedb.cpp:1177 #, c-format -msgid "If this error can be reproduced, please send a bug report to %s." +msgid "%s: Out of memory\n" 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" -msgstr "Dieser Befehl kann nicht in einer Pipe benutzt werden" +#: mimedb.cpp:462 +#, fuzzy, c-format +msgid "%s: Unknown error in munge()\n" +msgstr "%ls: Unbekannte Option '%ls'\n" -#: parser.c:67 +#: mimedb.cpp:480 +#, fuzzy, c-format +msgid "%s: Locale string too long\n" +msgstr "%ls: Parameter '%ls' ist zu lang\n" + +#: mimedb.cpp:550 mimedb.cpp:558 #, c-format -msgid "Tokenizer error: '%ls'" -msgstr "Tokenizer-Fehler: '%ls'" +msgid "%s: Could not compile regular expressions %s with error %s\n" +msgstr "" -#: parser.c:72 -msgid "Short circut command requires additional command" -msgstr "Ein kurzer Kreisbefehl erfordert einen zusätzlichen Befehl" +#: mimedb.cpp:674 +#, fuzzy, c-format +msgid "%s: No description for type %s\n" +msgstr "Beschreibung des mime-Typs ausgeben" -#: parser.c:77 -msgid "Maximum recursion depth reached. Accidental infinite loop?" -msgstr "Maximale Rekursionstiefe erreicht. Zufällige Endlosschleife?" +#: mimedb.cpp:742 +#, fuzzy, c-format +msgid "%s: Could not parse launcher string '%s'\n" +msgstr "Konnte Zeichenkette '%ls' nicht erweitern" -#: parser.c:82 +#: mimedb.cpp:778 +#, c-format +msgid "%s: Default launcher '%s' does not specify how to start\n" +msgstr "" + +#: mimedb.cpp:1156 +#, c-format +msgid "%s: Unsupported switch '%c' in launch string '%s'\n" +msgstr "" + +#: mimedb.cpp:1346 +#, c-format +msgid "%s: Can not launch a mimetype\n" +msgstr "" + +#: mimedb.cpp:1374 +#, fuzzy, c-format +msgid "%s: Could not parse mimetype from argument '%s'\n" +msgstr "Konnte Sequenz '%ls' nicht auswerten" + +#: mimedb.cpp:1394 signal.cpp:407 signal.cpp:422 +#, fuzzy +msgid "Unknown" +msgstr "unbekannt" + +#: pager.cpp:24 +#, fuzzy +msgid "search: " +msgstr "Architektur festlegen" + +#: parse_execution.cpp:526 parse_execution.cpp:961 parser.cpp:1404 +#, c-format +msgid "Could not expand string '%ls'" +msgstr "Konnte Zeichenkette '%ls' nicht erweitern" + +#: parse_execution.cpp:549 +#, fuzzy, c-format +msgid "switch: Expected exactly one argument, got %lu\n" +msgstr "%ls: Erwartete genau ein Argument, erhielt %d\n" + +#: parse_execution.cpp:749 parser.cpp:2053 +#, fuzzy, c-format 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 "Maximalanzahl geschachtelter Blöcke erreicht." - -#: parser.c:92 -#, c-format -msgid "Expected a command name, got token of type '%ls'" -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." - -#: 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." - -#: parser.c:107 -#, c-format -msgid "Illegal command name '%ls'" -msgstr "Ungültiger Befehlsname '%ls'" - -#: 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." - -#: parser.c:117 -msgid "'case' builtin not inside of switch block" -msgstr "eingebauter Befehl 'case' nicht innerhalb eines switch-Blocks" - -#: parser.c:122 -msgid "Loop control command while not inside of loop" -msgstr "Schleifensteuerungsbefehl 'while' nicht innerhalb einer Schleife" - -#: parser.c:127 -msgid "'else' builtin not inside of if block" -msgstr "eingebauter Befehl 'else' nicht innerhalb eines if-Blocks" - -#: parser.c:132 -msgid "'end' command outside of block" -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 " +"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'." 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 +#: parse_execution.cpp:774 parser.cpp:2078 +#, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function like " +"'function %ls; %ls $argv; end' or use the eval builtin instead, like 'eval " +"%ls'. See the help section for the function command by typing 'help " +"function'." +msgstr "" + +#: parse_execution.cpp:783 parser.cpp:2087 +#, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function or use the " +"eval builtin instead, like 'eval %ls'. See the help section for the function " +"command by typing 'help function'." +msgstr "" + +#: parse_execution.cpp:791 parser.cpp:2095 +#, fuzzy, c-format +msgid "" +"Commands may not contain variables. Use the eval builtin instead, like 'eval " +"%ls'. See the help section for the eval command by typing 'help eval'." +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." + +#: parse_execution.cpp:798 parser.cpp:2102 +#, c-format +msgid "The file '%ls' is not executable by this user" +msgstr "" + +#: parse_execution.cpp:1029 +#, fuzzy, c-format +msgid "Invalid redirection target: %ls" +msgstr "Ungültige Umleitung" + +#: parse_execution.cpp:1053 +#, fuzzy, c-format +msgid "Requested redirection to '%ls', which is not a valid file descriptor" +msgstr "Angeforderte Umleitung auf etwas, das kein Dateideskriptor ist %ls" + +#: parse_util.cpp:47 +#, fuzzy, c-format +msgid "The '%ls' command can not be used in a pipeline" +msgstr "Dieser Befehl kann nicht in einer Pipe benutzt werden" + +#: parser.cpp:58 +msgid "This command can not be used in a pipeline" +msgstr "Dieser Befehl kann nicht in einer Pipe benutzt werden" + +#: parser.cpp:64 +#, c-format +msgid "Tokenizer error: '%ls'" +msgstr "Tokenizer-Fehler: '%ls'" + +#: parser.cpp:69 +msgid "An additional command is required" +msgstr "" + +#: parser.cpp:74 +msgid "" +"The function calls itself immediately, which would result in an infinite " +"loop." +msgstr "" + +#: parser.cpp:79 +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 " +"geschriebenoder ein ':' fehlt." + +#: parser.cpp:82 +#, c-format +msgid "Expected a command name, got token of type '%ls'" +msgstr "Erwartete einen Befehlsnamen, bekam Zeichen des Typs '%ls'" + +#: parser.cpp:87 parse_constants.h:158 +#, c-format +msgid "Illegal command name '%ls'" +msgstr "Ungültiger Befehlsname '%ls'" + +#: parser.cpp:92 parse_constants.h:164 +#, c-format +msgid "Illegal file descriptor in redirection '%ls'" +msgstr "" + +#: parser.cpp:97 parse_constants.h:167 +#, c-format +msgid "No matches for wildcard '%ls'." +msgstr "" + +#: parser.cpp:102 +msgid "'case' builtin not inside of switch block" +msgstr "eingebauter Befehl 'case' nicht innerhalb eines switch-Blocks" + +#: parser.cpp:107 +msgid "Loop control command while not inside of loop" +msgstr "Schleifensteuerungsbefehl 'while' nicht innerhalb einer Schleife" + +#: parser.cpp:112 parse_constants.h:176 +#, fuzzy +msgid "'return' builtin command outside of function definition" +msgstr "Internen Befehl anstatt einer Funktion ausführen" + +#: parser.cpp:117 +#, fuzzy, c-format +msgid "'%ls' builtin not inside of if block" +msgstr "eingebauter Befehl 'else' nicht innerhalb eines if-Blocks" + +#: parser.cpp:122 +#, c-format +msgid "'%ls' used past terminating 'else'" +msgstr "" + +#: parser.cpp:127 +msgid "'end' command outside of block" +msgstr "'end'-Befehl außerhalb eines Blocks" + +#: parser.cpp:132 parse_constants.h:179 +#, fuzzy, c-format +msgid "" +"Unknown command '%ls'. Did you mean 'set %ls %ls'? 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.cpp:137 #, c-format msgid "Expected redirection specification, got token of type '%ls'" msgstr "Erwartete Umleitungsspezifikation, erhielt Zeichen vom Typ '%ls'" -#: parser.c:147 +#: parser.cpp:142 msgid "" "Encountered redirection when expecting a command name. Fish does not allow a " "redirection operation before a command." @@ -770,6360 +1136,4891 @@ msgstr "" "Umleitung anstelle eines Befehlsnamens. Fish erlaubt keine Umleitung vor " "einem Befehl." -#: parser.c:152 -msgid "Tried to evaluate null pointer." -msgstr "Versuchte, einen Nullzeiger auszuwerten." - -#: parser.c:157 +#: parser.cpp:147 #, c-format msgid "Tried to evaluate commands using invalid block type '%ls'" -msgstr "Versuchte, Befehle mittels des ungültigen Blocktyps '%ls' auszuwerten" +msgstr "Versuchte, Befehle mittels des ungültigen Blocktyps '%ls' auszuwerten" -#: parser.c:163 +#: parser.cpp:153 #, c-format msgid "Unexpected token of type '%ls'" msgstr "Unerwartetes Zeichen des Typs '%ls'" -#: parser.c:168 -#, c-format -msgid "Error while searching for command '%ls'" -msgstr "Fehler beim Suchen des Befehls '%ls'" - -#: parser.c:174 +#: parser.cpp:158 parse_constants.h:209 msgid "'while' block" msgstr "'while'-Block" -#: parser.c:180 +#: parser.cpp:163 parse_constants.h:214 msgid "'for' block" msgstr "'for'-Block" -#: parser.c:186 +#: parser.cpp:168 parse_constants.h:219 +msgid "Block created by breakpoint" +msgstr "" + +#: parser.cpp:175 parse_constants.h:226 msgid "'if' conditional block" msgstr "'if'-Bedingungsblock" -#: parser.c:192 +#: parser.cpp:181 parse_constants.h:232 msgid "function definition block" msgstr "Funktionsdefinitonsblock" -#: parser.c:198 +#: parser.cpp:187 parse_constants.h:238 msgid "function invocation block" -msgstr "Funktionsausführungsblock" +msgstr "Funktionsausführungsblock" -#: parser.c:204 +#: parser.cpp:192 parse_constants.h:243 +#, fuzzy +msgid "function invocation block with no variable shadowing" +msgstr "Funktionsausführungsblock" + +#: parser.cpp:198 parse_constants.h:249 msgid "'switch' block" msgstr "'switch'-Block" -#: parser.c:210 +#: parser.cpp:204 parse_constants.h:255 msgid "unexecutable block" -msgstr "nicht ausführbarer Block" +msgstr "nicht ausführbarer Block" -#: parser.c:216 +#: parser.cpp:210 parse_constants.h:261 msgid "global root block" msgstr "globaler Root-Block" -#: parser.c:222 +#: parser.cpp:216 parse_constants.h:267 msgid "command substitution block" msgstr "Befehlsersetzungsblock" -#: parser.c:228 +#: parser.cpp:222 parse_constants.h:273 msgid "'begin' unconditional block" msgstr "'begin' unbedingter Block" -#: parser.c:234 -msgid "unknown/invalid block" -msgstr "unbekannter/ungültiger Block" +#: parser.cpp:228 parse_constants.h:279 +msgid "Block created by the . builtin" +msgstr "" -#: parser.c:876 +#: parser.cpp:233 parse_constants.h:284 +#, fuzzy +msgid "event handler block" +msgstr "nicht ausführbarer Block" + +#: parser.cpp:239 parse_constants.h:290 +msgid "unknown/invalid block" +msgstr "unbekannter/ungültiger Block" + +#: parser.cpp:645 #, c-format msgid "Could not write profiling information to file '%s'" msgstr "Konnte Profilierungsinformationen nicht in Datei '%s' schreiben" -#: parser.c:882 +#: parser.cpp:651 msgid "Time\tSum\tCommand\n" msgstr "Zeit\tSum\tBefehl\n" -#: parser.c:1036 +#: parser.cpp:811 +#, c-format +msgid "in event handler: %ls\n" +msgstr "" + +#: parser.cpp:839 +#, c-format +msgid "from sourcing file %ls\n" +msgstr "" + +#: parser.cpp:845 +#, fuzzy, c-format +msgid "in function '%ls'\n" +msgstr "Unbekannte Funktion '%ls'" + +#: parser.cpp:850 +#, fuzzy +msgid "in command substitution\n" +msgstr "Befehlsersetzungsblock" + +#: parser.cpp:863 +#, c-format +msgid "\tcalled on line %d of file %ls\n" +msgstr "" + +#: parser.cpp:869 +msgid "\tcalled during startup\n" +msgstr "" + +#: parser.cpp:873 +msgid "\tcalled on standard input\n" +msgstr "" + +#: parser.cpp:890 +#, c-format +msgid "\twith parameter list '%ls'\n" +msgstr "" + +#: parser.cpp:1087 #, c-format msgid "%ls (line %d): " msgstr "%ls (Zeile %d): " -#: parser.c:1222 -#, c-format -msgid "Could not expand string '%ls'" -msgstr "Konnte Zeichenkette '%ls' nicht erweitern" +#: parser.cpp:1091 +msgid "Startup" +msgstr "" -#: parser.c:1324 +#: parser.cpp:1197 +msgid "Job inconsistency" +msgstr "Jobinkonsistenz" + +#: parser.cpp:1520 msgid "Invalid IO redirection" -msgstr "Ungültige E/A-Umleitung" +msgstr "Ungültige E/A-Umleitung" -#: parser.c:1367 +#: parser.cpp:1541 #, c-format msgid "Requested redirection to something that is not a file descriptor %ls" msgstr "Angeforderte Umleitung auf etwas, das kein Dateideskriptor ist %ls" -#: parser.c:1780 -#, c-format -msgid "Unknown command '%ls'" -msgstr "Unbekannter Befehl '%ls'" - -#: parser.c:2215 +#: parser.cpp:2667 parser.cpp:2750 msgid "End of block mismatch. Program terminating." msgstr "Unpassendes Blockende. Programm wird beendet." -#: proc.c:149 -msgid "Job inconsistency" -msgstr "Jobinkonsistenz" +#: parser.cpp:3034 +#, fuzzy, c-format +msgid "%ls (line %lu): " +msgstr "%ls (Zeile %d): " -#: proc.c:501 +#: path.cpp:24 +#, c-format +msgid "Error while searching for command '%ls'" +msgstr "Fehler beim Suchen des Befehls '%ls'" + +#: proc.cpp:615 #, c-format msgid "Job %d, '%ls' has %ls" msgstr "Job %d, '%ls' hat %ls" -#: proc.c:577 +#: proc.cpp:699 #, c-format msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" msgstr "%ls: Job %d, '%ls' durch Signal %ls (%ls) beendet" -#: proc.c:585 +#: proc.cpp:707 #, 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" -#: proc.c:616 +#: proc.cpp:736 msgid "ended" msgstr "beendet" -#: proc.c:835 +#: proc.cpp:969 msgid "An error occured while reading output from code block" -msgstr "Fehler während des Lesens der Ausgabe aus Codeblock" +msgstr "Fehler während des Lesens der Ausgabe aus Codeblock" -#: proc.c:1018 proc.c:1028 proc.c:1038 +#: proc.cpp:998 proc.cpp:1010 +#, c-format +msgid "Could not send job %d ('%ls') to foreground" +msgstr "Konnte Job %d ('%ls') nicht in den Vordergrund schicken" + +#: proc.cpp:1030 proc.cpp:1040 proc.cpp:1055 msgid "Could not return shell to foreground" -msgstr "Konnte Shell nicht wieder in Vordergrund zurückholen" +msgstr "Konnte Shell nicht wieder in Vordergrund zurückholen" -#: proc.c:1061 -msgid "Job command" -msgstr "Jobbefehl" - -#: proc.c:1064 proc.c:1091 +#: proc.cpp:1280 proc.cpp:1304 msgid "Process list pointer" msgstr "Zeiger auf Prozessliste" -#: proc.c:1067 -msgid "Job list pointer" -msgstr "Zeiger auf Jobliste" - -#: proc.c:1078 +#: proc.cpp:1291 #, c-format msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" msgstr "Mehr als ein Job im Vordergrund: Job 1: '%ls' Job 2: '%ls'" -#: proc.c:1089 +#: proc.cpp:1302 msgid "Process argument list" msgstr "Prozessargumentliste" -#: proc.c:1090 +#: proc.cpp:1303 msgid "Process name" msgstr "Prozessname" -#: proc.c:1092 -msgid "Process command" -msgstr "Prozessbefehl" - -#: proc.c:1097 +#: proc.cpp:1309 #, c-format msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" msgstr "Job '%ls', Prozess '%ls' hat inkonsistenten Status 'stopped'=%d" -#: proc.c:1107 +#: proc.cpp:1319 #, c-format msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" msgstr "Job '%ls', Prozess '%ls' hat inkonsistenten Status 'completed'=%d" -#: reader.c:299 +#: reader.cpp:453 msgid "Could not set terminal mode for new job" -msgstr "Konnte Terminalmodus für neuen Job nicht festlegen" +msgstr "Konnte Terminalmodus für neuen Job nicht festlegen" -#: reader.c:320 +#: reader.cpp:477 msgid "Could not set terminal mode for shell" -msgstr "Konnte Terminalmodus für neue Shell nicht festlegen" +msgstr "Konnte Terminalmodus für neue Shell nicht festlegen" -#: reader.c:1602 +#: reader.cpp:2133 +msgid "No TTY for interactive shell (tcgetpgrp failed)" +msgstr "" + +#: reader.cpp:2148 +#, c-format +msgid "" +"I appear to be an orphaned process, so I am quitting politely. My pid is %d." +msgstr "" + +#: reader.cpp:2179 msgid "Couldn't put the shell in its own process group" msgstr "Konnte Shell nicht in ihre eigene Prozessgruppe verschieben" -#: reader.c:1612 +#: reader.cpp:2189 msgid "Couldn't grab control of terminal" -msgstr "Konnte Terminalsteuerung nicht übernehmen" +msgstr "Konnte Terminalsteuerung nicht übernehmen" -#: reader.c:1644 -msgid "Could not set exit function" -msgstr "Konnte Ende-Funktion nicht festlegen" - -#: reader.c:2376 +#: reader.cpp:2703 msgid "Pop null reader block" msgstr "" -#: reader.c:2518 -msgid "There are stopped jobs\n" -msgstr "Es sind gestoppte Jobs vorhanden\n" +#: reader.cpp:2956 +msgid "" +"There are stopped jobs. A second attempt to exit will enforce their " +"termination.\n" +msgstr "" -#: reader.c:3034 +#: reader.cpp:4069 #, c-format msgid "Unknown keybinding %d" msgstr "Unbekannte Tastenkombination %d" -#: reader.c:3104 -msgid "Error while reading commands" +#: reader.cpp:4210 +#, fuzzy +msgid "Error while reading from file descriptor" msgstr "Fehler beim Lesen der Befehle" -#: reader.c:3123 +#: reader.cpp:4227 msgid "Error while closing input stream" -msgstr "Fehler beim Schließen des Eingabestroms" +msgstr "Fehler beim Schließen des Eingabestroms" -#: reader.c:3151 -#, c-format -msgid "Could not convert input. Read %d bytes." -msgstr "Konnte Eingabe nicht konvertieren. %d Bytes gelesen." - -#: reader.c:3157 -msgid "Could not read input stream" -msgstr "Konnte Eingabestrom nicht lesen" - -#: reader.c:3166 +#: reader.cpp:4248 msgid "Error while opening input stream" -msgstr "Fehler beim Öffnen des Eingabestroms" +msgstr "Fehler beim Öffnen des Eingabestroms" -#: sanity.c:34 -msgid "Errors detected, shutting down" +#: sanity.cpp:37 +#, fuzzy +msgid "Errors detected, shutting down. Break on sanity_lose() to debug." msgstr "Fehler gefunden, Programmabbruch" -#: sanity.c:62 +#: sanity.cpp:65 #, c-format msgid "The pointer '%ls' is invalid" -msgstr "Der Zeiger '%ls' ist ungültig" +msgstr "Der Zeiger '%ls' ist ungültig" -#: sanity.c:68 +#: sanity.cpp:71 #, c-format msgid "The pointer '%ls' is null" msgstr "Der Zeiger '%ls' ist null" -#: signal.c:55 +#: signal.cpp:69 msgid "Terminal hung up" msgstr "Terminal getrennt" -#: signal.c:61 +#: signal.cpp:77 msgid "Quit request from job control (^C)" -msgstr "Quit-Anforderung über Jobsteuerung (^C)" +msgstr "Quit-Anforderung über Jobsteuerung (^C)" -#: signal.c:67 +#: signal.cpp:85 msgid "Quit request from job control with core dump (^\\)" -msgstr "Quit-Anforderung über Jobsteuerung mit Speicherauszug (^\\)" +msgstr "Quit-Anforderung über Jobsteuerung mit Speicherauszug (^\\)" -#: signal.c:73 +#: signal.cpp:93 msgid "Illegal instruction" msgstr "Illegale Instruktion" -#: signal.c:79 +#: signal.cpp:101 msgid "Trace or breakpoint trap" msgstr "Verfolgungs- oder Haltepunkt erreicht" -#: signal.c:85 +#: signal.cpp:109 msgid "Abort" msgstr "Abbruch" -#: signal.c:91 +#: signal.cpp:117 msgid "Misaligned address error" msgstr "Fehler: nicht ausgerichtete Adresse" -#: signal.c:97 +#: signal.cpp:125 msgid "Floating point exception" -msgstr "Fließkomma-Ausnahmefehler" +msgstr "Fließkomma-Ausnahmefehler" -#: signal.c:103 +#: signal.cpp:133 msgid "Forced quit" msgstr "Erzwungene Beendigung" -#: signal.c:109 +#: signal.cpp:141 msgid "User defined signal 1" msgstr "Benutzerdefiniertes Signal 1" -#: signal.c:114 +#: signal.cpp:148 msgid "User defined signal 2" msgstr "Benutzerdefiniertes Signal 2" -#: signal.c:120 +#: signal.cpp:156 msgid "Address boundary error" msgstr "Adressbereichsfehler" -#: signal.c:126 +#: signal.cpp:164 msgid "Broken pipe" -msgstr "zerstörte Pipe" +msgstr "zerstörte Pipe" -#: signal.c:132 +#: signal.cpp:172 msgid "Timer expired" msgstr "Zeitgeber abgelaufen" -#: signal.c:138 +#: signal.cpp:180 msgid "Polite quit request" -msgstr "Höfliche Beendigungsanforderung" +msgstr "Höfliche Beendigungsanforderung" -#: signal.c:144 +#: signal.cpp:188 msgid "Child process status changed" -msgstr "Kindprozessstatus geändert" +msgstr "Kindprozessstatus geändert" -#: signal.c:150 +#: signal.cpp:196 msgid "Continue previously stopped process" msgstr "Vorher gestoppten Prozess fortsetzen" -#: signal.c:156 +#: signal.cpp:204 msgid "Forced stop" msgstr "Erzwungener Stopp" -#: signal.c:162 +#: signal.cpp:212 msgid "Stop request from job control (^Z)" -msgstr "Stoppanforderung über Jobsteuerung (^Z)" +msgstr "Stoppanforderung über Jobsteuerung (^Z)" -#: signal.c:168 +#: signal.cpp:220 msgid "Stop from terminal input" msgstr "Stopp durch Terminaleingabe" -#: signal.c:174 +#: signal.cpp:228 msgid "Stop from terminal output" msgstr "Stopp durch Terminalausgabe" -#: signal.c:180 +#: signal.cpp:236 msgid "Urgent socket condition" msgstr "Vorrangige Socket-Bedingung" -#: signal.c:186 +#: signal.cpp:244 msgid "CPU time limit exceeded" -msgstr "CPU-Zeitbegrenzung überschritten" +msgstr "CPU-Zeitbegrenzung überschritten" -#: signal.c:192 +#: signal.cpp:252 msgid "File size limit exceeded" -msgstr "Dateigrößenbegrenzung überschritten" +msgstr "Dateigrößenbegrenzung überschritten" -#: signal.c:198 +#: signal.cpp:260 msgid "Virtual timer expired" msgstr "Virtueller Zeitgeber abgelaufen" -#: signal.c:204 +#: signal.cpp:268 msgid "Profiling timer expired" msgstr "Profilierungszeitgeber abgelaufen" -#: signal.c:210 +#: signal.cpp:276 signal.cpp:284 msgid "Window size change" -msgstr "Änderung der Fenstergröße" +msgstr "Änderung der Fenstergröße" -#: signal.c:216 +#: signal.cpp:292 msgid "I/O on asynchronous file descriptor is possible" -msgstr "E/A auf asynchronem Dateideskriptor ist möglich" +msgstr "E/A auf asynchronem Dateideskriptor ist möglich" -#: signal.c:223 +#: signal.cpp:300 msgid "Power failure" msgstr "Stromausfall" -#: signal.c:230 +#: signal.cpp:308 msgid "Bad system call" msgstr "Fehlerhafter Systemaufruf" -#: tokenizer.c:28 -msgid "Unexpected end of token" +#: signal.cpp:316 +msgid "Information request" +msgstr "" + +#: signal.cpp:324 +msgid "Stack fault" +msgstr "" + +#: signal.cpp:332 +msgid "Emulator trap" +msgstr "" + +#: signal.cpp:340 +msgid "Abort (Alias for SIGABRT)" +msgstr "" + +#: signal.cpp:348 +#, fuzzy +msgid "Unused signal" +msgstr "Benutzerdefiniertes Signal 1" + +#: signal.cpp:684 +msgid "Signal block mismatch" +msgstr "" + +#: tokenizer.cpp:32 +#, fuzzy +msgid "Unexpected end of string, quotes are not balanced" msgstr "Unerwartetes Zeichenende" -#: tokenizer.c:32 -msgid "Parenthesis mismatch" -msgstr "Nicht passende Klammern" +#: tokenizer.cpp:37 +msgid "Unexpected end of string, parenthesis do not match" +msgstr "" -#: tokenizer.c:36 -msgid "Invalid redirection" -msgstr "Ungültige Umleitung" +#: tokenizer.cpp:42 +msgid "Unexpected end of string, square brackets do not match" +msgstr "" -#: tokenizer.c:40 -msgid "Invalid input" -msgstr "Ungültige Eingabe" +#: tokenizer.cpp:48 +#, fuzzy +msgid "Invalid input/output redirection" +msgstr "Ungültige Umleitung" -#: tokenizer.c:45 -msgid "Can not use fd 0 as pipe output" +#: tokenizer.cpp:53 +#, fuzzy +msgid "Cannot use stdin (fd 0) as pipe output" msgstr "Kann FD 0 nicht als Pipe-Ausgabe verwenden" -#: tokenizer.c:59 +#: tokenizer.cpp:65 msgid "Tokenizer not yet initialized" msgstr "Tokenizer noch nicht initialisiert" -#: tokenizer.c:60 +#: tokenizer.cpp:66 msgid "Tokenizer error" msgstr "Tokenizer-Fehler" -#: tokenizer.c:61 -msgid "Invalid token" -msgstr "Ungültiges Zeichen" - -#: tokenizer.c:62 +#: tokenizer.cpp:67 msgid "String" msgstr "Zeichenkette" -#: tokenizer.c:63 +#: tokenizer.cpp:68 msgid "Pipe" msgstr "Pipe" -#: tokenizer.c:64 +#: tokenizer.cpp:69 msgid "End of command" msgstr "Ende des Befehls" -#: tokenizer.c:65 +#: tokenizer.cpp:70 msgid "Redirect output to file" msgstr "Ausgabe auf Datei umleiten" -#: tokenizer.c:66 +#: tokenizer.cpp:71 msgid "Append output to file" -msgstr "Ausgabe an Datei anhängen" +msgstr "Ausgabe an Datei anhängen" -#: tokenizer.c:67 +#: tokenizer.cpp:72 msgid "Redirect input to file" msgstr "Eingabe auf Datei umleiten" -#: tokenizer.c:68 +#: tokenizer.cpp:73 msgid "Redirect to file descriptor" msgstr "Auf Dateideskriptor umleiten" -#: tokenizer.c:69 -msgid "Run job in background" -msgstr "Job im Hintergrund ausführen" +#: tokenizer.cpp:74 +#, fuzzy +msgid "Redirect output to file if file does not exist" +msgstr "Ausgabe auf Datei umleiten" -#: tokenizer.c:70 +#: tokenizer.cpp:75 +msgid "Run job in background" +msgstr "Job im Hintergrund ausführen" + +#: tokenizer.cpp:76 msgid "Comment" msgstr "Kommentar" -#: wildcard.c:291 -msgid "unknown" -msgstr "unbekannt" +#: tokenizer.cpp:602 +#, fuzzy +msgid "Invalid token type" +msgstr "Ungültiges Zeichen" -#: wildcard.c:295 -msgid "empty" -msgstr "leer" +#: wgetopt.cpp:536 +#, fuzzy, c-format +msgid "%ls: Option '%ls' is ambiguous\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" -#: builtin.h:23 +#: wgetopt.cpp:560 +#, fuzzy, c-format +msgid "%ls: Option '--%ls' doesn't allow an argument\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: wgetopt.cpp:565 +#, fuzzy, c-format +msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: wgetopt.cpp:579 +#, fuzzy, c-format +msgid "%ls: Option '%ls' requires an argument\n" +msgstr "%ls: Funktion '%ls' existiert nicht\n" + +#: wgetopt.cpp:607 +#, fuzzy, c-format +msgid "%ls: Unrecognized option '--%ls'\n" +msgstr "%ls: Unbekannte Option '%ls'\n" + +#: wgetopt.cpp:611 +#, fuzzy, c-format +msgid "%ls: Unrecognized option '%lc%ls'\n" +msgstr "%ls: Unbekannte Option '%ls'\n" + +#: wgetopt.cpp:636 +#, fuzzy, c-format +msgid "%ls: Illegal option -- %lc\n" +msgstr "%ls: Ungültiger Funktionsname '%ls'\n" + +#: wgetopt.cpp:638 +#, fuzzy, c-format +msgid "%ls: Invalid option -- %lc\n" +msgstr "%ls: Ungültige Prozesskennung %ls\n" + +#: wgetopt.cpp:673 +#, fuzzy, c-format +msgid "%ls: Option requires an argument -- %lc\n" +msgstr "%ls: Erwartete ein Argument, erhielt %d\n" + +#: wildcard.cpp:58 +msgid "Executable" +msgstr "Programm" + +#: wildcard.cpp:62 +msgid "Executable link" +msgstr "Programmlink" + +#: wildcard.cpp:67 share/completions/git.fish:146 +msgid "File" +msgstr "Datei" + +#: wildcard.cpp:71 +msgid "Character device" +msgstr "zeichenorientiertes Gerät" + +#: wildcard.cpp:75 +msgid "Block device" +msgstr "blockorientiertes Gerät" + +#: wildcard.cpp:79 +msgid "Fifo" +msgstr "Fifo" + +#: wildcard.cpp:83 +msgid "Symbolic link" +msgstr "Symbolischer Link" + +#: wildcard.cpp:87 +#, fuzzy +msgid "Symbolic link to directory" +msgstr "Schleife bei symbolischem Link" + +#: wildcard.cpp:91 +msgid "Rotten symbolic link" +msgstr "zerstörter symbolischer Link" + +#: wildcard.cpp:95 +msgid "Symbolic link loop" +msgstr "Schleife bei symbolischem Link" + +#: wildcard.cpp:99 +msgid "Socket" +msgstr "Socket" + +#: wildcard.cpp:103 share/completions/ruby.fish:23 +#: share/functions/__fish_complete_directories.fish:8 +msgid "Directory" +msgstr "Verzeichnis" + +#: builtin.h:27 #, c-format msgid "%ls: Expected argument\n" msgstr "%ls: Argument erwartet\n" -#: builtin.h:33 +#: builtin.h:37 #, c-format msgid "" "%ls: Invalid combination of options,\n" "%ls\n" msgstr "" -"%ls: Ungültige Kombination von Optionen,\n" +"%ls: Ungültige Kombination von Optionen,\n" "%ls\n" -#: builtin.h:38 -#, c-format -msgid "" -"%ls: Variable scope can only be one of universal, global and local\n" -"%ls\n" +#: builtin.h:42 +#, fuzzy, c-format +msgid "%ls: Variable scope can only be one of universal, global and local\n" msgstr "" "%ls: Variablenbereich kann nur universell, global oder lokal sein\n" "%ls\n" -#: builtin.h:43 -#, c-format -msgid "" -"%ls: Variable can't be both exported and unexported\n" -"%ls\n" +#: builtin.h:47 +#, fuzzy, c-format +msgid "%ls: Variable can't be both exported and unexported\n" msgstr "" "%ls: Variable kann nicht gleichzeitig exportiert und nicht exportiert sein\n" "%ls\n" -#: builtin.h:48 +#: builtin.h:52 #, c-format msgid "%ls: Unknown option '%ls'\n" msgstr "%ls: Unbekannte Option '%ls'\n" -#: builtin.h:50 +#: builtin.h:57 #, c-format msgid "" -"%ls: Invalid character '%lc' in variable name. Only alphanumerical characters " -"and underscores are valid in a variable name.\n" +"%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" +"%ls: Ungültiges Zeichen '%lc' im Variablenname. Nur alphanumerische Zeichen " +"und Unterstriche sind in einem Variablennamen gültig.\n" -#: builtin.h:52 +#: builtin.h:62 #, c-format msgid "%ls: Variable name can not be the empty string\n" msgstr "%ls: Variablenname kann nicht leer sein\n" -#: exec.h:19 +#: builtin.h:67 +#, c-format +msgid "%ls: Second argument must be 'in'\n" +msgstr "%ls: Zweites Argument muss 'in' sein'\n" + +#: builtin.h:72 +#, fuzzy, c-format +msgid "%ls: Expected at least two arguments, got %d\n" +msgstr "%ls: Erwartete mindestens zwei Argumente\n" + +#: builtin.h:74 +#, c-format +msgid "%ls: '%ls' is not a valid variable name\n" +msgstr "%ls: '%ls' ist kein gültiger Variablenname\n" + +#: builtin.h:77 +#, c-format +msgid "%ls: can only take 'if' and then another command as an argument\n" +msgstr "" + +#: builtin.h:78 +#, fuzzy, c-format +msgid "%ls: any second argument must be 'if'\n" +msgstr "%ls: Zweites Argument muss 'in' sein'\n" + +#: builtin.h:88 +#, c-format +msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" +msgstr "" + +#: builtin.h:93 +#, fuzzy, c-format +msgid "%ls: Unknown block type '%ls'\n" +msgstr "%ls: Unbekannter Job '%ls'\n" + +#: builtin.h:95 +#, fuzzy, c-format +msgid "%ls: Argument '%ls' is not a number\n" +msgstr "%ls: Argument '%ls' muss eine Ganzzahl sein\n" + +#: exec.h:21 msgid "An error occurred while setting up pipe" msgstr "Fehler beim Einrichten der Pipe aufgetreten" -#: init/fish_complete.fish.in:184 init/fish_complete.fish:184 -#: init/completions/apropos.fish:11 init/completions/apt-build.fish:3 -#: init/completions/apt-cache.fish:2 init/completions/apt-cdrom.fish:2 -#: init/completions/apt-config.fish:2 -#: init/completions/apt-extracttemplates.fish:3 -#: init/completions/apt-file.fish:2 init/completions/apt-ftparchive.fish:2 -#: init/completions/apt-get.fish:23 init/completions/apt-listbugs.fish:2 -#: init/completions/apt-listchanges.fish:2 -#: init/completions/apt-proxy-import.fish:2 -#: init/completions/apt-rdepends.fish:2 -#: init/completions/apt-show-source.fish:2 -#: init/completions/apt-show-versions.fish:2 -#: init/completions/apt-sortpkgs.fish:2 init/completions/apt-spy.fish:2 -#: init/completions/apt-src.fish:2 init/completions/apt-zip-inst.fish:2 -#: init/completions/apt-zip-list.fish:2 init/completions/bc.fish:9 -#: init/completions/cat.fish:10 init/completions/chgrp.fish:10 -#: init/completions/chown.fish:9 init/completions/complete.fish:13 -#: init/completions/configure.fish:1 init/completions/cut.fish:8 -#: init/completions/date.fish:9 init/completions/df.fish:33 -#: init/completions/diff.fish:26 init/completions/du.fish:18 -#: init/completions/echo.fish:4 init/completions/fish.fish:2 -#: init/completions/functions.fish:4 init/completions/gpg.fish:108 -#: init/completions/gprof.fish:31 init/completions/grep.fish:23 -#: init/completions/gunzip.fish:8 init/completions/gzip.fish:10 -#: init/completions/id.fish:6 init/completions/less.fish:1 -#: init/completions/ls.fish:88 init/completions/man.fish:56 -#: init/completions/mimedb.fish:8 init/completions/mount.fish:47 -#: init/completions/mplayer.fish:30 init/completions/mplayer.fish:35 -#: init/completions/mplayer.fish:82 init/completions/mv.fish:10 -#: init/completions/nice.fish:3 init/completions/pine.fish:3 -#: init/completions/ps.fish:35 init/completions/python.fish:4 -#: init/completions/read.fish:1 init/completions/rmdir.fish:6 -#: init/completions/rm.fish:8 init/completions/rpm.fish:4 -#: init/completions/ruby.fish:8 init/completions/sed.fish:27 -#: init/completions/set.fish:68 init/completions/sort.fish:19 -#: init/completions/su.fish:10 init/completions/test.fish:2 -#: init/completions/tex.fish:2 init/completions/top.fish:5 -#: init/completions/touch.fish:10 init/completions/trap.fish:4 -#: init/completions/type.fish:2 init/completions/ulimit.fish:13 -#: init/completions/umount.fish:16 init/completions/uname.fish:10 -#: init/completions/uniq.fish:13 init/completions/valgrind.fish:24 -#: init/completions/vared.fish:2 init/completions/wc.fish:6 -#: init/completions/wget.fish:6 init/completions/who.fish:18 -#: init/completions/xprop.fish:2 init/completions/xsel.fish:16 -#: init/completions/yum.fish:49 init/completions/zcat.fish:7 -#: init/completions/zip.fish:31 -msgid "Display help and exit" -msgstr "Hilfe anzeigen und beenden" +#: expand.h:132 +msgid "Array index out of bounds" +msgstr "" -#: init/fish_complete.fish.in:203 init/fish_complete.fish:203 -#: init/completions/apt-get.fish:21 -msgid "Package" -msgstr "Paket" - -#: init/fish_complete.fish.in:292 init/fish_complete.fish:292 -msgid "Start service" -msgstr "Dienst starten" - -#: init/fish_complete.fish.in:293 init/fish_complete.fish:293 -msgid "Stop service" -msgstr "Dienst anhalten" - -#: init/fish_complete.fish.in:294 init/fish_complete.fish:294 -msgid "Print service state" -msgstr "Dienststatus ausgeben" - -#: init/fish_complete.fish.in:295 init/fish_complete.fish:295 -msgid "Stop and then start service" -msgstr "Stoppe und starte Dienst" - -#: init/fish_complete.fish.in:296 init/fish_complete.fish:296 -msgid "Reload service configuration" -msgstr "Dienstkonfiguration neu laden" - -#: init/fish.in:74 -msgid "-d" -msgstr "-d" - -#: init/fish.in:75 -msgid "fish" -msgstr "fish" - -#: init/fish_interactive.fish.in:13 init/fish_interactive.fish:13 -msgid "Welcome to fish, the friendly interactive shell" -msgstr "Willkommen zu fish, der freundlichen interaktiven Shell" - -#: init/fish_interactive.fish.in:14 init/fish_interactive.fish:14 -msgid "Type %shelp%s for instructions on how to use fish" -msgstr "Anweisungen zur fish-Benutzung erhalten Sie über %shelp%s" - -#: init/fish_interactive.fish.in:20 init/fish_interactive.fish:20 -msgid "Commands to execute when fish exits" -msgstr "Beim Ende von fish auszuführende Befehle" - -#: init/fish_interactive.fish.in:21 init/fish_interactive.fish:21 -msgid "Good bye\\n" -msgstr "Auf Wiedersehen\\n" - -#: init/fish_interactive.fish.in:28 init/fish_interactive.fish:28 -msgid "Write out the prompt" -msgstr "Prompt ausgeben" - -#: init/fish_function.fish:58 -msgid "%s: Key not specified\\n" -msgstr "%s: Schlüssel nicht angegeben\\n" - -#: init/fish_function.fish:130 -msgid "%s: Could not find a web browser.\\n" -msgstr "Konnte keinen Webbrowser finden.\\n" - -#: init/fish_function.fish:131 -#, sh-format +#: output.h:91 +#, c-format msgid "" -"Please set the variable $BROWSER to a suitable browser and try again\\n\\n" +"Tried to use terminfo string %s on line %d of %s, which is undefined in " +"terminal of type \"%ls\". Please report this error to %s" msgstr "" -"Legen Sie bitte die Variable $BROWSER auf einen passenden Browser fest" -"und versuchen Sie es erneut\\n\\n" -#: init/fish_function.fish:273 +#: parse_constants.h:145 +#, c-format msgid "" -"vared: %s is an array variable. Use %svared%s %s[n] to edit the n:th element " -"of %s\\n" +"The function '%ls' calls itself immediately, which would result in an " +"infinite loop." 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 +#: parse_constants.h:149 msgid "" -"vared: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " -"VARIABLE\\n" +"The function call stack limit has been exceeded. Do you have an accidental " +"infinite loop?" 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" -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" +#: parse_constants.h:152 +#, fuzzy +msgid "" +"Expected a command, but instead found a pipe. Did you mean 'COMMAND; or " +"COMMAND'? See the help section for the 'or' builtin command by typing 'help " +"or'." msgstr "" -"Anzahl zu überspringender Positionen muss eine positive Ganzzahl sein\\n" +"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." -#: init/fish_function.fish:775 -msgid "%s is a function with definition\\n" -msgstr "%s ist eine Funktion mit der Definition\\n" +#: parse_constants.h:155 +#, fuzzy +msgid "" +"Expected a command, but instead found a '&'. Did you mean 'COMMAND; and " +"COMMAND'? See the help section for the 'and' builtin command 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." -#: init/fish_function.fish:779 -msgid "function" -msgstr "Funktion" +#: parse_constants.h:161 +#, fuzzy, c-format +msgid "Unable to expand variable name '%ls'" +msgstr "%ls: Ungültiger Variablenname '%ls'\n" -#: init/fish_function.fish:795 -msgid "%s is a builtin\\n" -msgstr "%s ist ein eingebauter Befehl\\n" +#: parse_constants.h:170 +#, fuzzy +msgid "break command while not inside of loop" +msgstr "Schleifensteuerungsbefehl 'while' nicht innerhalb einer Schleife" -#: init/fish_function.fish:798 -msgid "builtin\\n" -msgstr "eingebauter Befehl\\n" +#: parse_constants.h:173 +#, fuzzy +msgid "continue command while not inside of loop" +msgstr "Schleifensteuerungsbefehl 'while' nicht innerhalb einer Schleife" -#: init/fish_function.fish:815 -msgid "%s is %s\\n" -msgstr "%s ist %s\\n" +#: parse_constants.h:184 +#, c-format +msgid "" +"The '$' character begins a variable name. The character '%lc', which " +"directly followed a '$', is not allowed as a part of a variable name, and " +"variable names may not be zero characters long. To learn more about variable " +"expansion in fish, type 'help expand-variable'." +msgstr "" -#: init/fish_function.fish:818 -msgid "file" -msgstr "Datei" +#: parse_constants.h:189 +msgid "" +"$? is not a valid variable in fish. If you want the exit status of the last " +"command, try $status." +msgstr "" -#: init/fish_function.fish:829 -msgid "%s: Could not find '%s'" -msgstr "%s: Konnte '%s' nicht finden" +#: parse_constants.h:194 +msgid "" +"The '$' begins a variable name. It was given at the end of an argument. " +"Variable names may not be zero characters long. To learn more about variable " +"expansion in fish, type 'help expand-variable'." +msgstr "" -#: init/fish_function.fish:845 -msgid "%s: Invalid mask '%s'\\n" -msgstr "%s: Ungültige Maske '%s'\\n" +#: parse_constants.h:199 +#, c-format +msgid "" +"Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A " +"bracket, which directly followed a '$', is not allowed as a part of a " +"variable name, and variable names may not be zero characters long. To learn " +"more about variable expansion in fish, type 'help expand-variable'." +msgstr "" -#: init/fish_function.fish:1032 -msgid "%s: Too many arguments\\n" -msgstr "%s: Zu viele Argumente\\n" +#: parse_constants.h:204 +msgid "" +"Did you mean (COMMAND)? In fish, the '$' character is only used for " +"accessing variables. To learn more about command substitution in fish, type " +"'help expand-command-substitution'." +msgstr "" -#: init/fish_function.fish:1052 -msgid "%s: Unknown argument '%s'\\n" -msgstr "%s: Unbekanntes Argument '%s'\\n" +#: share/completions/adb.fish:3 +#, fuzzy +msgid "Test if adb has yet to be given the subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/apm.fish:2 init/completions/apropos.fish:20 -#: init/completions/apt-build.fish:29 init/completions/apt-cache.fish:28 -#: init/completions/apt-cdrom.fish:11 init/completions/apt-config.fish:5 -#: init/completions/apt-file.fish:12 init/completions/apt-ftparchive.fish:15 -#: init/completions/apt-get.fish:61 init/completions/apt-proxy-import.fish:3 -#: init/completions/apt-rdepends.fish:12 -#: init/completions/apt-show-source.fish:8 -#: init/completions/apt-sortpkgs.fish:4 init/completions/apt-zip-inst.fish:3 -#: init/completions/apt-zip-list.fish:3 init/completions/at.fish:2 -#: init/completions/atq.fish:2 init/completions/atrm.fish:2 -#: init/completions/bc.fish:8 init/completions/bunzip2.fish:15 -#: init/completions/bzip2.fish:17 init/completions/cat.fish:11 -#: init/completions/chgrp.fish:11 init/completions/chown.fish:10 -#: init/completions/configure.fish:2 init/completions/cut.fish:9 -#: init/completions/cvs.fish:33 init/completions/cvs.fish:44 -#: init/completions/date.fish:10 init/completions/df.fish:34 -#: init/completions/diff.fish:25 init/completions/du.fish:19 -#: init/completions/echo.fish:5 init/completions/fish.fish:3 -#: init/completions/gprof.fish:32 init/completions/grep.fish:43 -#: init/completions/gunzip.fish:18 init/completions/gzip.fish:20 -#: init/completions/id.fish:7 init/completions/less.fish:41 -#: init/completions/ls.fish:89 init/completions/make.fish:26 -#: init/completions/mimedb.fish:9 init/completions/modprobe.fish:14 -#: init/completions/mount.fish:46 init/completions/mplayer.fish:83 -#: init/completions/mv.fish:11 init/completions/nice.fish:4 -#: init/completions/perl.fish:18 init/completions/ping.fish:27 -#: init/completions/ps.fish:34 init/completions/python.fish:12 -#: init/completions/rmdir.fish:7 init/completions/rm.fish:9 -#: init/completions/rpm.fish:5 init/completions/ruby.fish:21 -#: init/completions/sed.fish:28 init/completions/sort.fish:20 -#: init/completions/su.fish:11 init/completions/tar.fish:51 -#: init/completions/test.fish:3 init/completions/tex.fish:3 -#: init/completions/top.fish:13 init/completions/touch.fish:11 -#: init/completions/umount.fish:15 init/completions/uname.fish:11 -#: init/completions/uniq.fish:14 init/completions/valgrind.fish:26 -#: init/completions/wc.fish:7 init/completions/w.fish:5 -#: init/completions/wget.fish:5 init/completions/who.fish:19 -#: init/completions/xsel.fish:18 init/completions/yum.fish:57 -#: init/completions/zcat.fish:9 +#: share/completions/adb.fish:12 +msgid "Run adb devices and parse output" +msgstr "" + +#: share/completions/adb.fish:24 +msgid "Runs adb with any -s parameters already given on the command line" +msgstr "" + +#: share/completions/apm.fish:2 share/completions/apropos.fish:20 +#: share/completions/apt-build.fish:29 share/completions/apt-cache.fish:28 +#: share/completions/apt-cdrom.fish:11 share/completions/apt-config.fish:5 +#: share/completions/apt-file.fish:12 share/completions/apt-ftparchive.fish:15 +#: share/completions/apt-proxy-import.fish:3 +#: share/completions/apt-rdepends.fish:12 +#: share/completions/apt-show-source.fish:8 +#: share/completions/apt-sortpkgs.fish:4 share/completions/apt-zip-inst.fish:3 +#: share/completions/apt-zip-list.fish:3 share/completions/at.fish:2 +#: share/completions/atq.fish:2 share/completions/atrm.fish:2 +#: share/completions/perl.fish:41 share/functions/__fish_complete_diff.fish:26 +#: share/functions/__fish_complete_grep.fish:44 +#: share/functions/__fish_complete_ls.fish:96 +#: share/functions/__fish_complete_python.fish:15 +#: share/functions/__fish_complete_tex.fish:5 msgid "Display version and exit" msgstr "Version anzeigen und beenden" -#: init/completions/apm.fish:3 +#: share/completions/apm.fish:3 msgid "Print APM info" msgstr "APM-Informationen ausgeben" -#: init/completions/apm.fish:4 +#: share/completions/apm.fish:4 msgid "Print time remaining" msgstr "Verbleibende Zeit ausgeben" -#: init/completions/apm.fish:5 +#: share/completions/apm.fish:5 msgid "Monitor status info" msgstr "Statusinformation beobachten" -#: init/completions/apm.fish:6 +#: share/completions/apm.fish:6 msgid "Request APM standby mode" msgstr "APM-Standby-Modus anfordern" -#: init/completions/apm.fish:7 +#: share/completions/apm.fish:7 msgid "Request APM suspend mode" msgstr "APM-Suspend-Modus anfordern" -#: init/completions/apm.fish:8 +#: share/completions/apm.fish:8 msgid "APM status debugging info" msgstr "APM-Status Debug-Informationen" -#: init/completions/apropos.fish:9 -msgid "whatis entry" -msgstr "whatis-Eintrag" - -#: init/completions/apropos.fish:12 +#: share/completions/apropos.fish:12 msgid "Print debugging info" msgstr "Debug-Informationen ausgeben" -#: init/completions/apropos.fish:13 init/completions/apt-file.fish:8 -#: init/completions/apt-listchanges.fish:4 -#: init/completions/apt-proxy-import.fish:4 -#: init/completions/apt-show-source.fish:10 init/completions/arp.fish:2 -#: init/completions/darcs.fish:64 init/completions/darcs.fish:148 -#: init/completions/darcs.fish:160 init/completions/darcs.fish:166 -#: init/completions/makedepend.fish:11 init/completions/mount.fish:48 -#: init/completions/mv.fish:9 init/completions/ping.fish:26 -#: init/completions/python.fish:11 init/completions/rmdir.fish:5 -#: init/completions/rpm.fish:7 init/completions/ruby.fish:19 -#: init/completions/ssh.fish:61 init/completions/tar.fish:49 -#: init/completions/umount.fish:17 init/completions/valgrind.fish:28 -#: init/completions/wget.fish:13 init/completions/zip.fish:14 +#: share/completions/apropos.fish:13 share/completions/apt-file.fish:8 +#: share/completions/apt-listchanges.fish:4 +#: share/completions/apt-proxy-import.fish:4 +#: share/completions/apt-show-source.fish:10 +#: share/functions/__fish_complete_python.fish:14 +#: share/functions/__fish_complete_ssh.fish:59 +#: share/functions/__fish_complete_vi.fish:98 msgid "Verbose mode" -msgstr "Ausführlicher Modus" +msgstr "Ausführlicher Modus" -#: init/completions/apropos.fish:14 +#: share/completions/apropos.fish:14 msgid "Keyword as regex" -msgstr "Schlüsselwort als regulärer Ausdruck" +msgstr "Schlüsselwort als regulärer Ausdruck" -#: init/completions/apropos.fish:15 -msgid "Keyword as wildwards" -msgstr "Schlüsselwort als Muster" +#: share/completions/apropos.fish:15 +#, fuzzy +msgid "Keyword as wildcards" +msgstr "Schlüsselwort als Muster" -#: init/completions/apropos.fish:16 +#: share/completions/apropos.fish:16 msgid "Keyword as exactly match" -msgstr "Schlüsselwort als genaue Übereinstimmung" +msgstr "Schlüsselwort als genaue Ãœbereinstimmung" -#: init/completions/apropos.fish:17 +#: share/completions/apropos.fish:17 msgid "Search for other system" msgstr "Nach anderem System suchen" -#: init/completions/apropos.fish:18 +#: share/completions/apropos.fish:18 msgid "Specify man path" msgstr "Man-Pfad angeben" -#: init/completions/apropos.fish:19 +#: share/completions/apropos.fish:19 msgid "Specify a configuration file" msgstr "Eine Konfigurationsdatei angeben" -#: init/completions/apt-build.fish:4 +#: share/completions/apt-build.fish:4 msgid "Update list of packages" msgstr "Paketliste aktualisieren" -#: init/completions/apt-build.fish:5 +#: share/completions/apt-build.fish:5 msgid "Upgrade packages" msgstr "Pakete aktualisieren" -#: init/completions/apt-build.fish:6 +#: share/completions/apt-build.fish:6 msgid "Rebuild your system" msgstr "Ihr Sytem neu erstellen" -#: init/completions/apt-build.fish:7 +#: share/completions/apt-build.fish:7 msgid "Build and install a new package" msgstr "Ein neues Paket erstellen und installieren" -#: init/completions/apt-build.fish:8 +#: share/completions/apt-build.fish:8 msgid "Download and extract a source" msgstr "Eine Quelle herunterladen und extrahieren" -#: init/completions/apt-build.fish:9 +#: share/completions/apt-build.fish:9 msgid "Info on a package" -msgstr "Informationen über ein Paket" +msgstr "Informationen über ein Paket" -#: init/completions/apt-build.fish:10 +#: share/completions/apt-build.fish:10 share/completions/zypper.fish:45 msgid "Remove packages" msgstr "Pakete entfernen" -#: init/completions/apt-build.fish:11 +#: share/completions/apt-build.fish:11 msgid "Erase built packages" -msgstr "Erstellte Pakete löschen" +msgstr "Erstellte Pakete löschen" -#: init/completions/apt-build.fish:12 +#: share/completions/apt-build.fish:12 msgid "Build source without install" msgstr "Quelle ohne Installation erstellen" -#: init/completions/apt-build.fish:13 +#: share/completions/apt-build.fish:13 msgid "Clean source directories" msgstr "Quellverzeichnisse bereinigen" -#: init/completions/apt-build.fish:14 +#: share/completions/apt-build.fish:14 msgid "Update source and rebuild" msgstr "Quelle aktualisieren und erneut erstellen" -#: init/completions/apt-build.fish:15 +#: share/completions/apt-build.fish:15 msgid "Update the repository" msgstr "Paketdepot aktualisieren" -#: init/completions/apt-build.fish:16 +#: share/completions/apt-build.fish:16 msgid "Do not use gcc wrapper" msgstr "Nicht die gcc-Ummantelung benutzen" -#: init/completions/apt-build.fish:17 +#: share/completions/apt-build.fish:17 msgid "Remove build-dep" -msgstr "Erstellungsabhängigkeiten entfernen" +msgstr "Erstellungsabhängigkeiten entfernen" -#: init/completions/apt-build.fish:18 +#: share/completions/apt-build.fish:18 msgid "Do not download source" msgstr "Quelle nicht herunterladen" -#: init/completions/apt-build.fish:19 +#: share/completions/apt-build.fish:19 msgid "Specify build-dir" msgstr "Erstellungsverzeichnis angeben" -#: init/completions/apt-build.fish:20 +#: share/completions/apt-build.fish:20 msgid "Rebuild a package" msgstr "Ein Paket neu erstellen" -#: init/completions/apt-build.fish:21 +#: share/completions/apt-build.fish:21 msgid "Rebuild and install an installed package" msgstr "Ein installiertes Paket neu erstellen und installieren" -#: init/completions/apt-build.fish:22 -msgid "Use to build" -msgstr "Benutze zur Erstellung" - -#: init/completions/apt-build.fish:23 +#: share/completions/apt-build.fish:23 msgid "Apply patch" msgstr "-Patch anwenden" -#: init/completions/apt-build.fish:24 -msgid "Prefix to strip on patch" -msgstr "Präfix zum Entfernen des Patch" - -#: init/completions/apt-build.fish:25 init/completions/apt-listbugs.fish:21 -#: init/completions/yum.fish:50 -msgid "Assume yes to all questions" -msgstr "Bei allen Fragen ja annehmen" - -#: init/completions/apt-build.fish:26 init/completions/apt-get.fish:50 -msgid "Use purge instead of remove" -msgstr "purge anstelle von remove verwenden" - -#: init/completions/apt-build.fish:27 -msgid "Do not run update" -msgstr "Aktualisierung nicht durchführen" - -#: init/completions/apt-build.fish:28 +#: share/completions/apt-build.fish:28 msgid "Specify sources.list file" msgstr "Sources.list-Datei angeben" -#: init/completions/apt-cache.fish:3 +#: share/completions/apt-cache.fish:3 msgid "Build apt cache" msgstr "Apt-Zwischenspeicher erstellen" -#: init/completions/apt-cache.fish:4 +#: share/completions/apt-cache.fish:4 msgid "Show package info" msgstr "Paketinformation anzeigen" -#: init/completions/apt-cache.fish:5 +#: share/completions/apt-cache.fish:5 msgid "Show cache statistics" msgstr "Zwischenspeicherstatistik anzeigen" -#: init/completions/apt-cache.fish:6 +#: share/completions/apt-cache.fish:6 msgid "Show source package" msgstr "Quellpaket anzeigen" -#: init/completions/apt-cache.fish:7 +#: share/completions/apt-cache.fish:7 msgid "Show packages in cache" msgstr "Pakete im Zwischenspeicher anzeigen" -#: init/completions/apt-cache.fish:8 +#: share/completions/apt-cache.fish:8 msgid "Print available list" -msgstr "Verfügbare Liste ausgeben" +msgstr "Verfügbare Liste ausgeben" -#: init/completions/apt-cache.fish:9 +#: share/completions/apt-cache.fish:9 msgid "List unmet dependencies in cache" -msgstr "Nicht aufgelöste Abhängigkeiten im Zwischenspeicher auflisten" +msgstr "Nicht aufgelöste Abhängigkeiten im Zwischenspeicher auflisten" -#: init/completions/apt-cache.fish:10 +#: share/completions/apt-cache.fish:10 msgid "Display package record" msgstr "Paketsatz anzeigen" -#: init/completions/apt-cache.fish:11 +#: share/completions/apt-cache.fish:11 msgid "Search packagename by REGEX" -msgstr "Paketname mittels regulärem Ausdruck suchen" +msgstr "Paketname mittels regulärem Ausdruck suchen" -#: init/completions/apt-cache.fish:12 -msgid "Search full package name" -msgstr "Vollständigen Paketnamen suchen" - -#: init/completions/apt-cache.fish:13 +#: share/completions/apt-cache.fish:13 msgid "Search packagename only" msgstr "Nur Paketname suchen" -#: init/completions/apt-cache.fish:14 +#: share/completions/apt-cache.fish:14 msgid "List dependencies for the package" -msgstr "Abhängigkeiten für dieses Paket auflisten" +msgstr "Abhängigkeiten für dieses Paket auflisten" -#: init/completions/apt-cache.fish:15 +#: share/completions/apt-cache.fish:15 msgid "List reverse dependencies for the package" -msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" +msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" -#: init/completions/apt-cache.fish:16 +#: share/completions/apt-cache.fish:16 msgid "Print package name by prefix" -msgstr "Paketname nach Präfix ausgeben" +msgstr "Paketname nach Präfix ausgeben" -#: init/completions/apt-cache.fish:17 +#: share/completions/apt-cache.fish:17 msgid "Generate dotty output for packages" -msgstr "Punktierte Ausgabe für Pakete erzeugen" +msgstr "Punktierte Ausgabe für Pakete erzeugen" -#: init/completions/apt-cache.fish:18 +#: share/completions/apt-cache.fish:18 msgid "Debug preferences file" -msgstr "Einstellungsdatei prüfen" +msgstr "Einstellungsdatei prüfen" -#: init/completions/apt-cache.fish:19 +#: share/completions/apt-cache.fish:19 msgid "Select file to store package cache" -msgstr "Datei zum Speichern des Paketzwischenspeichers auswählen" +msgstr "Datei zum Speichern des Paketzwischenspeichers auswählen" -#: init/completions/apt-cache.fish:20 +#: share/completions/apt-cache.fish:20 msgid "Select file to store source cache" -msgstr "Datei zum Speichern des Quellenzwischenspeichers auswä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 -#: init/completions/gpg.fish:130 init/completions/make.fish:23 -#: init/completions/ping.fish:17 init/completions/rpm.fish:6 -#: init/completions/ssh.fish:98 init/completions/valgrind.fish:27 -#: init/completions/wget.fish:12 init/completions/zip.fish:13 +#: share/completions/apt-cache.fish:21 +#: share/completions/apt-ftparchive.fish:10 msgid "Quiet mode" msgstr "Stiller Modus" -#: init/completions/apt-cache.fish:22 +#: share/completions/apt-cache.fish:22 msgid "Print important dependencies" -msgstr "Wichtige Abhängigkeiten ausgeben" +msgstr "Wichtige Abhängigkeiten ausgeben" -#: init/completions/apt-cache.fish:23 +#: share/completions/apt-cache.fish:23 msgid "Print full records" -msgstr "Vollständige Datensätze ausgeben" +msgstr "Vollständige Datensätze ausgeben" -#: init/completions/apt-cache.fish:24 +#: share/completions/apt-cache.fish:24 msgid "Auto-gen package cache" msgstr "Paketcache automatisch generieren" -#: init/completions/apt-cache.fish:25 +#: share/completions/apt-cache.fish:25 msgid "Print all names" msgstr "Alle Namen ausgeben" -#: init/completions/apt-cache.fish:26 +#: share/completions/apt-cache.fish:26 msgid "Dep and rdep recursive" msgstr "Dep und rdep rekursiv" -#: init/completions/apt-cache.fish:27 +#: share/completions/apt-cache.fish:27 msgid "Limit to installed" msgstr "Auf Installierte begrenzen" -#: init/completions/apt-cache.fish:29 init/completions/apt-cdrom.fish:12 -#: init/completions/apt-config.fish:6 +#: share/completions/apt-cache.fish:29 share/completions/apt-cdrom.fish:12 +#: share/completions/apt-config.fish:6 msgid "Specify config file" msgstr "Konfigurationsdatei angeben" -#: init/completions/apt-cache.fish:30 init/completions/apt-cdrom.fish:13 -#: init/completions/apt-config.fish:7 -#: init/completions/apt-extracttemplates.fish:6 -#: init/completions/apt-zip-list.fish:10 +#: share/completions/apt-cache.fish:30 share/completions/apt-cdrom.fish:13 +#: share/completions/apt-config.fish:7 +#: share/completions/apt-extracttemplates.fish:6 msgid "Specify options" msgstr "Optionen angeben" -#: init/completions/apt-cdrom.fish:3 -msgid "Add new disc to source list" -msgstr "Neue Platte zur Quellenliste hinzufügen" +#: share/completions/apt-cache.fish:32 share/completions/apt-get.fish:12 +#: share/completions/apt-mark.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-cdrom.fish:4 +#: share/completions/apt-cdrom.fish:3 +msgid "Add new disc to source list" +msgstr "Neue Platte zur Quellenliste hinzufügen" + +#: share/completions/apt-cdrom.fish:4 msgid "Report identity of disc" msgstr "Kennung der Platte anzeigen" -#: init/completions/apt-cdrom.fish:5 init/completions/mount.fish:45 -#: init/completions/umount.fish:13 +#: share/completions/apt-cdrom.fish:5 share/completions/mount.fish:7 msgid "Mount point" -msgstr "Einhängepunkt" +msgstr "Einhängepunkt" -#: init/completions/apt-cdrom.fish:6 +#: share/completions/apt-cdrom.fish:6 msgid "Rename a disc" msgstr "Eine Platte umbenennen" -#: init/completions/apt-cdrom.fish:7 +#: share/completions/apt-cdrom.fish:7 msgid "No mounting" -msgstr "Nicht einhängen" +msgstr "Nicht einhängen" -#: init/completions/apt-cdrom.fish:8 +#: share/completions/apt-cdrom.fish:8 msgid "Fast copy" msgstr "Schnelle Kopie" -#: init/completions/apt-cdrom.fish:9 +#: share/completions/apt-cdrom.fish:9 msgid "Thorough package scan" -msgstr "Gründlicher Paketscan" +msgstr "Gründlicher Paketscan" -#: init/completions/apt-cdrom.fish:10 +#: share/completions/apt-cdrom.fish:10 msgid "No changes" -msgstr "Keine Änderungen" +msgstr "Keine Änderungen" -#: init/completions/apt-config.fish:3 -msgid "Access config file from shell" -msgstr "Über die Shell auf Konfigurationsdatei zugreifen" - -#: init/completions/apt-config.fish:4 +#: share/completions/apt-config.fish:4 msgid "Dump contents of config file" msgstr "Inhalt der Konfigurationsdatei ausgeben" -#: init/completions/apt-extracttemplates.fish:4 +#: share/completions/apt-extracttemplates.fish:4 msgid "Set temp dir" msgstr "temp-Verzeichnis festlegen" -#: init/completions/apt-extracttemplates.fish:5 +#: share/completions/apt-extracttemplates.fish:5 msgid "Specifiy config file" msgstr "Konfigurationsdatei angeben" -#: init/completions/apt-file.fish:3 +#: share/completions/apt-file.fish:3 msgid "Resync package contents from source" msgstr "Paketinhalte aus der Quelle neu synchronisieren" -#: init/completions/apt-file.fish:4 +#: share/completions/apt-file.fish:4 msgid "Search package containing pattern" msgstr "Paket entsprechend Muster suchen" -#: init/completions/apt-file.fish:5 +#: share/completions/apt-file.fish:5 msgid "List contents of a package matching pattern" msgstr "Inhalte eines Paketes auflisten, das dem Muster entspricht" -#: init/completions/apt-file.fish:6 +#: share/completions/apt-file.fish:6 msgid "Remove all gz files from cache" msgstr "Alle gz-Dateien aus dem Zwischenspeicher entfernen" -#: init/completions/apt-file.fish:7 +#: share/completions/apt-file.fish:7 msgid "Set cache dir" -msgstr "Verzeichnis für Zwischenspeicher festlegen" +msgstr "Verzeichnis für Zwischenspeicher festlegen" -#: init/completions/apt-file.fish:9 -msgid "Use cdrom-mount-point" -msgstr "CDROM-Einhängepunkt benutzen" - -#: init/completions/apt-file.fish:10 init/completions/apt-file.fish:16 +#: share/completions/apt-file.fish:10 share/completions/apt-file.fish:16 msgid "Do not expand pattern" msgstr "Erweitern Sie das Muster nicht" -#: init/completions/apt-file.fish:11 +#: share/completions/apt-file.fish:11 msgid "Pattern is regexp" -msgstr "Muster ist ein regulärer Ausdruck" +msgstr "Muster ist ein regulärer Ausdruck" -#: init/completions/apt-file.fish:13 +#: share/completions/apt-file.fish:13 msgid "Set arch" msgstr "Architektur festlegen" -#: init/completions/apt-file.fish:14 +#: share/completions/apt-file.fish:14 msgid "Set sources.list file" msgstr "sources.list-Datei angeben" -#: init/completions/apt-file.fish:15 +#: share/completions/apt-file.fish:15 msgid "Only display package name" msgstr "Nur Paketnamen anzeigen" -#: init/completions/apt-file.fish:17 +#: share/completions/apt-file.fish:17 msgid "Run in dummy mode" -msgstr "Im Dummy-Modus ausführen" +msgstr "Im Dummy-Modus ausführen" -#: init/completions/apt-ftparchive.fish:3 +#: share/completions/apt-ftparchive.fish:3 msgid "Generate package from source" msgstr "Paket aus Quelle generieren" -#: init/completions/apt-ftparchive.fish:4 +#: share/completions/apt-ftparchive.fish:4 msgid "Generate source index file" msgstr "Quellindexdatei erstellen" -#: init/completions/apt-ftparchive.fish:5 +#: share/completions/apt-ftparchive.fish:5 msgid "Generate contents file" msgstr "Inhaltsdatei erstellen" -#: init/completions/apt-ftparchive.fish:6 +#: share/completions/apt-ftparchive.fish:6 msgid "Generate release file" -msgstr "Veröffentlichungsdatei erstellen" +msgstr "Veröffentlichungsdatei erstellen" -#: init/completions/apt-ftparchive.fish:7 +#: share/completions/apt-ftparchive.fish:7 msgid "Remove records" -msgstr "Sätze entfernen" +msgstr "Sätze entfernen" -#: init/completions/apt-ftparchive.fish:8 +#: share/completions/apt-ftparchive.fish:8 msgid "Generate MD5 sums" msgstr "MD5-Summen erstellen" -#: init/completions/apt-ftparchive.fish:9 +#: share/completions/apt-ftparchive.fish:9 msgid "Use a binary db" -msgstr "Eine Binärdatenbank benutzen" +msgstr "Eine Binärdatenbank benutzen" -#: init/completions/apt-ftparchive.fish:11 +#: share/completions/apt-ftparchive.fish:11 msgid "Perform delinking" -msgstr "Trennung ausführen" +msgstr "Trennung ausführen" -#: init/completions/apt-ftparchive.fish:12 +#: share/completions/apt-ftparchive.fish:12 msgid "Perform contents generation" -msgstr "Inhaltsgenerierung durchführen" +msgstr "Inhaltsgenerierung durchführen" -#: init/completions/apt-ftparchive.fish:13 -msgid "Use source override" -msgstr "Quell-Override verwenden" - -#: init/completions/apt-ftparchive.fish:14 +#: share/completions/apt-ftparchive.fish:14 msgid "Make caching db readonly" -msgstr "Zwischenspeicherdatenbank schreibschützen" +msgstr "Zwischenspeicherdatenbank schreibschützen" -#: init/completions/apt-ftparchive.fish:16 +#: share/completions/apt-ftparchive.fish:16 msgid "Use config file" msgstr "Konfigurationsdatei benutzen" -#: init/completions/apt-ftparchive.fish:17 -#: init/completions/apt-sortpkgs.fish:6 +#: share/completions/apt-ftparchive.fish:17 msgid "Set config options" msgstr "Konfigurationsoptionen festlegen" -#: init/completions/apt-get.fish:3 +#: share/completions/apt-get.fish:3 share/completions/apt-mark.fish:3 msgid "Test if apt has yet to be given the subcommand" 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 +#: share/completions/apt-get.fish:24 msgid "Update sources" msgstr "Quellen aktualisieren" -#: init/completions/apt-get.fish:25 +#: share/completions/apt-get.fish:25 msgid "Upgrade or install newest packages" msgstr "Neueste Pakete aktualisieren oder installieren" -#: init/completions/apt-get.fish:26 +#: share/completions/apt-get.fish:26 msgid "Use with dselect front-end" -msgstr "Mit dselect-Oberfläche verwenden" +msgstr "Mit dselect-Oberfläche verwenden" -#: init/completions/apt-get.fish:27 +#: share/completions/apt-get.fish:27 msgid "Distro upgrade" msgstr "Aktualisierung der Distribution" -#: init/completions/apt-get.fish:28 +#: share/completions/apt-get.fish:28 msgid "Install one or more packages" msgstr "Ein oder mehrere Paket(e) installieren" -#: init/completions/apt-get.fish:29 +#: share/completions/apt-get.fish:29 +#, fuzzy +msgid "Remove and purge one or more packages" +msgstr "Ein oder mehrere Paket(e) entfernen" + +#: share/completions/apt-get.fish:30 msgid "Remove one or more packages" msgstr "Ein oder mehrere Paket(e) entfernen" -#: init/completions/apt-get.fish:30 +#: share/completions/apt-get.fish:31 msgid "Fetch source packages" msgstr "Quellpakete abrufen" -#: init/completions/apt-get.fish:31 +#: share/completions/apt-get.fish:32 msgid "Install/remove packages for dependencies" -msgstr "Pakete für Abhängigkeiten installieren/entfernen" +msgstr "Pakete für Abhängigkeiten installieren/entfernen" -#: init/completions/apt-get.fish:32 +#: share/completions/apt-get.fish:33 msgid "Update cache and check dependencies" -msgstr "Zwischenspeicher aktualisieren und Abhängigkeiten prüfen" +msgstr "Zwischenspeicher aktualisieren und Abhängigkeiten prüfen" -#: init/completions/apt-get.fish:33 +#: share/completions/apt-get.fish:34 msgid "Clean local caches and packages" msgstr "Lokalen Zwischenspeicher und Pakete bereinigen" -#: init/completions/apt-get.fish:34 +#: share/completions/apt-get.fish:35 msgid "Clean packages no longer be downloaded" -msgstr "Pakete, die nicht länger heruntergeladen werden, bereinigen" +msgstr "Pakete, die nicht länger heruntergeladen werden, bereinigen" -#: init/completions/apt-get.fish:35 -msgid "Download Only" -msgstr "Nur herunterladen" +#: share/completions/apt-get.fish:36 +#, fuzzy +msgid "Remove automatically installed packages" +msgstr "Alle installierten Pakete abfragen" -#: init/completions/apt-get.fish:36 -msgid "Correct broken dependencies" -msgstr "Zerstörte Abhängigkeiten korrigieren" - -#: init/completions/apt-get.fish:37 -msgid "Ignore missing packages" -msgstr "Fehlende Pakete ignorieren" - -#: init/completions/apt-get.fish:38 -msgid "Disable downloading packages" -msgstr "Herunterladen von Paketen deaktivieren" - -#: init/completions/apt-get.fish:40 -msgid "Perform a simulation" -msgstr "Simulation durchführen" - -#: init/completions/apt-get.fish:41 -msgid "Automatic yes to prompts" -msgstr "Automatisch Ja für Abfragen verwenden" - -#: init/completions/apt-get.fish:42 -msgid "Show upgraded packages" -msgstr "Aktualisierte Pakete anzeigen" - -#: init/completions/apt-get.fish:43 -msgid "Show full versions for packages" -msgstr "Volle Versionen der Pakete anzeigen" - -#: init/completions/apt-get.fish:44 init/completions/apt-get.fish:45 -msgid "Compile source packages" -msgstr "Quellpakete kompilieren" - -#: init/completions/apt-get.fish:46 -msgid "Ignore package Holds" -msgstr "Gehaltene Pakete ignorieren" - -#: init/completions/apt-get.fish:47 -msgid "Do not upgrade packages" -msgstr "Pakete nicht aktualisieren" - -#: init/completions/apt-get.fish:48 -msgid "Force yes" -msgstr "Ja erzwingen" - -#: init/completions/apt-get.fish:49 -msgid "Print the URIs" -msgstr "URIs ausgeben" - -#: init/completions/apt-get.fish:51 -msgid "Reinstall packages" -msgstr "Pakete erneut installieren" - -#: init/completions/apt-get.fish:52 -msgid "Erase obsolete files" -msgstr "Veraltete Dateien löschen" - -#: init/completions/apt-get.fish:53 -msgid "Control default input to the policy engine" -msgstr "Standardeingabe zur Regelverwaltung leiten" - -#: init/completions/apt-get.fish:54 -msgid "Only perform operations that are trivial" -msgstr "Nur einfache Operationen durchführen" - -#: init/completions/apt-get.fish:55 -msgid "Abort if any packages are to be removed" -msgstr "Abbruch, falls irgendwelche Pakete entfernt würden" - -#: init/completions/apt-get.fish:56 -msgid "Only accept source packages" -msgstr "Nur Quellpakete akzeptieren" - -#: init/completions/apt-get.fish:57 -msgid "Download only diff file" -msgstr "Nur diff-Datei herunterladen" - -#: init/completions/apt-get.fish:58 -msgid "Download only tar file" -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" - -#: init/completions/apt-get.fish:60 -msgid "Ignore non-authenticated packages" -msgstr "Nicht authentifizierte Pakete ignorieren" - -#: init/completions/apt-get.fish:62 +#: share/completions/apt-get.fish:65 share/completions/apt-mark.fish:32 msgid "Specify a config file" msgstr "Konfigurationsdatei angeben" -#: init/completions/apt-get.fish:63 +#: share/completions/apt-get.fish:66 share/completions/apt-mark.fish:33 msgid "Set a config option" msgstr "Konfigurationsoption festlegen" -#: init/completions/apt-key.fish:2 +#: share/completions/apt-key.fish:2 msgid "Add a new key" -msgstr "Neuen Schlüssel hinzufügen" +msgstr "Neuen Schlüssel hinzufügen" -#: init/completions/apt-key.fish:3 +#: share/completions/apt-key.fish:3 msgid "Remove a key" -msgstr "Schlüssel entfernen" +msgstr "Schlüssel entfernen" -#: init/completions/apt-key.fish:4 +#: share/completions/apt-key.fish:4 msgid "List trusted keys" -msgstr "Vertraute Schlüssel auflisten" +msgstr "Vertraute Schlüssel auflisten" -#: init/completions/apt-listbugs.fish:3 +#: share/completions/apt-listbugs.fish:3 msgid "Set severity" msgstr "Schwere festlegen" -#: init/completions/apt-listbugs.fish:4 +#: share/completions/apt-listbugs.fish:4 msgid "Tags you want to see" -msgstr "Markierungen, die Sie sehen möchten" +msgstr "Markierungen, die Sie sehen möchten" -#: init/completions/apt-listbugs.fish:5 +#: share/completions/apt-listbugs.fish:5 msgid "Bug-status you want to see" -msgstr "Fehlerstatus, den Sie sehen möchten" +msgstr "Fehlerstatus, den Sie sehen möchten" -#: init/completions/apt-listbugs.fish:6 +#: share/completions/apt-listbugs.fish:6 msgid "Ignore bugs in your system" msgstr "Fehler in Ihrem System ignorieren" -#: init/completions/apt-listbugs.fish:7 +#: share/completions/apt-listbugs.fish:7 msgid "Ignore newer bugs than upgrade packages" msgstr "Fehler, die neuer sind als Aktualisierungspakete, ignorieren" -#: init/completions/apt-listbugs.fish:8 +#: share/completions/apt-listbugs.fish:8 msgid "Bugs for downgrade packages" msgstr "Fehler bei Downgrade-Paketen" -#: init/completions/apt-listbugs.fish:9 +#: share/completions/apt-listbugs.fish:9 msgid "Bug Tracking system" msgstr "Fehlerverfolgungssystem" -#: init/completions/apt-listbugs.fish:10 +#: share/completions/apt-listbugs.fish:10 msgid "Specify port for web interface" -msgstr "Port für Weboberfläche angeben" +msgstr "Port für Weboberfläche angeben" -#: init/completions/apt-listbugs.fish:11 +#: share/completions/apt-listbugs.fish:11 msgid "Use daily bug report" -msgstr "Täglichen Fehlerbericht verwenden" +msgstr "Täglichen Fehlerbericht verwenden" -#: init/completions/apt-listbugs.fish:12 +#: share/completions/apt-listbugs.fish:12 msgid "Use the raw index.db" msgstr "Die rohe index.db verwenden" -#: init/completions/apt-listbugs.fish:13 +#: share/completions/apt-listbugs.fish:13 msgid "Specify index dir" msgstr "Indexverzeichnis angeben" -#: init/completions/apt-listbugs.fish:14 +#: share/completions/apt-listbugs.fish:14 msgid "Specify Pin-Priority value" -msgstr "Pin-Prioritätswert angeben" +msgstr "Pin-Prioritätswert angeben" -#: init/completions/apt-listbugs.fish:15 +#: share/completions/apt-listbugs.fish:15 msgid "Specify the title of rss" -msgstr "Geben Sie einen Titel für rss an" +msgstr "Geben Sie einen Titel für rss an" -#: init/completions/apt-listbugs.fish:16 +#: share/completions/apt-listbugs.fish:16 msgid "Retrieve fresh bugs" msgstr "Neue Bugs abrufen" -#: init/completions/apt-listbugs.fish:17 init/completions/scp.fish:32 +#: share/completions/apt-listbugs.fish:17 msgid "Do not display progress bar" msgstr "Keinen Fortschrittsbalken anzeigen" -#: init/completions/apt-listbugs.fish:18 +#: share/completions/apt-listbugs.fish:18 msgid "Specify local cache dir" -msgstr "Verzeichnis für lokalen Zwischenspeicher angeben" +msgstr "Verzeichnis für lokalen Zwischenspeicher angeben" -#: init/completions/apt-listbugs.fish:19 +#: share/completions/apt-listbugs.fish:19 msgid "Specify the expire cache timer" -msgstr "Zeitablauf für Zwischenspeicher angeben" +msgstr "Zeitablauf für Zwischenspeicher angeben" -#: init/completions/apt-listbugs.fish:20 -msgid "Specify apt config file" -msgstr "apt-Konfigurationsdatei angeben" +#: share/completions/apt-listbugs.fish:21 +msgid "Assume yes to all questions" +msgstr "Bei allen Fragen ja annehmen" -#: init/completions/apt-listbugs.fish:22 +#: share/completions/apt-listbugs.fish:22 msgid "Assume no to all questions" -msgstr "Für alle Fragen nein annehmen" +msgstr "Für alle Fragen nein annehmen" -#: init/completions/apt-listbugs.fish:23 -msgid "List bugs from packages" -msgstr "Fehler aus Paketen auflisten" +#: share/completions/apt-listchanges.fish:5 +#, fuzzy +msgid "Select frontend interface" +msgstr "Benutzerschnittstelle auswählen" -#: init/completions/apt-listbugs.fish:24 -msgid "List bugs in rss format" -msgstr "Fehler im rss-Format auflisten" - -#: init/completions/apt-listchanges.fish:3 -msgid "Read filenames from pipe" -msgstr "Dateinamen über Pipe lesen" - -#: init/completions/apt-listchanges.fish:5 -msgid "Select fronend interface" -msgstr "Benutzerschnittstelle auswählen" - -#: init/completions/apt-listchanges.fish:6 init/completions/darcs.fish:178 -msgid "Specify email address" -msgstr "E-Mail-Adresse angeben" - -#: init/completions/apt-listchanges.fish:7 +#: share/completions/apt-listchanges.fish:7 msgid "Ask confirmation" -msgstr "Bestätigung erfragen" +msgstr "Bestätigung erfragen" -#: init/completions/apt-listchanges.fish:8 +#: share/completions/apt-listchanges.fish:8 msgid "Display all changelogs" -msgstr "Alle Änderungsprotokolle anzeigen" +msgstr "Alle Änderungsprotokolle anzeigen" -#: init/completions/apt-listchanges.fish:9 +#: share/completions/apt-listchanges.fish:9 msgid "Avoid changelogs from db in named file" -msgstr "Änderungsprotokolle aus der Datenbank der benannten Datei vermeiden" +msgstr "Änderungsprotokolle aus der Datenbank der benannten Datei vermeiden" -#: init/completions/apt-listchanges.fish:10 -msgid "Select display" -msgstr "Grafikanzeige auswählen" - -#: init/completions/apt-listchanges.fish:11 +#: share/completions/apt-listchanges.fish:11 msgid "Insert header" -msgstr "Kopfzeile einfügen" +msgstr "Kopfzeile einfügen" -#: init/completions/apt-listchanges.fish:12 init/completions/ps.fish:36 +#: share/completions/apt-listchanges.fish:12 msgid "Display debug info" msgstr "Debug-Informationen anzeigen" -#: init/completions/apt-listchanges.fish:13 +#: share/completions/apt-listchanges.fish:13 msgid "Select an option profile" -msgstr "Optionsprofil auswählen" +msgstr "Optionsprofil auswählen" -#: init/completions/apt-move.fish:2 -msgid "Generate master file" -msgstr "Masterdatei erstellen" +#: share/completions/apt-mark.fish:24 +#, fuzzy +msgid "Mark a package as automatically installed" +msgstr "Paket aktualisieren, wenn es bereits installiert ist" -#: init/completions/apt-move.fish:3 -msgid "Alias for 'get'" -msgstr "Alias für 'get'" +#: share/completions/apt-mark.fish:25 +#, fuzzy +msgid "Mark a package as manually installed" +msgstr "Paket aktualisieren, wenn es bereits installiert ist" -#: init/completions/apt-move.fish:4 +#: share/completions/apt-mark.fish:26 +msgid "Hold a package, prevent automatic installation or removal" +msgstr "" + +#: share/completions/apt-mark.fish:27 +#, fuzzy +msgid "Cancel a hold on a package" +msgstr "Informationen über ein Paket" + +#: share/completions/apt-mark.fish:28 +#, fuzzy +msgid "Show automatically installed packages" +msgstr "Alle installierten Pakete abfragen" + +#: share/completions/apt-mark.fish:29 +#, fuzzy +msgid "Show manually installed packages" +msgstr "Alle installierten Pakete abfragen" + +#: share/completions/apt-mark.fish:30 +#, fuzzy +msgid "Show held packages" +msgstr "Aktualisierte Pakete anzeigen" + +#: share/completions/apt-mark.fish:34 +#, fuzzy +msgid "Write package statistics to a file" +msgstr "Prototypen in Datei schreiben" + +#: share/completions/apt-move.fish:4 msgid "Move packages to local tree" msgstr "Pakete in lokalen Verzeichnisbaum verschieben" -#: init/completions/apt-move.fish:5 +#: share/completions/apt-move.fish:5 msgid "Delete obsolete package files" -msgstr "Veraltete Paketdateien löschen" +msgstr "Veraltete Paketdateien löschen" -#: init/completions/apt-move.fish:6 +#: share/completions/apt-move.fish:6 msgid "Build new local files" msgstr "Neue lokale Dateien erstellen" -#: init/completions/apt-move.fish:7 +#: share/completions/apt-move.fish:7 msgid "Rebuild index files" msgstr "Indexdateien neu erstellen" -#: init/completions/apt-move.fish:8 +#: share/completions/apt-move.fish:8 msgid "Move packages from cache to local mirror" msgstr "Pakete aus Zwischenspeicher auf lokalen Spiegelserver verschieben" -#: init/completions/apt-move.fish:9 +#: share/completions/apt-move.fish:9 msgid "Alias for 'move delete packages'" -msgstr "" -"Alias für 'move delete packages' " -"'" +msgstr "Alias für 'move delete packages' '" -#: init/completions/apt-move.fish:10 +#: share/completions/apt-move.fish:10 msgid "Alias for 'update'" -msgstr "Alias für 'update'" +msgstr "Alias für 'update'" -#: init/completions/apt-move.fish:11 +#: share/completions/apt-move.fish:11 msgid "Download package missing from mirror" msgstr "Fehlende Pakete vom Spiegelserver herunterladen" -#: init/completions/apt-move.fish:12 +#: share/completions/apt-move.fish:12 msgid "Sync packages installed" msgstr "Installierte Pakete synchronisieren" -#: init/completions/apt-move.fish:14 -msgid "Move file specified on commandline" -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" +#: share/completions/apt-move.fish:15 +#, fuzzy +msgid "List packages that may serve as input to mirrorbin or mirrorsource" msgstr "" -"Pakete auflisten, die als Quelle für mirrorbin oder mirrorsource dienen können" +"Pakete auflisten, die als Quelle für mirrorbin oder mirrorsource dienen " +"können" -#: init/completions/apt-move.fish:16 +#: share/completions/apt-move.fish:16 msgid "Fetch package from STDIN" -msgstr "Paket über Standardeingabe lesen" +msgstr "Paket über Standardeingabe lesen" -#: init/completions/apt-move.fish:17 +#: share/completions/apt-move.fish:17 msgid "Fetch source package from STDIN" -msgstr "Quellpaket über Standardeingabe lesen" +msgstr "Quellpaket über Standardeingabe lesen" -#: init/completions/apt-move.fish:18 +#: share/completions/apt-move.fish:18 msgid "Process all packages" msgstr "Alle Pakete verarbeiten" -#: init/completions/apt-move.fish:19 -msgid "Use specific conffile" -msgstr "Angegebene Konfigurationsdatei benutzen" - -#: init/completions/apt-move.fish:20 +#: share/completions/apt-move.fish:20 msgid "Force deletion" -msgstr "Löschung erzwingen" +msgstr "Löschung erzwingen" -#: init/completions/apt-move.fish:21 +#: share/completions/apt-move.fish:21 msgid "Suppresses normal output" -msgstr "Normale Ausgabe unterdrücken" +msgstr "Normale Ausgabe unterdrücken" -#: init/completions/apt-move.fish:22 +#: share/completions/apt-move.fish:22 msgid "Test run" msgstr "Testdurchlauf" -#: init/completions/apt-proxy-import.fish:5 +#: share/completions/apt-proxy-import.fish:5 msgid "No message to STDOUT" msgstr "Keine Meldungen auf Standardausgabe" -#: init/completions/apt-proxy-import.fish:6 +#: share/completions/apt-proxy-import.fish:6 msgid "Recurse into subdir" msgstr "in Unterverzeichnis verzweigen" -#: init/completions/apt-proxy-import.fish:7 +#: share/completions/apt-proxy-import.fish:7 msgid "Dir to import" msgstr "Zu importierendes Verzeichnis" -#: init/completions/apt-proxy-import.fish:8 +#: share/completions/apt-proxy-import.fish:8 msgid "Change to user" msgstr "Wechsel zu Benutzer" -#: init/completions/apt-proxy-import.fish:9 +#: share/completions/apt-proxy-import.fish:9 msgid "Debug level[default 0]" msgstr "Debug-Grad [Standard 0]" -#: init/completions/apt-rdepends.fish:3 -msgid "Show bulid dependencies" -msgstr "Erstellungsabhängigkeiten anzeigen" +#: share/completions/apt-rdepends.fish:3 +#, fuzzy +msgid "Show build dependencies" +msgstr "Erstellungsabhängigkeiten anzeigen" -#: init/completions/apt-rdepends.fish:4 +#: share/completions/apt-rdepends.fish:4 msgid "Generate a dotty graph" msgstr "Gepunkteten Graph generieren" -#: init/completions/apt-rdepends.fish:5 +#: share/completions/apt-rdepends.fish:5 msgid "Show state of dependencies" -msgstr "Status der Abhängigkeiten anzeigen" +msgstr "Status der Abhängigkeiten anzeigen" -#: init/completions/apt-rdepends.fish:6 +#: share/completions/apt-rdepends.fish:6 msgid "List packages depending on" -msgstr "Pakete auflisten, 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" - -#: init/completions/apt-rdepends.fish:8 -msgid "Comma-separated list of dependancy types to show" -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 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 vom Paketinstallationsstatus, die angezeigt werden " -"sollen" - -#: init/completions/apt-rdepends.fish:11 +#: share/completions/apt-rdepends.fish:11 msgid "Display man page" msgstr "Handbuchseite anzeigen" -#: init/completions/apt-setup.fish:2 -msgid "Probe a CD" -msgstr "Eine CD testen" - -#: init/completions/apt-setup.fish:3 -msgid "Run in noninteractive mode" -msgstr "Im nicht interaktiven Modus ausführen" - -#: init/completions/apt-show-source.fish:3 -#: init/completions/apt-show-source.fish:4 -#: init/completions/apt-show-versions.fish:10 -#: init/completions/apt-show-versions.fish:11 +#: share/completions/apt-show-source.fish:3 +#: share/completions/apt-show-source.fish:4 +#: share/completions/apt-show-versions.fish:10 +#: share/completions/apt-show-versions.fish:11 msgid "Read package from file" msgstr "Paket aus Datei lesen" -#: init/completions/apt-show-source.fish:5 -#: init/completions/apt-show-source.fish:6 -#: init/completions/apt-show-versions.fish:12 -#: init/completions/apt-show-versions.fish:13 +#: share/completions/apt-show-source.fish:5 +#: share/completions/apt-show-source.fish:6 +#: share/completions/apt-show-versions.fish:12 +#: share/completions/apt-show-versions.fish:13 msgid "Specify APT list dir" msgstr "APT-Listenverzeichnis angeben" -#: init/completions/apt-show-source.fish:7 +#: share/completions/apt-show-source.fish:7 msgid "List PKG info" msgstr "PKG-Information auflisten" -#: init/completions/apt-show-source.fish:9 +#: share/completions/apt-show-source.fish:9 msgid "Print all source packages with version" msgstr "Alle Quellpakete mit Version ausgeben" -#: init/completions/apt-show-versions.fish:3 +#: share/completions/apt-show-versions.fish:3 msgid "Print PKG versions" msgstr "PKG-Versionen ausgeben" -#: init/completions/apt-show-versions.fish:4 +#: share/completions/apt-show-versions.fish:4 msgid "Using regex" -msgstr "Regulären Ausdruck benutzen" +msgstr "Regulären Ausdruck benutzen" -#: init/completions/apt-show-versions.fish:5 +#: share/completions/apt-show-versions.fish:5 msgid "Print only upgradeable packages" msgstr "Nur aktualisierbare Pakete ausgeben" -#: init/completions/apt-show-versions.fish:6 +#: share/completions/apt-show-versions.fish:6 msgid "Print all versions" msgstr "Alle Versionen ausgeben" -#: init/completions/apt-show-versions.fish:7 +#: share/completions/apt-show-versions.fish:7 msgid "Print package name/distro" msgstr "Paketname/Distribution ausgeben" -#: init/completions/apt-show-versions.fish:8 +#: share/completions/apt-show-versions.fish:8 msgid "Print verbose info" -msgstr "Ausführliche Informationen ausgeben" +msgstr "Ausführliche Informationen ausgeben" -#: init/completions/apt-show-versions.fish:9 +#: share/completions/apt-show-versions.fish:9 msgid "Init or update cache only" msgstr "Nur Zwischenspeicher initialisieren oder aktualisieren" -#: init/completions/apt-sortpkgs.fish:3 +#: share/completions/apt-sortpkgs.fish:3 msgid "Use source index field" msgstr "Indexfeld der Quelle verwenden" -#: init/completions/apt-sortpkgs.fish:5 +#: share/completions/apt-sortpkgs.fish:5 msgid "Specify conffile" msgstr "Konfigurationsdatei angeben" -#: init/completions/apt-spy.fish:3 -msgid "Debian distribtion" +#: share/completions/apt-spy.fish:3 +#, fuzzy +msgid "Debian distribution" msgstr "Debian-Distribution" -#: init/completions/apt-spy.fish:4 +#: share/completions/apt-spy.fish:4 msgid "Servers in the areas" msgstr "Server in diesem Bereich" -#: init/completions/apt-spy.fish:5 -msgid "Conf file" -msgstr "Konfigurationsdatei" - -#: init/completions/apt-spy.fish:6 +#: share/completions/apt-spy.fish:6 msgid "Finish after number of servers" msgstr "Nach Anzahl der Server beenden" -#: init/completions/apt-spy.fish:7 -msgid "File to grab servers" -msgstr "Datei zum Zugriff auf Server" - -#: init/completions/apt-spy.fish:8 -msgid "File as input" -msgstr "Datei als Eingabe" - -#: init/completions/apt-spy.fish:9 -msgid "Mirror-list file" -msgstr "Datei mit Spiegelliste" - -#: init/completions/apt-spy.fish:10 -msgid "Output sources.list file" -msgstr "sources.list-Datei ausgeben" - -#: init/completions/apt-spy.fish:11 +#: share/completions/apt-spy.fish:11 msgid "Use proxy server" msgstr "Proxy-Server verwenden" -#: init/completions/apt-spy.fish:12 +#: share/completions/apt-spy.fish:12 msgid "Comma separated country list" -msgstr "Komma-getrennte Länderliste" +msgstr "Komma-getrennte Länderliste" -#: init/completions/apt-spy.fish:13 +#: share/completions/apt-spy.fish:13 msgid "How long in sec to download" msgstr "Dauer des Herunterladens in Sekunden" -#: init/completions/apt-spy.fish:14 +#: share/completions/apt-spy.fish:14 msgid "Custom URL to get mirror list" msgstr "Angepasste URL zum Abruf der Spiegelliste" -#: init/completions/apt-spy.fish:15 -msgid "Write top servers to file" -msgstr "Top-Server in Datei schreiben" - -#: init/completions/apt-spy.fish:16 +#: share/completions/apt-spy.fish:16 msgid "Number of top servers" msgstr "Anzahl der Top-Server" -#: init/completions/apt-spy.fish:17 +#: share/completions/apt-spy.fish:17 msgid "Update mirror list" msgstr "Spiegelliste aktualisieren" -#: init/completions/apt-spy.fish:18 +#: share/completions/apt-spy.fish:18 msgid "Version number" msgstr "Versionsnummer" -#: init/completions/apt-src.fish:3 +#: share/completions/apt-src.fish:3 msgid "Update list of source packages" msgstr "Liste der Quellpakete aktualisieren" -#: init/completions/apt-src.fish:4 +#: share/completions/apt-src.fish:4 msgid "Install source packages" msgstr "Quellpakete installieren" -#: init/completions/apt-src.fish:5 +#: share/completions/apt-src.fish:5 msgid "Upgrade source packages" msgstr "Quellpakete aktualisieren" -#: init/completions/apt-src.fish:6 +#: share/completions/apt-src.fish:6 msgid "Remove source packages" msgstr "Quellpakete entfernen" -#: init/completions/apt-src.fish:7 init/completions/apt-src.fish:14 +#: share/completions/apt-src.fish:7 share/completions/apt-src.fish:14 msgid "Build source packages" msgstr "Quellpakete erstellen" -#: init/completions/apt-src.fish:8 +#: share/completions/apt-src.fish:8 msgid "Clean source packages" msgstr "Quellpakete bereinigen" -#: init/completions/apt-src.fish:9 +#: share/completions/apt-src.fish:9 msgid "Detect known source tree" -msgstr "Bekannte Quellbäume entdecken" +msgstr "Bekannte Quellbäume entdecken" -#: init/completions/apt-src.fish:10 +#: share/completions/apt-src.fish:10 msgid "List installed source package\\(s\\)" msgstr "Installierte(s) Quellpaket(e) auflisten" -#: init/completions/apt-src.fish:11 +#: share/completions/apt-src.fish:11 msgid "Root source tree" msgstr "Ursprung des Quellbaumes" -#: init/completions/apt-src.fish:12 +#: share/completions/apt-src.fish:12 msgid "Version of source package" msgstr "Version des Quellpaketes" -#: init/completions/apt-src.fish:13 +#: share/completions/apt-src.fish:13 msgid "Name of the source package" msgstr "Name des Quellpaketes" -#: init/completions/apt-src.fish:15 +#: share/completions/apt-src.fish:15 msgid "Install after build" msgstr "Nach Erstellung installieren" -#: init/completions/apt-src.fish:16 +#: share/completions/apt-src.fish:16 msgid "Patch local changes" -msgstr "Lokale Änderungen patchen" +msgstr "Lokale Änderungen patchen" -#: init/completions/apt-src.fish:17 +#: share/completions/apt-src.fish:17 msgid "Specify a dir" msgstr "Verzeichnis angeben" -#: init/completions/apt-src.fish:18 -msgid "Run on current dir" -msgstr "Im aktuellen Verzeichnis starten" - -#: init/completions/apt-src.fish:19 +#: share/completions/apt-src.fish:19 msgid "Omit debian version" msgstr "Debian-Version auslassen" -#: init/completions/apt-src.fish:20 +#: share/completions/apt-src.fish:20 msgid "Do not del built files" -msgstr "Erstellte Dateien nicht löschen" +msgstr "Erstellte Dateien nicht löschen" -#: init/completions/apt-src.fish:21 +#: share/completions/apt-src.fish:21 msgid "Do not del source files" -msgstr "Quelldateien nicht löschen" +msgstr "Quelldateien nicht löschen" -#: init/completions/apt-src.fish:22 +#: share/completions/apt-src.fish:22 msgid "Source tree version" msgstr "Version des Quellenbaumes" -#: init/completions/apt-src.fish:23 +#: share/completions/apt-src.fish:23 msgid "Output to /dev/null" msgstr "Ausgabe nach /dev/null" -#: init/completions/apt-src.fish:24 +#: share/completions/apt-src.fish:24 msgid "Output trace" msgstr "Ausgabeverfolgung" -#: init/completions/apt-zip-inst.fish:4 init/completions/apt-zip-list.fish:4 -msgid "Removable medium" -msgstr "Wechselbares Medium" - -#: init/completions/apt-zip-inst.fish:5 init/completions/apt-zip-list.fish:5 +#: share/completions/apt-zip-inst.fish:5 share/completions/apt-zip-list.fish:5 msgid "Select an action" -msgstr "Eine Aktion auswä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" -msgstr "Liste zu installierender Pakete" - -#: init/completions/apt-zip-inst.fish:7 init/completions/apt-zip-list.fish:7 +#: share/completions/apt-zip-inst.fish:7 share/completions/apt-zip-list.fish:7 msgid "Fix broken option" 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ängeverzeichnis ist" +#: share/completions/aptitude.fish:3 +#, fuzzy +msgid "Test if aptitude has yet to be given the subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/apt-zip-list.fish:9 -msgid "Select a method" -msgstr "Eine Methode auswählen" +#: share/completions/aptitude.fish:12 +#, fuzzy +msgid "Test if aptitude command should have packages as potential completion" +msgstr "" +"Testen, ob der apt-Befehl Pakete zur möglichen Fertigstellung haben sollte" -#: init/completions/apt-zip-list.fish:11 -msgid "Accept protocols" -msgstr "Zu akzeptierende Protokolle" +#: share/completions/aptitude.fish:24 +#, fuzzy +msgid "Remove any cached packages which can no longer be downloaded" +msgstr "Pakete, die nicht länger heruntergeladen werden, bereinigen" -#: init/completions/apt-zip-list.fish:12 -msgid "Reject protocols" -msgstr "Abzulehnende Protokolle" +#: share/completions/aptitude.fish:25 +msgid "Remove all downloaded .deb files from the package cache directory" +msgstr "" -#: init/completions/arp.fish:3 -msgid "Numerical address" -msgstr "Numerische Adresse" +#: share/completions/aptitude.fish:26 +msgid "Forget all internal information about what packages are \\new" +msgstr "" -#: init/completions/arp.fish:4 +#: share/completions/aptitude.fish:27 +msgid "Cancel all scheduled actions on all packages" +msgstr "" + +#: share/completions/aptitude.fish:28 +msgid "Update the list of available packages from the apt sources" +msgstr "" + +#: share/completions/aptitude.fish:29 +#, fuzzy +msgid "Upgrade installed packages to their most recent version" +msgstr "Alle Quellpakete mit Version ausgeben" + +#: share/completions/aptitude.fish:30 +#, fuzzy +msgid "Download and displays the Debian changelog for the packages" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" + +#: share/completions/aptitude.fish:31 +#, fuzzy +msgid "Upgrade, removing or installing packages as necessary" +msgstr "Neueste Pakete aktualisieren oder installieren" + +#: share/completions/aptitude.fish:32 +#, fuzzy +msgid "Download the packages to the current directory" +msgstr "Nie ins übergeordnete Verzeichnis wechseln" + +#: share/completions/aptitude.fish:33 +msgid "Forbid the upgrade to a particular version" +msgstr "" + +#: share/completions/aptitude.fish:34 +msgid "Ignore the packages by future upgrade commands" +msgstr "" + +#: share/completions/aptitude.fish:35 +#, fuzzy +msgid "Install the packages" +msgstr "Neues Paket installieren" + +#: share/completions/aptitude.fish:36 +#, fuzzy +msgid "Cancel any scheduled actions on the packages" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" + +#: share/completions/aptitude.fish:37 +#, fuzzy +msgid "Mark packages as automatically installed" +msgstr "Paket aktualisieren, wenn es bereits installiert ist" + +#: share/completions/aptitude.fish:38 +msgid "Remove and delete all associated configuration and data files" +msgstr "" + +#: share/completions/aptitude.fish:39 +#, fuzzy +msgid "Reinstall the packages" +msgstr "Pakete erneut installieren" + +#: share/completions/aptitude.fish:40 +#, fuzzy +msgid "Remove the packages" +msgstr "Pakete entfernen" + +#: share/completions/aptitude.fish:41 +#, fuzzy +msgid "Display detailed information about the packages" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" + +#: share/completions/aptitude.fish:42 +msgid "Consider the packages by future upgrade commands" +msgstr "" + +#: share/completions/aptitude.fish:43 +#, fuzzy +msgid "Mark packages as manually installed" +msgstr "Paket aktualisieren, wenn es bereits installiert ist" + +#: share/completions/aptitude.fish:44 +#, fuzzy +msgid "Search for packages matching one of the patterns" +msgstr "Paket entsprechend Muster suchen" + +#: share/completions/aptitude.fish:45 +msgid "Display brief summary of the available commands and options" +msgstr "" + +#: share/completions/arp.fish:4 msgid "Class of hw type" msgstr "Klasse des Hardwaretyps" -#: init/completions/arp.fish:5 +#: share/completions/arp.fish:5 msgid "Show arp entries" -msgstr "Arp-Einträge anzeigen" +msgstr "Arp-Einträge anzeigen" -#: init/completions/arp.fish:6 +#: share/completions/arp.fish:6 msgid "Remove an entry for hostname" -msgstr "Eintrag für Hostname entfernen" +msgstr "Eintrag für Hostname entfernen" -#: init/completions/arp.fish:7 -msgid "Use hardware address" -msgstr "Hardwareadresse verwenden" - -#: init/completions/arp.fish:8 +#: share/completions/arp.fish:8 msgid "Select interface" -msgstr "Schnittstelle auswählen" +msgstr "Schnittstelle auswählen" -#: init/completions/arp.fish:9 +#: share/completions/arp.fish:9 msgid "Manually create ARP address" msgstr "ARP-Adresse manuell erzeugen" -#: init/completions/arp.fish:10 +#: share/completions/arp.fish:10 msgid "Take addr from filename, default /etc/ethers" msgstr "Adresse aus Dateiname entnehmen, Standard /etc/ethers" -#: init/completions/atd.fish:2 -msgid "Limiting load factor" -msgstr "Auslastungsbegrenzung" - -#: init/completions/atd.fish:3 -msgid "Minimum interval in seconds" -msgstr "Minimalintervall in Sekunden" - -#: init/completions/atd.fish:4 init/completions/make.fish:11 -msgid "Debug mode" -msgstr "Debug-Modus" - -#: init/completions/atd.fish:5 -msgid "Process at queue only once" -msgstr "at-Warteschlange nur einmal verarbeiten" - -#: init/completions/at.fish:3 init/completions/atq.fish:3 +#: share/completions/at.fish:3 share/completions/atq.fish:3 msgid "Use specified queue" msgstr "Angegebene Warteschlange benutzen" -#: init/completions/at.fish:4 +#: share/completions/at.fish:4 msgid "Send mail to user" msgstr "Mail an Benutzer senden" -#: init/completions/at.fish:5 +#: share/completions/at.fish:5 msgid "Read job from file" msgstr "Job aus Datei lesen" -#: init/completions/at.fish:6 +#: share/completions/at.fish:6 msgid "Alias for atq" -msgstr "Alias für atq" +msgstr "Alias für atq" -#: init/completions/at.fish:7 +#: share/completions/at.fish:7 msgid "Alias for atrm" -msgstr "Alias für atrm" +msgstr "Alias für atrm" -#: init/completions/at.fish:8 +#: share/completions/at.fish:8 msgid "Show the time" msgstr "Zeige Zeit" -#: init/completions/at.fish:9 +#: share/completions/at.fish:9 msgid "Print the jobs listed" msgstr "Aufgelistete Jobs ausgeben" -#: init/completions/bc.fish:3 -msgid "Force interactive mode" -msgstr "Interaktiven Modus erzwingen" +#: share/completions/atd.fish:2 +msgid "Limiting load factor" +msgstr "Auslastungsbegrenzung" -#: init/completions/bc.fish:4 -msgid "Define math library" -msgstr "Mathematikbibliothek definieren" +#: share/completions/atd.fish:3 +msgid "Minimum interval in seconds" +msgstr "Minimalintervall in Sekunden" -#: init/completions/bc.fish:5 -msgid "Give warnings for extensions to POSIX bc" -msgstr "Bei Erweiterungen zu POSIX bc Warnungen ausgeben" +#: share/completions/atd.fish:4 +msgid "Debug mode" +msgstr "Debug-Modus" -#: init/completions/bc.fish:6 -msgid "Process exactly POSIX bc" -msgstr "POSIX bc genau verarbeiten" +#: share/completions/atd.fish:5 +msgid "Process at queue only once" +msgstr "at-Warteschlange nur einmal verarbeiten" -#: init/completions/bc.fish:7 -msgid "Do not print the GNU welcome" -msgstr "GNU welcome-Meldung nicht ausgeben" +#: share/completions/bundle.fish:3 +#, fuzzy +msgid "Test if bundle has been given no subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/btdownloadheadless.py.fish:4 -msgid "Maximum uploads at once" -msgstr "Maximale gleichzeitige Übertragungen" +#: share/completions/bundle.fish:11 +#, fuzzy +msgid "Test if bundle has been given a specific subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/btdownloadheadless.py.fish:5 -msgid "Number of seconds between keepalives" +#: share/completions/bundle.fish:30 +#, fuzzy +msgid "Display a help page" +msgstr "Handbuchseite anzeigen" + +#: share/completions/bundle.fish:38 share/completions/bundle.fish:65 +msgid "Install the gems specified by the Gemfile or Gemfile.lock" msgstr "" -"Anzahl Sekunden zwischen Meldungen zur Aufrechterhaltung der Verbindung" -#: init/completions/btdownloadheadless.py.fish:6 -msgid "Bytes per request" -msgstr "Bytes per Anforderung" - -#: init/completions/btdownloadheadless.py.fish:7 -msgid "Requests per pipe" -msgstr "Anforderungen per Pipe" - -#: init/completions/btdownloadheadless.py.fish:8 -msgid "Maximum length prefix encoding" -msgstr "Maximallänge der Präfix-Kodierung" - -#: init/completions/btdownloadheadless.py.fish:9 -msgid "IP to report to the tracker" -msgstr "An den Tracker zu sendende IP-Adresse" - -#: init/completions/btdownloadheadless.py.fish:10 -msgid "Minimum port to listen to" -msgstr "Niedrigster Port, an dem gelauscht wird" - -#: init/completions/btdownloadheadless.py.fish:11 -msgid "Maximum port to listen to" -msgstr "Höchster Port, an dem gelauscht wird" - -#: init/completions/btdownloadheadless.py.fish:12 -msgid "File for server response" -msgstr "Datei für Serverantworten" - -#: init/completions/btdownloadheadless.py.fish:13 -msgid "URL to get file from" -msgstr "URL zum Dateiabruf" - -#: init/completions/btdownloadheadless.py.fish:14 -msgid "Local file target" -msgstr "Target für lokale Datei" - -#: init/completions/btdownloadheadless.py.fish:15 -msgid "Time to close inactive socket" -msgstr "Zeit zum Schließen inaktiver Sockets" - -#: init/completions/btdownloadheadless.py.fish:16 -msgid "Time between checking timeouts" -msgstr "Zeit zwischen der Prüfung von Zeitüberschreitungen" - -#: init/completions/btdownloadheadless.py.fish:17 -msgid "Maximum outgoing slice length" -msgstr "Maximale ausgehende Slice-Länge" - -#: init/completions/btdownloadheadless.py.fish:18 -msgid "Maximum time to guess rate" -msgstr "Höchstdauer für die Ratequote" - -#: init/completions/btdownloadheadless.py.fish:19 -msgid "IP to bind to locally" -msgstr "Lokal zu bindende IP-Adresse" - -#: init/completions/btdownloadheadless.py.fish:20 -msgid "Time between screen updates" -msgstr "Zeit zwischen Bildschirmaktualisierungen" - -#: init/completions/btdownloadheadless.py.fish:21 -msgid "Time to wait between requesting more peers" -msgstr "Wartezeit zwischen den Anfragen weiterer Peers" - -#: init/completions/btdownloadheadless.py.fish:22 -msgid "Minimum number of peers to not do requesting" -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 eine http-Zeitüberschreitung vermutet wird" - -#: init/completions/btdownloadheadless.py.fish:24 -msgid "Number of peers at which to stop initiating new connections" +#: share/completions/bundle.fish:39 share/completions/bundle.fish:87 +msgid "The location of the Gemfile bundler should use." 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" -msgstr "erlaubte Anzahl maximaler Verbindungen" - -#: init/completions/btdownloadheadless.py.fish:26 -msgid "Whether to check hashes on disk" -msgstr "Hashes auf der Platte prüfen" - -#: init/completions/btdownloadheadless.py.fish:27 -msgid "Maximum kB/s to upload at" -msgstr "Maximale Hochladegeschwindigkeit in kB/s" - -#: init/completions/btdownloadheadless.py.fish:28 -msgid "Seconds to wait for data to come in before assuming choking" +#: share/completions/bundle.fish:40 +msgid "The location to install the gems in the bundle to." 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" -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" +#: share/completions/bundle.fish:41 +msgid "Installs the gems in the bundle to the system location." 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 "Anzahl der Hochladevorgänge mit besonders optimistischen Unchokes" +#: share/completions/bundle.fish:42 +msgid "A space-separated list of groups to skip installing." +msgstr "" -#: init/completions/btdownloadheadless.py.fish:32 -msgid "Whether to inform the user that hash failures occur" -msgstr "Sollen die Benutzer informiert werden, wenn Hash-Fehler auftreten" +#: share/completions/bundle.fish:43 +msgid "Use cached gems instead of connecting to rubygems.org." +msgstr "" -#: init/completions/bunzip2.fish:9 -msgid "Decompress to stdout" -msgstr "Auf Standardausgabe dekomprimieren" +#: share/completions/bundle.fish:44 +msgid "Switches bundler's defaults into deployment mode." +msgstr "" -#: init/completions/bunzip2.fish:10 init/completions/bzip2.fish:11 -#: init/completions/gunzip.fish:7 init/completions/gzip.fish:9 -#: init/completions/zcat.fish:6 -msgid "Overwrite" -msgstr "Überschreiben" +#: share/completions/bundle.fish:45 +msgid "" +"Create a directory containing executabes that run in the context of the " +"bundle." +msgstr "" -#: init/completions/bunzip2.fish:11 init/completions/bzip2.fish:12 -msgid "Do not overwrite" -msgstr "Nicht überschreiben" +#: share/completions/bundle.fish:46 +msgid "Specify a ruby executable to use with generated binstubs." +msgstr "" -#: init/completions/bunzip2.fish:12 init/completions/bzcat.fish:8 -#: init/completions/bzip2.fish:13 -msgid "Reduce memory usage" -msgstr "Speicherbedarf reduzieren" +#: share/completions/bundle.fish:47 +msgid "Make a bundle that can work without RubyGems or Bundler at run-time." +msgstr "" -#: init/completions/bunzip2.fish:13 init/completions/bzip2.fish:15 -msgid "Print compression ratios" -msgstr "Kompressionsraten ausgeben" +#: share/completions/bundle.fish:48 +msgid "Apply a RubyGems security policy: {High,Medium,Low,No}Security" +msgstr "" -#: init/completions/bunzip2.fish:14 init/completions/bzip2.fish:16 -#: init/completions/gunzip.fish:10 init/completions/gzip.fish:12 -#: init/completions/zcat.fish:8 -msgid "Print license" -msgstr "Lizenz ausgeben" +#: share/completions/bundle.fish:49 +msgid "Do not update the cache in vendor/cache with the newly bundled gems." +msgstr "" -#: init/completions/bzip2.fish:1 init/completions/gunzip.fish:1 -#: init/completions/gzip.fish:1 -msgid "Compress to stdout" -msgstr "Auf Standardausgabe komprimieren" +#: share/completions/bundle.fish:50 +#, fuzzy +msgid "Do not print progress information to stdout." +msgstr "Keine Gruppeninformation ausgeben" -#: init/completions/bzip2.fish:9 -msgid "Compress file" -msgstr "Datei komprimieren" +#: share/completions/bundle.fish:53 share/completions/bundle.fish:66 +#, fuzzy +msgid "Update dependencies to their latest versions" +msgstr "Abhängigkeiten an makefile anhängen" -#: init/completions/bzip2.fish:10 init/completions/gunzip.fish:16 -#: init/completions/gzip.fish:18 -msgid "Check integrity" -msgstr "Integrität prüfen" +#: share/completions/bundle.fish:54 +msgid "The name of a :git or :path source used in the Gemfile." +msgstr "" -#: init/completions/bzip2.fish:14 init/completions/chgrp.fish:6 -#: init/completions/chown.fish:5 -msgid "Supress errors" -msgstr "Fehler unterdrücken" +#: share/completions/bundle.fish:58 +msgid "" +"Package the .gem files required by your application into the vendor/cache " +"directory" +msgstr "" -#: init/completions/bzip2.fish:18 -msgid "Small block size" -msgstr "Kleine Blockgrösse" +#: share/completions/bundle.fish:61 share/completions/bundle.fish:68 +msgid "Execute a script in the context of the current bundle" +msgstr "" -#: init/completions/bzip2.fish:19 -msgid "Large block size" -msgstr "Grosse Blockgrösse" +#: share/completions/bundle.fish:64 +msgid "Describe available tasks or one specific task" +msgstr "" -#: init/completions/cat.fish:1 -msgid "Escape all non-printing characters" -msgstr "Alle nicht druckbaren Zeichen maskieren" +#: share/completions/bundle.fish:67 +#, fuzzy +msgid "Package .gem files into the vendor/cache directory" +msgstr "Dateien in das Paketdepot übertragen" -#: init/completions/cat.fish:2 -msgid "Number nonblank lines" -msgstr "Nicht-leere Zeilen nummerieren" +#: share/completions/bundle.fish:69 +msgid "Check bundler requirements for your application" +msgstr "" -#: init/completions/cat.fish:3 -msgid "Escape non-printing characters except tab" -msgstr "Nicht druckbare Zeichen außer Tabulator maskieren" +#: share/completions/bundle.fish:70 share/completions/bundle.fish:92 +msgid "Show all of the gems in the current bundle" +msgstr "" -#: init/completions/cat.fish:4 -msgid "Display $ at end of line" -msgstr "$ am Zeilenende anzeigen" +#: share/completions/bundle.fish:71 share/completions/bundle.fish:96 +#, fuzzy +msgid "Show the source location of a particular gem in the bundle" +msgstr "Prozesskennung jedes Prozesses im Job anzeigen" -#: init/completions/cat.fish:5 -msgid "Number all lines" -msgstr "Alle Zeilen nummerieren" +#: share/completions/bundle.fish:72 share/completions/bundle.fish:100 +msgid "Show all of the outdated gems in the current bundle" +msgstr "" -#: init/completions/cat.fish:6 -msgid "Never more than single blank line" -msgstr "Nicht mehr als eine leere Zeile" +#: share/completions/bundle.fish:73 share/completions/bundle.fish:107 +msgid "Start an IRB session in the context of the current bundle" +msgstr "" -#: init/completions/cat.fish:7 -msgid "Escape non-printing characters except newline" -msgstr "Nicht druckbare Zeichen außer Neuer-Zeile maskieren" +#: share/completions/bundle.fish:74 share/completions/bundle.fish:110 +#, sh-format +msgid "Open an installed gem in your $EDITOR" +msgstr "" -#: init/completions/cat.fish:8 -msgid "Escape tab" -msgstr "Tabulator maskieren" +#: share/completions/bundle.fish:75 share/completions/bundle.fish:114 +msgid "Generate a visual representation of your dependencies" +msgstr "" -#: init/completions/cat.fish:9 -msgid "Escape non-printing except newline and tab" -msgstr "Nicht druckbare Zeichen außer Neuer-Zeile und Tabulator maskieren" +#: share/completions/bundle.fish:76 +#, fuzzy +msgid "Generate a simple Gemfile" +msgstr "Masterdatei erstellen" -#: init/completions/chgrp.fish:2 init/completions/chown.fish:1 -msgid "Output diagnostic for changed files" -msgstr "Informationen über geänderte Dateien ausgeben" +#: share/completions/bundle.fish:77 share/completions/bundle.fish:125 +msgid "Create a simple gem, suitable for development with bundler" +msgstr "" -#: init/completions/chgrp.fish:3 init/completions/chown.fish:2 -msgid "Dereferense symbolic links" -msgstr "Symbolische Verweise dereferenzieren" +#: share/completions/bundle.fish:78 share/completions/bundle.fish:131 +msgid "Displays platform compatibility information" +msgstr "" -#: init/completions/chgrp.fish:4 init/completions/chown.fish:3 -msgid "Do not dereference symbolic links" -msgstr "Symbolische Verweise nicht dereferenzieren" +#: share/completions/bundle.fish:79 share/completions/bundle.fish:135 +msgid "Cleans up unused gems in your bundler directory" +msgstr "" -#: init/completions/chgrp.fish:5 init/completions/chown.fish:4 -msgid "Change from owner/group" -msgstr "Von Eigner/Gruppe wechseln" +#: share/completions/bundle.fish:86 +msgid "" +"Determine whether the requirements for your application are installed and " +"available to bundler" +msgstr "" -#: init/completions/chgrp.fish:7 init/completions/chown.fish:6 -msgid "Use same owner/group as file" -msgstr "Eigner/Gruppe wie Datei verwenden" +#: share/completions/bundle.fish:88 +msgid "Specify a path other than the system default (BUNDLE_PATH or GEM_HOME)." +msgstr "" -#: init/completions/chgrp.fish:8 init/completions/chown.fish:7 -#: init/completions/zip.fish:6 -msgid "Operate recursively" -msgstr "Rekursiv arbeiten" +#: share/completions/bundle.fish:89 +#, fuzzy +msgid "Lock the Gemfile" +msgstr "Log in Datei schreiben" -#: init/completions/chgrp.fish:9 init/completions/chown.fish:8 -msgid "Output diagnostic for every file" -msgstr "Informationen zu jeder Datei ausgeben" +#: share/completions/bundle.fish:93 +msgid "List the paths of all gems required by your Gemfile" +msgstr "" -#: init/completions/chown.fish:11 init/completions/chown.fish:12 -#: init/completions/w.fish:6 -msgid "Username" -msgstr "Benutzername" +#: share/completions/bundle.fish:101 +#, fuzzy +msgid "Check for newer pre-release gems" +msgstr "Test auf Speicher-Lecks" -#: init/completions/commandline.fish:1 -msgid "Add text to the end of the selected area" -msgstr "Text am Ende des selektierten Bereichs anfügen" +#: share/completions/bundle.fish:102 +msgid "Check against a specific source" +msgstr "" -#: init/completions/commandline.fish:2 -msgid "Add text at cursor" -msgstr "Text an Cursorposition hinzufügen" +#: share/completions/bundle.fish:103 +msgid "Use cached gems instead of attempting to fetch gems remotely" +msgstr "" -#: init/completions/commandline.fish:3 -msgid "Replace selected part" -msgstr "Selektierten Bereich ersetzen" +#: share/completions/bundle.fish:115 +msgid "The name to use for the generated file (see format option)" +msgstr "" -#: init/completions/commandline.fish:5 -msgid "Select job under cursor" -msgstr "Job unter Curser selektieren" +#: share/completions/bundle.fish:116 +#, fuzzy +msgid "Show each gem version" +msgstr "Version des Quellenbaumes" -#: init/completions/commandline.fish:6 -msgid "Select process under cursor" -msgstr "Prozess unter Cursor selektieren" +#: share/completions/bundle.fish:117 +msgid "Show the version of each required dependency" +msgstr "" -#: init/completions/commandline.fish:7 -msgid "Select token under cursor" -msgstr "Token unter dem Cursor selektieren" +#: share/completions/bundle.fish:118 +msgid "Output a specific format (png, jpg, svg, dot, ...)" +msgstr "" -#: init/completions/commandline.fish:8 -msgid "Select entire command line (default)" -msgstr "Vollständige Befehlszeile selektieren (Standard)" +#: share/completions/bundle.fish:121 +#, fuzzy +msgid "Generate a simple Gemfile, placed in the current directory" +msgstr "Nie ins übergeordnete Verzeichnis wechseln" -#: init/completions/commandline.fish:10 -msgid "Only return that part of the command line before the cursor" -msgstr "Nur Teil der Befehlszeile vor dem Curser zurückgeben" +#: share/completions/bundle.fish:122 +msgid "Use a specified .gemspec to create the Gemfile" +msgstr "" -#: init/completions/commandline.fish:11 -msgid "Inject readline functions to reader" -msgstr "readline-Funktion zum reader injizieren" +#: share/completions/bundle.fish:126 +msgid "Generate a binary for your library" +msgstr "" -#: init/completions/complete.fish:1 -msgid "Command to add completion to" -msgstr "Befehl, bei dem Vervollständigung genutzt werden soll" +#: share/completions/bundle.fish:127 +msgid "Generate a test directory for your library (rspec or minitest)" +msgstr "" -#: init/completions/complete.fish:2 -msgid "Path to add completion to" -msgstr "Pfad, bei dem Vervollständigung berücksichtigt werden soll" +#: share/completions/bundle.fish:128 +msgid "Path to your editor" +msgstr "" -#: init/completions/complete.fish:3 -msgid "Posix-style option to complete" -msgstr "zu vervollständigende Option im Posix-Format" +#: share/completions/bundle.fish:132 +msgid "Only display Ruby directive information" +msgstr "" -#: init/completions/complete.fish:4 -msgid "GNU-style option to complete" -msgstr "zu vervollständigende Option im GNU-Format" +#: share/completions/bundle.fish:136 +msgid "Only print out changes, do not actually clean gems" +msgstr "" -#: init/completions/complete.fish:5 -msgid "Old style long option to complete" -msgstr "zu vervollständigende lange Option im alten Format" +#: share/completions/bundle.fish:137 +msgid "Forces clean even if --path is not set" +msgstr "" -#: init/completions/complete.fish:6 -msgid "Do not use file completion" -msgstr "Keine Dateinamenvervollständigung benutzen" +#: share/completions/configure.fish:1 +#: share/functions/__fish_complete_diff.fish:27 +#: share/functions/__fish_complete_grep.fish:22 +#: share/functions/__fish_complete_ls.fish:95 +#: share/functions/__fish_complete_tex.fish:4 +msgid "Display help and exit" +msgstr "Hilfe anzeigen und beenden" -#: init/completions/complete.fish:7 -msgid "Require parameter" -msgstr "Parameter anfordern" - -#: init/completions/complete.fish:8 -msgid "Require parameter and do not use file completion" -msgstr "Parameter anfordern und keine Dateivervollständigung verwenden" - -#: init/completions/complete.fish:9 -msgid "A list of possible arguments" -msgstr "Eine Liste möglicher Argumente" - -#: init/completions/complete.fish:10 -msgid "Description of this completions" -msgstr "Beschreibung dieser Vervollständigung" - -#: init/completions/complete.fish:11 -msgid "Option list is not complete" -msgstr "Optionsliste ist nicht vollständig" - -#: init/completions/complete.fish:12 -msgid "Remove completion" -msgstr "Vervollständigung entfernen" - -#: init/completions/configure.fish:4 +#: share/completions/configure.fish:4 msgid "Cache test results in specified file" msgstr "Testergebnisse in angegebener Datei zwischenspeichern" -#: init/completions/configure.fish:5 -msgid "Cache test results in file config.cache" -msgstr "Testergebnisse in Datei config.cache zwischenspeichern" +#: share/completions/cp.fish:10 share/completions/mv.fish:6 +msgid "Backup suffix" +msgstr "Endung für Sicherung" -#: init/completions/configure.fish:6 -msgid "Do not create output files" -msgstr "Keine Ausgabedateien erstellen" +#: share/completions/cp.fish:20 +#, fuzzy +msgid "Don't preserve the specified attributes" +msgstr "Grössen-Attribute nicht prüfen" -#: init/completions/configure.fish:7 -msgid "Set source directory" -msgstr "Quellverzeichnis eintragen" +#: share/completions/cp.fish:24 +#, fuzzy +msgid "Control creation of sparse files" +msgstr "Sparse-Dateien bearbeiten" -#: init/completions/configure.fish:8 -msgid "Architecture-independent install directory" -msgstr "Architekturunabhängiges Installationsverzeichnis" +#: share/completions/cp.fish:28 +msgid "Set security context of copy to CONTEXT" +msgstr "" -#: init/completions/configure.fish:9 -msgid "Architecture-dependent install directory" -msgstr "Architekturabhängiges Installationsverzeichnis" - -#: init/completions/configure.fish:10 -msgid "Configure for building on BUILD" -msgstr "Konfiguration für das Erstellen auf BUILD" - -#: init/completions/configure.fish:11 -msgid "Cross-compile to build programs to run on HOST" -msgstr "Cross-Kompilierung zur Programmerstellung auf RECHNER" - -#: init/completions/configure.fish:12 -msgid "Configure for building compilers for TARGET" -msgstr "Konfiguration zur Kompilererstellung für ZIEL" - -#: init/completions/cut.fish:1 -msgid "Ouput byte range" +#: share/completions/cut.fish:2 +#, fuzzy +msgid "Output byte range" msgstr "Bytebereich ausgeben" -#: init/completions/cut.fish:2 +#: share/completions/cut.fish:3 msgid "Output character range" msgstr "Zeichenbereich ausgeben" -#: init/completions/cut.fish:3 +#: share/completions/cut.fish:4 msgid "Select field delimiter" -msgstr "Feldbegrenzer auswählen" +msgstr "Feldbegrenzer auswählen" -#: init/completions/cut.fish:4 +#: share/completions/cut.fish:5 msgid "Select fields" -msgstr "Felder auswählen" +msgstr "Felder auswählen" -#: init/completions/cut.fish:5 -msgid "Dont split mutibyte characters" -msgstr "Multibytezeichen nicht trennen" +#: share/completions/cvs.fish:26 +#, fuzzy +msgid "Use \\tmpdir for temporary files." +msgstr "tmpdir für temporäre Dateien benutzen" -#: init/completions/cut.fish:6 -msgid "Do not print lines without delimiter" -msgstr "Zeilen nicht ohne Begrenzer ausgeben" +#: share/completions/cvs.fish:27 +#, fuzzy +msgid "Use \\editor for editing log information." +msgstr "Editor zum Editieren der Loginformation verwenden" -#: init/completions/cut.fish:7 -msgid "Select output delimiter" -msgstr "Ausgabebegrenzer festlegen" +#: share/completions/cvs.fish:28 +#, sh-format +msgid "Overrides $CVSROOT as the root of the CVS tree." +msgstr "" -#: init/completions/cvs.fish:5 +#: share/completions/cvs.fish:30 +#, fuzzy +msgid "Request compression level \\# for net traffic." +msgstr "Komprimierungsgrad für Netzverkehr" + +#: share/completions/cvs.fish:35 +#, fuzzy +msgid "Set CVS user variable." +msgstr "CVS-Benutzervariable festlegen" + +#: share/completions/cvs.fish:41 msgid "Add a new file/directory to the repository" -msgstr "Neue/s Datei/Verzeichnis zum Paketdepot hinzufügen" +msgstr "Neue/s Datei/Verzeichnis zum Paketdepot hinzufügen" -#: init/completions/cvs.fish:6 +#: share/completions/cvs.fish:42 msgid "Administration front end for rcs" -msgstr "Administrationsoberfläche für rcs" +msgstr "Administrationsoberfläche für rcs" -#: init/completions/cvs.fish:7 +#: share/completions/cvs.fish:43 msgid "Show last revision where each line was modified" -msgstr "Letzte Revision anzeigen, bei der jede Zeile verändert wurde" +msgstr "Letzte Revision anzeigen, bei der jede Zeile verändert wurde" -#: init/completions/cvs.fish:8 +#: share/completions/cvs.fish:44 msgid "Checkout sources for editing" msgstr "Quellen zum Editieren auschecken" -#: init/completions/cvs.fish:9 +#: share/completions/cvs.fish:45 msgid "Check files into the repository" -msgstr "Dateien in das Paketdepot übertragen" +msgstr "Dateien in das Paketdepot übertragen" -#: init/completions/cvs.fish:10 +#: share/completions/cvs.fish:46 msgid "Show differences between revisions" msgstr "Unterschiede zwischen Revisionen anzeigen" -#: init/completions/cvs.fish:11 +#: share/completions/cvs.fish:47 msgid "Get ready to edit a watched file" msgstr "Vorbereitung zum Editieren einer beobachteten Datei" -#: init/completions/cvs.fish:12 +#: share/completions/cvs.fish:48 msgid "See who is editing a watched file" msgstr "Anzeigen, von wem eine beobachtete Datei editiert wird" -#: init/completions/cvs.fish:13 +#: share/completions/cvs.fish:49 msgid "Export sources from CVS, similar to checkout" -msgstr "Quellen aus CVS exportieren, ähnelt checkout" +msgstr "Quellen aus CVS exportieren, ähnelt checkout" -#: init/completions/cvs.fish:14 +#: share/completions/cvs.fish:50 msgid "Show repository access history" msgstr "Zugriffsverlauf des Paketdepots anzeigen" -#: init/completions/cvs.fish:15 +#: share/completions/cvs.fish:51 msgid "Import sources into CVS, using vendor branches" msgstr "Quellen in CVS importieren, verwende Herstellerzweige" -#: init/completions/cvs.fish:16 -msgid "Create a CVS repository if it doesnt exist" +#: share/completions/cvs.fish:52 +#, fuzzy +msgid "Create a CVS repository if it doesn\\t" msgstr "CVS-Paketdepot erstellen, wenn es nicht existiert" -#: init/completions/cvs.fish:17 -msgid "Kerberos server mode" -msgstr "Kerberos-Servermodus" - -#: init/completions/cvs.fish:18 -msgid "Print out history information for files" -msgstr "Verlaufsinformationen für Dateien ausgeben" - -#: init/completions/cvs.fish:19 -msgid "Prompt for password for authenticating server" -msgstr "Abfrage des Passworts für den Authentifizierungsserver" - -#: init/completions/cvs.fish:20 -msgid "Removes entry in .cvspass for remote repository" -msgstr "Einträge in .cvspass für entferntes Paketdepot entfernen" - -#: init/completions/cvs.fish:21 -msgid "Password server mode" -msgstr "Passwort für Server-Modus" - -#: init/completions/cvs.fish:22 -msgid "Show last revision where each line of module was modified" -msgstr "Zeige letzte Revision, bei der jede Modulzeile verändert wurde" - -#: init/completions/cvs.fish:23 -msgid "Create patch format diffs between releases" -msgstr "Erstelle Diffs zwischen Veröffentlichungen im Patch-Format" - -#: init/completions/cvs.fish:24 -msgid "Indicate that a Module is no longer in use" -msgstr "Anzeigen, das ein Modul nicht mehr benutzt wird" - -#: init/completions/cvs.fish:25 -msgid "Remove an entry from the repository" -msgstr "Einen Eintrag aus dem Paketdepot entfernen" - -#: init/completions/cvs.fish:26 -msgid "Print out history information for a module" -msgstr "Verlaufsinformationen für ein Modul ausgeben" - -#: init/completions/cvs.fish:27 -msgid "Add a symbolic tag to a module" -msgstr "Einem Modul eine symbolische Markierung hinzufügen" - -#: init/completions/cvs.fish:28 -msgid "Server mode" -msgstr "Server-Modus" - -#: init/completions/cvs.fish:29 -msgid "Display status information on checked out files" -msgstr "Statusinformationen zu ausgecheckten Dateien anzeigen" - -#: init/completions/cvs.fish:30 -msgid "Add a symbolic tag to checked out version of files" +#: share/completions/cvs.fish:91 +msgid "Set comment leader." msgstr "" -"Der Version von ausgecheckten Dateien eine symbolische Markierung hinzufügen" -#: init/completions/cvs.fish:31 -msgid "Undo an edit command" -msgstr "Bearbeiten-Befehl rückgängig machen" +#: share/completions/cvs.fish:94 +#, fuzzy +msgid "Set keyword substitution mode:" +msgstr "Befehlsersetzungsblock" -#: init/completions/cvs.fish:32 -msgid "Bring work tree in sync with repository" -msgstr "Arbeitsbaum mit Paketdepot synchronisieren" +#: share/completions/cvs.fish:97 +msgid "Replace revision\\s" +msgstr "" -#: init/completions/cvs.fish:34 -msgid "Set watches" -msgstr "Dateibeobachtungen festlegen" +#: share/completions/cvs.fish:135 +msgid "Check out revision or tag. (implies -P) (is sticky)" +msgstr "" -#: init/completions/cvs.fish:35 -msgid "See who is watching a file" -msgstr "Anzeigen, wer eine Datei beobachtet" +#: share/completions/cvs.fish:136 +msgid "Check out revisions as of date. (implies -P) (is sticky)" +msgstr "" -#: init/completions/cvs.fish:37 -msgid "Displays usage information for command" -msgstr "Zeigt Benutzungsinformation für den Befehl" +#: share/completions/cvs.fish:137 +msgid "Check out into dir instead of module name." +msgstr "" -#: init/completions/cvs.fish:38 -msgid "Cause CVS to be really quiet" -msgstr "Veranlasst CVS, wirklich still zu sein" +#: share/completions/cvs.fish:138 +msgid "Use RCS kopt -k option on checkout. (is sticky)" +msgstr "" -#: init/completions/cvs.fish:39 -msgid "Cause CVS to be somewhat quiet" -msgstr "Veranlasst CVS, etwas stiller zu sein" +#: share/completions/cvs.fish:139 +msgid "Merge in changes made between current revision and rev." +msgstr "" -#: init/completions/cvs.fish:40 -msgid "Make checked-out files read-only" -msgstr "Ausgecheckte Dateien mit Schreibschutz versehen" +#: share/completions/cvs.fish:150 +#, fuzzy +msgid "Read the log message from file." +msgstr "Paket aus Datei lesen" -#: init/completions/cvs.fish:41 -msgid "Make checked-out files read-write (default)" -msgstr "Ausgecheckte Dateien beschreibbar machen (Standard)" +#: share/completions/cvs.fish:151 +msgid "Log message." +msgstr "" -#: init/completions/cvs.fish:42 -msgid "Do not execute anything that will change the disk" -msgstr "Nichts ausführen, was Änderungen auf die Platte schreibt" +#: share/completions/cvs.fish:152 +msgid "Commit to this branch or trunk revision." +msgstr "" -#: init/completions/cvs.fish:43 -msgid "Show trace of program execution -- try with -n" -msgstr "Programmablauf anzeigen -- versuchen Sie -n" +#: share/completions/cvs.fish:161 +#, fuzzy +msgid "Specify keyword expansion mode." +msgstr "Kernel-Version angeben" -#: init/completions/cvs.fish:45 -msgid "Use tmpdir for temporary files" -msgstr "tmpdir für temporäre Dateien benutzen" +#: share/completions/cvs.fish:162 +msgid "Diff revision for date against working file." +msgstr "" -#: init/completions/cvs.fish:46 -msgid "Use editor for editing log information" -msgstr "Editor zum Editieren der Loginformation verwenden" +#: share/completions/cvs.fish:163 +msgid "Diff rev1/date1 against date2." +msgstr "" -#: init/completions/cvs.fish:48 -msgid "Do not use the ~/.cvsrc file" -msgstr "~/.cvsrc-Datei nicht benutzen" +#: share/completions/cvs.fish:164 +msgid "Diff revision for rev1 against working file." +msgstr "" -#: init/completions/cvs.fish:49 -msgid "Compression level for net traffic" -msgstr "Komprimierungsgrad für Netzverkehr" +#: share/completions/cvs.fish:165 +msgid "Diff rev1/date1 against rev2." +msgstr "" -#: init/completions/cvs.fish:50 -msgid "Encrypt all net traffic" -msgstr "Sämtlichen Netzverkehr verschlüsseln" +#: share/completions/cvs.fish:170 +#, fuzzy +msgid "--ignore-matching-lines=RE Ignore changes whose lines all match RE." +msgstr "Änderungen ignorieren, deren Zeilen dem reg. Ausdruck entsprechen" -#: init/completions/cvs.fish:51 -msgid "Authenticate all net traffic" -msgstr "Sämtlichen Netzverkehr authentifizieren" +#: share/completions/cvs.fish:176 +msgid "--label LABEL Use LABEL instead of file name." +msgstr "" -#: init/completions/cvs.fish:52 -msgid "Set CVS user variable" -msgstr "CVS-Benutzervariable festlegen" +#: share/completions/cvs.fish:178 +msgid "--show-function-line=RE Show the most recent line matching RE." +msgstr "" -#: init/completions/darcs.fish:28 -msgid "Create new project" -msgstr "Neues Projekt erstellen" +#: share/completions/cvs.fish:184 +msgid "--width=NUM Output at most NUM (default 130) characters per line." +msgstr "" -#: init/completions/darcs.fish:29 -msgid "Create a local copy of another repository" -msgstr "Eine lokale Kopie eines weiteren Paketdepots erstellen" +#: share/completions/cvs.fish:228 +msgid "Export tagged revisions." +msgstr "" -#: init/completions/darcs.fish:30 +#: share/completions/cvs.fish:229 +msgid "Export revisions as of date." +msgstr "" + +#: share/completions/cvs.fish:230 +msgid "Export into dir instead of module name." +msgstr "" + +#: share/completions/cvs.fish:231 +msgid "Use RCS kopt -k option on checkout." +msgstr "" + +#: share/completions/cvs.fish:241 +msgid "Look for specified module (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:242 +#, fuzzy +msgid "Extract by record type" +msgstr "Skript extrahieren" + +#: share/completions/cvs.fish:247 +#, fuzzy +msgid "Since date (Many formats)" +msgstr "Profildatenformat" + +#: share/completions/cvs.fish:248 +msgid "Back to record with str in module/file/repos field" +msgstr "" + +#: share/completions/cvs.fish:249 +msgid "Specified file (same as command line) (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:250 +msgid "In module (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:251 +msgid "In repository (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:252 +msgid "Since rev or tag (looks inside RCS files!)" +msgstr "" + +#: share/completions/cvs.fish:253 +msgid "Since tag record placed in history file (by anyone)." +msgstr "" + +#: share/completions/cvs.fish:254 +msgid "For user name (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:255 +msgid "Output for time zone (e.g. -z -0700)" +msgstr "" + +#: share/completions/darcs.fish:19 +#, fuzzy +msgid "Display help about darcs and darcs commands" +msgstr "Hilfe- und Debug-Optionen anzeigen" + +#: share/completions/darcs.fish:20 msgid "Add one or more new files or directories" -msgstr "Ein/mehrere neue Datei/en oder Verzeichnis/se hinzufügen" +msgstr "Ein/mehrere neue Datei/en oder Verzeichnis/se hinzufügen" -#: init/completions/darcs.fish:31 -msgid "Remove one or more files or directories from the repository" -msgstr "Ein oder mehrere Dateien/Verzeichnisse aus dem Paketdepot entfernen" +#: share/completions/darcs.fish:21 +#, fuzzy +msgid "Remove files from version control" +msgstr "Dateien nach Archivierung entfernen" -#: init/completions/darcs.fish:32 -msgid "Move/rename one or more files or directories" -msgstr "Eine/mehrere Datei/en oder Verzeichnis/se verschieben/umbenennen" +#: share/completions/darcs.fish:22 +#, fuzzy +msgid "Move or rename files" +msgstr "Datei nicht erstellen" -#: init/completions/darcs.fish:33 -msgid "Replace a token with a new value for that token" -msgstr "Merkmal mit einem neuen Wert für dieses Merkmal ersetzen" +#: share/completions/darcs.fish:23 +msgid "Substitute one word for another" +msgstr "" -#: init/completions/darcs.fish:34 -msgid "Save changes in the working copy to the repository as a patch" -msgstr "Änderungen der Arbeitskopie als Patch zum Paketdepot sichern" +#: share/completions/darcs.fish:24 +#, fuzzy +msgid "Discard unrecorded changes" +msgstr "Nicht aufgezeichnete Änderungen in der Arbeitskopie anzeigen" -#: init/completions/darcs.fish:35 -msgid "Copy and apply patches from another repository to this one" -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 Patches per E-Mail versenden" - -#: init/completions/darcs.fish:37 -msgid "Apply patches (from an email bundle) to the repository" -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" -msgstr "Patches von diesem Paketdepot auf ein anderes kopieren und anwenden" - -#: init/completions/darcs.fish:39 -msgid "Display unrecorded changes in the working copy" -msgstr "Nicht aufgezeichnete Änderungen in der Arbeitskopie anzeigen" - -#: init/completions/darcs.fish:40 -msgid "Gives a changelog style summary of the repo history" -msgstr "Gibt eine Zusammenfassung des Depotverlaufs ähnlich einem Changelog" - -#: init/completions/darcs.fish:41 -msgid "Remove recorded patches without changing the working copy" -msgstr "Aufgezeichnete Patche ohne Änderung der Arbeitskopie entfernen" - -#: init/completions/darcs.fish:42 -msgid "Replace a recorded patch with a better version" -msgstr "Einen aufgezeichneten Patch mit einer besseren Version ersetzen" - -#: init/completions/darcs.fish:43 -msgid "Revert to the recorded version (safe the first time only)" -msgstr "Zur aufgezeichneten Version zurück (nur beim ersten Mal sicher)" - -#: init/completions/darcs.fish:44 +#: share/completions/darcs.fish:25 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)" +"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" +#: share/completions/darcs.fish:26 +#, fuzzy +msgid "List unrecorded changes in the working tree" +msgstr "Nicht aufgezeichnete Änderungen in der Arbeitskopie anzeigen" + +#: share/completions/darcs.fish:27 +#, fuzzy +msgid "Create a patch from unrecorded changes" +msgstr "Komprimierte Patche erstellen" + +#: share/completions/darcs.fish:28 +msgid "Remove recorded patches without changing the working copy" +msgstr "Aufgezeichnete Patche ohne Änderung der Arbeitskopie entfernen" + +#: share/completions/darcs.fish:29 +#, fuzzy +msgid "Improve a patch before it leaves your repository" +msgstr "Einen Eintrag aus dem Paketdepot entfernen" + +#: share/completions/darcs.fish:30 +#, fuzzy +msgid "Mark unresolved conflicts in working tree, for manual resolution" +msgstr "Alle Konflikte in der Arbeitskopie für manuelle Resolution markieren" + +#: share/completions/darcs.fish:31 +msgid "Name the current repository state for future reference" 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 "Einen inversen Patch ohne Änderung der Arbeitskopie aufzeichnen" +#: share/completions/darcs.fish:32 +#, fuzzy +msgid "Set a preference (test, predist, boringfile or binariesfile)" +msgstr "Wert für eine Einstellung (test, predist, ...) festlegen" -#: init/completions/darcs.fish:47 -msgid "Tag the contents of the repository with a version name" -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 (test, predist, ...) festlegen" - -#: init/completions/darcs.fish:49 +#: share/completions/darcs.fish:33 msgid "Create a diff between two versions of the repository" msgstr "Diff zwischen zwei Versionen des Paketdepots erstellen" -#: init/completions/darcs.fish:50 +#: share/completions/darcs.fish:34 +#, fuzzy +msgid "List patches in the repository" +msgstr "Paketdepot aktualisieren" + +#: share/completions/darcs.fish:35 msgid "Display which patch last modified something" -msgstr "Anzeigen, welcher Patch zuletzt etwas veränderte" +msgstr "Anzeigen, welcher Patch zuletzt etwas veränderte" -#: init/completions/darcs.fish:51 -msgid "Optimize the repository" -msgstr "Paketdepot optimieren" - -#: init/completions/darcs.fish:52 -msgid "Check the repository for consistency" -msgstr "Paketdepot auf Konsistenz prüfen" - -#: init/completions/darcs.fish:53 -msgid "Mark any conflicts to the working copy for manual resolution" -msgstr "Alle Konflikte in der Arbeitskopie für manuelle Resolution markieren" - -#: init/completions/darcs.fish:54 +#: share/completions/darcs.fish:36 msgid "Create a distribution tarball" msgstr "Distributions-tarball erstellen" -#: init/completions/darcs.fish:55 +#: share/completions/darcs.fish:37 msgid "Locate the most recent version lacking an error" msgstr "Die aktuellste Version ohne Fehler suchen" -#: init/completions/darcs.fish:56 -msgid "Repair the corrupted repository" -msgstr "Defektes Paketdepot reparieren" +#: share/completions/darcs.fish:38 +msgid "Show information which is stored by darcs" +msgstr "" -#: init/completions/darcs.fish:61 -msgid "Shows brief description of command and its arguments" -msgstr "Kurze Beschreibung des Befehls und seiner Argumente anzeigen" +#: share/completions/darcs.fish:39 +msgid "Copy and apply patches from another repository to this one" +msgstr "Patches von einem anderen Paketdepot auf dieses kopieren und anwenden" -#: init/completions/darcs.fish:62 -msgid "Disable this command" -msgstr "Diesen Befehl deaktivieren" +#: share/completions/darcs.fish:40 +msgid "Delete selected patches from the repository. (UNSAFE!)" +msgstr "" -#: init/completions/darcs.fish:63 +#: share/completions/darcs.fish:41 +msgid "Record a new patch reversing some recorded changes" +msgstr "" + +#: share/completions/darcs.fish:42 +msgid "Copy and apply patches from this repository to another one" +msgstr "Patches von diesem Paketdepot auf ein anderes kopieren und anwenden" + +#: share/completions/darcs.fish:43 +msgid "Send by email a bundle of one or more patches" +msgstr "Zusammenfassung eines oder mehrerer Patches per E-Mail versenden" + +#: share/completions/darcs.fish:44 +msgid "" +"Apply a patch bundle created by `darcs send\\\n" +"complete -c darcs -n __fish_use_subcommand -x -a get --description Create" +msgstr "" + +#: share/completions/darcs.fish:71 share/completions/darcs.fish:220 +#: share/completions/darcs.fish:283 share/completions/darcs.fish:439 +#: share/completions/darcs.fish:597 share/completions/darcs.fish:632 +#: share/completions/darcs.fish:663 share/completions/darcs.fish:688 +#: share/completions/darcs.fish:801 share/completions/darcs.fish:959 +#: share/completions/darcs.fish:1010 share/completions/darcs.fish:1054 +#: share/completions/darcs.fish:1095 share/completions/darcs.fish:1122 +#: share/completions/darcs.fish:1155 +msgid "Specify command to run before this darcs command" +msgstr "" + +#: share/completions/darcs.fish:101 share/completions/darcs.fish:127 +#: share/completions/darcs.fish:156 share/completions/darcs.fish:186 +#: share/completions/darcs.fish:244 share/completions/darcs.fish:324 +#: share/completions/darcs.fish:363 share/completions/darcs.fish:406 +#: share/completions/darcs.fish:467 share/completions/darcs.fish:492 +#: share/completions/darcs.fish:840 share/completions/darcs.fish:1004 +#: share/completions/darcs.fish:1207 +msgid "Specify umask to use when writing" +msgstr "" + +#: share/completions/darcs.fish:102 share/completions/darcs.fish:128 +#: share/completions/darcs.fish:157 share/completions/darcs.fish:187 +#: share/completions/darcs.fish:245 share/completions/darcs.fish:326 +#: share/completions/darcs.fish:364 share/completions/darcs.fish:408 +#: share/completions/darcs.fish:468 share/completions/darcs.fish:493 +#: share/completions/darcs.fish:537 share/completions/darcs.fish:753 +#: share/completions/darcs.fish:841 share/completions/darcs.fish:893 +#: share/completions/darcs.fish:1183 share/completions/darcs.fish:1208 +#: share/completions/darcs.fish:1239 +msgid "Specify command to run after this darcs command" +msgstr "" + +#: share/completions/darcs.fish:116 share/completions/darcs.fish:146 +#: share/completions/darcs.fish:203 share/completions/darcs.fish:234 +#: share/completions/darcs.fish:264 share/completions/darcs.fish:352 +#: share/completions/darcs.fish:456 share/completions/darcs.fish:482 +#: share/completions/darcs.fish:525 share/completions/darcs.fish:725 +#: share/completions/darcs.fish:779 share/completions/darcs.fish:829 +#: share/completions/darcs.fish:870 share/completions/darcs.fish:985 +#: share/completions/darcs.fish:1073 share/completions/darcs.fish:1197 msgid "Specify the repository directory in which to run" msgstr "Das Paketdepotverzeichnis angeben, in dem gearbeitet wird" -#: init/completions/darcs.fish:71 -msgid "Name of patch" -msgstr "Name des Patch" +#: share/completions/darcs.fish:171 +#, fuzzy +msgid "Define token to contain these characters" +msgstr "Multibytezeichen nicht trennen" -#: init/completions/darcs.fish:72 init/completions/darcs.fish:171 +#: share/completions/darcs.fish:340 share/completions/darcs.fish:554 +#: share/completions/darcs.fish:767 +#, fuzzy +msgid "Select changes starting with a patch matching PATTERN" +msgstr "Patches entsprechend dem MUSTER auswählen" + +#: share/completions/darcs.fish:341 share/completions/darcs.fish:555 +#: share/completions/darcs.fish:768 +#, fuzzy +msgid "Select changes starting with a patch matching REGEXP" +msgstr "Dem REGEXP entsprechende Patche auswählen" + +#: share/completions/darcs.fish:342 share/completions/darcs.fish:556 +#: share/completions/darcs.fish:769 +#, fuzzy +msgid "Select changes starting with a tag matching REGEXP" +msgstr "Dem REGEXP entsprechende Markierungen auswählen" + +#: share/completions/darcs.fish:343 share/completions/darcs.fish:557 +#: share/completions/darcs.fish:770 +#, fuzzy +msgid "Select the last NUMBER patches" +msgstr "Lesen nach NUM Treffern beenden" + +#: share/completions/darcs.fish:344 share/completions/darcs.fish:559 +#: share/completions/darcs.fish:771 share/completions/darcs.fish:855 +#: share/completions/darcs.fish:907 +msgid "Select patches matching PATTERN" +msgstr "Patches entsprechend dem MUSTER auswählen" + +#: share/completions/darcs.fish:345 share/completions/darcs.fish:560 +#: share/completions/darcs.fish:772 share/completions/darcs.fish:856 +#: share/completions/darcs.fish:908 +msgid "Select patches matching REGEXP" +msgstr "Dem REGEXP entsprechende Patche auswählen" + +#: share/completions/darcs.fish:346 share/completions/darcs.fish:561 +#: share/completions/darcs.fish:773 share/completions/darcs.fish:857 +#: share/completions/darcs.fish:909 +msgid "Select tags matching REGEXP" +msgstr "Dem REGEXP entsprechende Markierungen auswählen" + +#: share/completions/darcs.fish:378 +#, fuzzy +msgid "Select a single patch matching PATTERN" +msgstr "Patches entsprechend dem MUSTER auswählen" + +#: share/completions/darcs.fish:379 +#, fuzzy +msgid "Select a single patch matching REGEXP" +msgstr "Dem REGEXP entsprechende Patche auswählen" + +#: share/completions/darcs.fish:380 +#, fuzzy +msgid "Select one patch" +msgstr "Eine Aktion auswählen" + +#: share/completions/darcs.fish:387 share/completions/darcs.fish:916 msgid "Specify author id" msgstr "Autorkennung angeben" -#: init/completions/darcs.fish:73 -msgid "Give patch name and comment in file" -msgstr "Patch-Name und Kommentar in Datei angeben" +#: share/completions/darcs.fish:388 +msgid "Name of patch" +msgstr "Name des Patch" -#: init/completions/darcs.fish:74 init/completions/darcs.fish:99 -#: init/completions/darcs.fish:122 init/completions/darcs.fish:170 -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" +#: share/completions/darcs.fish:501 +msgid "Shell command that runs regression tests" 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" -msgstr "Nach Fertigstellung Logdatei löschen" - -#: init/completions/darcs.fish:77 init/completions/darcs.fish:130 -#: init/completions/darcs.fish:162 -msgid "Don't give verbose output" -msgstr "Keine ausführliche Ausgabe" - -#: init/completions/darcs.fish:78 init/completions/darcs.fish:108 -#: init/completions/darcs.fish:138 init/completions/darcs.fish:153 -msgid "Don't run the test script" -msgstr "Das test-Skript nicht ausführen" - -#: init/completions/darcs.fish:79 init/completions/darcs.fish:107 -#: init/completions/darcs.fish:139 init/completions/darcs.fish:154 -msgid "Run the test script" -msgstr "Das test-Skript ausführen" - -#: init/completions/darcs.fish:80 init/completions/darcs.fish:141 -#: init/completions/darcs.fish:155 -msgid "Don't remove the test directory" -msgstr "Das test-Verzeichnis nicht entfernen" - -#: init/completions/darcs.fish:81 init/completions/darcs.fish:142 -#: init/completions/darcs.fish:156 -msgid "Remove the test directory" -msgstr "Das test-Verzeichnis entfernen" - -#: init/completions/darcs.fish:82 init/completions/darcs.fish:105 -#: init/completions/darcs.fish:132 -msgid "Create compressed patches" -msgstr "Komprimierte Patche erstellen" - -#: init/completions/darcs.fish:83 init/completions/darcs.fish:106 -#: init/completions/darcs.fish:133 -msgid "Don't create compressed patches" -msgstr "Keine komprimierten Patche erstellen" - -#: init/completions/darcs.fish:84 -msgid "Expect to receive input from a pipe" -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 "Benutzer interaktiv fragen" - -#: init/completions/darcs.fish:86 -msgid "Ask for extra dependencies" -msgstr "Nach zusätzlichen Abhängigkeiten fragen" - -#: init/completions/darcs.fish:87 -msgid "Don't ask for extra dependencies" -msgstr "Nicht nach zusätzlichen Abhängigkeiten fragen" - -#: init/completions/darcs.fish:88 -msgid "Edit the long comment by default" -msgstr "Standardmäßig den langen Kommentar editieren" - -#: init/completions/darcs.fish:89 -msgid "Don't give a long comment" -msgstr "Keinen langen Kommentar eingeben" - -#: init/completions/darcs.fish:90 -msgid "Prompt for whether to edit the long comment" -msgstr "Abfragen, ob der lange Kommentar editiert werden soll" - -#: init/completions/darcs.fish:91 init/completions/darcs.fish:112 -#: init/completions/darcs.fish:131 -msgid "Don't trust the file modification times" -msgstr "Nicht auf die Veränderungszeiten der Dateien vertrauen" - -#: init/completions/darcs.fish:92 +#: share/completions/darcs.fish:502 msgid "" -"Don't look for any files or directories that could be added, and don't add " -"them automatically" +"Shell command to run before `darcs dist\\\n" +"complete -c darcs -n contains" 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" -msgstr "Dem REGEXP entsprechende Patche auswählen" +#: share/completions/darcs.fish:551 share/completions/darcs.fish:1025 +#, fuzzy +msgid "Select changes up to a patch matching PATTERN" +msgstr "Patches entsprechend dem MUSTER auswählen" -#: init/completions/darcs.fish:98 init/completions/darcs.fish:169 -msgid "Select tags matching REGEXP" -msgstr "Dem REGEXP entsprechende Markierungen auswählen" +#: share/completions/darcs.fish:552 share/completions/darcs.fish:1026 +#, fuzzy +msgid "Select changes up to a patch matching REGEXP" +msgstr "Dem REGEXP entsprechende Patche auswählen" -#: init/completions/darcs.fish:100 init/completions/darcs.fish:174 -msgid "Summarize changes" -msgstr "Änderungen zusammenfassen" +#: share/completions/darcs.fish:553 +#, fuzzy +msgid "Select changes up to a tag matching REGEXP" +msgstr "Dem REGEXP entsprechende Markierungen auswählen" -#: init/completions/darcs.fish:101 init/completions/darcs.fish:149 -#: init/completions/darcs.fish:167 -msgid "Suppress informational output" -msgstr "Informationelle Ausgabe unterdrücken" +#: share/completions/darcs.fish:558 +#, fuzzy +msgid "Select a range of patches" +msgstr "Schnittstelle auswählen" -#: init/completions/darcs.fish:102 init/completions/darcs.fish:176 -msgid "Select patches matching PATTERN" -msgstr "Patches entsprechend dem MUSTER auswählen" +#: share/completions/darcs.fish:562 +msgid "Return only NUMBER results" +msgstr "" -#: init/completions/darcs.fish:103 init/completions/darcs.fish:128 +#: share/completions/darcs.fish:713 share/completions/darcs.fish:980 msgid "Use external tool to merge conflicts" msgstr "Externes Programm zum Mischen der Konflikte nutzen" -#: init/completions/darcs.fish:109 init/completions/darcs.fish:185 -msgid "Don't actually take the action" -msgstr "Aktion nicht tatsächlich ausführen" - -#: init/completions/darcs.fish:110 init/completions/darcs.fish:186 -msgid "Don't summarize changes" -msgstr "Änderungen nicht zusammenfassen" - -#: init/completions/darcs.fish:111 init/completions/darcs.fish:152 -#: init/completions/darcs.fish:175 -msgid "Neither verbose nor quiet output" -msgstr "Ausgabe weder ausführlich noch schweigsam" - -#: init/completions/darcs.fish:113 -msgid "Don't automatically fulfill dependencies" -msgstr "Nicht automatisch Abhängigkeiten erfüllen" - -#: init/completions/darcs.fish:114 init/completions/darcs.fish:189 -msgid "Set default repository [DEFAULT]" -msgstr "Standardpaketdepot [STANDARD] festlegen" - -#: init/completions/darcs.fish:115 init/completions/darcs.fish:190 -msgid "Don't set default repository" -msgstr "Standardpaketdepot nicht festlegen" - -#: init/completions/darcs.fish:116 init/completions/darcs.fish:143 -msgid "Make scripts executable" -msgstr "Skripte ausführbar machen" - -#: init/completions/darcs.fish:117 init/completions/darcs.fish:144 -msgid "Don't make scripts executable" -msgstr "Skripte nicht ausführbar machen" - -#: init/completions/darcs.fish:123 -msgid "Verify that the patch was signed by a key in PUBRING" +#: share/completions/darcs.fish:752 share/completions/darcs.fish:892 +#: share/completions/darcs.fish:1238 +msgid "Name of the darcs executable on the remote server" 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'" +#: share/completions/darcs.fish:864 share/completions/darcs.fish:923 +msgid "Sign the patch with a given keyid" +msgstr "Den Patch mit einer angegebenen Schlüsselkennung signieren" + +#: share/completions/darcs.fish:865 share/completions/darcs.fish:924 +msgid "Sign the patch using openssl with a given private key" msgstr "" -"Mittels openSSL und autorisierten Schlüsseln aus der Datei 'KEYS' überprüfen" +"Den Patch unter Benutzung von openssl mit einem privaten Schlüssel signieren" -#: init/completions/darcs.fish:125 init/completions/darcs.fish:191 -msgid "Specify sendmail command" -msgstr "sendmail-Befehl angeben" +#: share/completions/darcs.fish:886 +#, fuzzy +msgid "Specify the remote repository URL to work with" +msgstr "Das Paketdepotverzeichnis angeben, in dem gearbeitet wird" -#: init/completions/darcs.fish:126 -msgid "Reply to email-based patch using FROM address" -msgstr "Auf E-Mail-basierten Patch mittels FROM-Adresse antworten" +#: share/completions/darcs.fish:915 +msgid "Specify email address" +msgstr "E-Mail-Adresse angeben" -#: init/completions/darcs.fish:127 init/completions/darcs.fish:180 -msgid "Mail results to additional EMAIL(s). Requires --reply" -msgstr "Ergebnisse an zusätzliche EMAIL(s) senden. Erfordert --reply" - -#: init/completions/darcs.fish:129 -msgid "Don't verify patch signature" -msgstr "Patch-Signatur nicht überprüfen" - -#: init/completions/darcs.fish:135 -msgid "Mark conflicts" -msgstr "Konflikte markieren" - -#: init/completions/darcs.fish:136 -msgid "Allow conflicts, but don't mark them" -msgstr "Konflikte zulassen, sie aber nicht markieren" - -#: init/completions/darcs.fish:137 -msgid "Fail on patches that create conflicts [DEFAULT]" -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 Kopfzeile weiterleiten" - -#: init/completions/darcs.fish:150 -msgid "Check the entire repository" -msgstr "Das ganze Paketdepot prüfen" - -#: init/completions/darcs.fish:151 -msgid "Check patches since latest checkpoint" -msgstr "Patches seit letztem Prüfpunkt prüfen" - -#: 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 Groß-/Kleinschreibung unterscheiden, " -"nicht verweigern" - -#: init/completions/darcs.fish:172 -msgid "Specify output filename" -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" - -#: init/completions/darcs.fish:179 +#: share/completions/darcs.fish:917 msgid "Specify destination email" msgstr "Ziel-E-Mail-Adresse angeben" -#: init/completions/darcs.fish:181 -msgid "Sign the patch with your gpg key" -msgstr "Patch mit Ihrem gpg-Schlüssel signieren" +#: share/completions/darcs.fish:918 +#, fuzzy +msgid "Mail results to additional EMAIL(s)" +msgstr "Ergebnisse an zusätzliche EMAIL(s) senden. Erfordert --reply" -#: init/completions/darcs.fish:182 -msgid "Sign the patch with a given keyid" -msgstr "Den Patch mit einer angegebenen Schlüsselkennung signieren" +#: share/completions/darcs.fish:919 +#, fuzzy +msgid "Specify mail subject" +msgstr "makefile angeben" -#: 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" +#: share/completions/darcs.fish:920 +#, fuzzy +msgid "Specify in-reply-to header" +msgstr "Indexverzeichnis angeben" -#: init/completions/darcs.fish:184 -msgid "Do not sign the patch" -msgstr "Patch nicht signieren" +#: share/completions/darcs.fish:921 +msgid "Specify output filename" +msgstr "Ausgabedateiname angeben" -#: init/completions/darcs.fish:187 -msgid "Send to context stored in FILENAME" +#: share/completions/darcs.fish:995 +msgid "Reply to email-based patch using FROM address" +msgstr "Auf E-Mail-basierten Patch mittels FROM-Adresse antworten" + +#: share/completions/darcs.fish:996 +msgid "Mail results to additional EMAIL(s). Requires --reply" +msgstr "Ergebnisse an zusätzliche EMAIL(s) senden. Erfordert --reply" + +#: share/completions/darcs.fish:1027 +#, fuzzy +msgid "Select tag matching REGEXP" +msgstr "Dem REGEXP entsprechende Markierungen auswählen" + +#: share/completions/darcs.fish:1028 +#, fuzzy +msgid "Version specified by the context in FILENAME" msgstr "Kontext im DATEINAMEN abgespeichert senden" -#: init/completions/darcs.fish:188 -msgid "Edit the patch bundle description" -msgstr "Beschreibung des Patchpaketes editieren" +#: share/completions/darcs.fish:1083 +msgid "Apply patch as another user using sudo" +msgstr "" -#: init/completions/darcs.fish:195 -msgid "Use a plain pristine tree [DEFAULT]" -msgstr "Benutze einen unberührten Baum [Standard]" +#: share/completions/darcs.fish:1222 +msgid "--repodir=DIRECTORY" +msgstr "" -#: init/completions/darcs.fish:196 -msgid "Use no pristine tree" -msgstr "Keinen unberührten Baum verwenden" +#: share/completions/dcop.fish:34 +#, fuzzy +msgid "Show help about options" +msgstr "Hilfe- und Debug-Optionen anzeigen" -#: init/completions/date.fish:1 -msgid "Display date described by string" -msgstr "Datum gemäß Zeichenkette anzeigen" +#: share/completions/dcop.fish:35 +msgid "Connect to the given user's DCOP server" +msgstr "" -#: init/completions/date.fish:2 -msgid "Display date for each line in file" -msgstr "Für jede Zeile der Datei Datum anzeigen" +#: share/completions/dcop.fish:36 +msgid "Send the same DCOP call to all users with a running DCOP server" +msgstr "" -#: init/completions/date.fish:3 -msgid "Output in ISO 8601 format" -msgstr "Ausgabe im ISO 8601-Format" +#: share/completions/dcop.fish:37 +msgid "List all active KDE session for a user or all users" +msgstr "" -#: init/completions/date.fish:4 init/completions/touch.fish:9 -msgid "Set time" -msgstr "Zeit festlegen" +#: share/completions/dcop.fish:38 +msgid "Send to the given KDE session" +msgstr "" -#: init/completions/date.fish:5 -msgid "Output RFC-2822 compliant date string" -msgstr "Datumszeichenkette gemäß RFC-2822 ausgeben" +#: share/completions/dcop.fish:39 +msgid "Don't update the user activity timestamp in the called application" +msgstr "" -#: init/completions/date.fish:6 -msgid "Display the last modification time of file" -msgstr "Letzte Veränderungszeit der Datei anzeigen" +#: share/completions/dcop.fish:40 +#, fuzzy +msgid "Call DCOP for each line read from stdin" +msgstr "Lesen über Standardeingabe verhindern" -#: init/completions/date.fish:7 init/completions/date.fish:8 -msgid "Print or set Coordinated Universal Time" -msgstr "Koordinierte Universalzeit (CUT) ausgeben oder festlegen" - -#: init/completions/df.fish:17 init/completions/du.fish:7 -#: init/completions/ls.fish:22 -msgid "Human readable sizes" -msgstr "Lesbare Grössen" - -#: init/completions/df.fish:18 -msgid "List inode information" -msgstr "Inode-Information auflisten" - -#: init/completions/df.fish:19 init/completions/du.fish:9 -msgid "Use 1kB block size" -msgstr "Blockgrösse von 1kB verwenden" - -#: init/completions/df.fish:20 -msgid "List only local filesystems" -msgstr "Nur lokale Dateisysteme auflisten" - -#: init/completions/df.fish:21 -msgid "Use Posix format" -msgstr "Posix-Format verwenden" - -#: init/completions/df.fish:22 -msgid "Show filesystems of specified type" -msgstr "Dateisysteme des angegebenen Typs anzeigen" - -#: init/completions/df.fish:26 -msgid "Include empty filesystems" -msgstr "Leere Dateisysteme einschliessen" - -#: init/completions/df.fish:27 init/completions/du.fish:3 -#: init/completions/tar.fish:13 -msgid "Block size" -msgstr "Blockgrösse" - -#: init/completions/df.fish:28 init/completions/du.fish:8 -#: init/completions/ls.fish:55 -msgid "Human readable sizes, powers of 1000" -msgstr "Lesbare Grössen, vielfaches von 1000" - -#: init/completions/df.fish:29 -msgid "Do not sync before getting usage info" -msgstr "Vor Belegungsabruf keinen sync ausführen" - -#: init/completions/df.fish:30 -msgid "Sync before getting usage info" -msgstr "Vor Belegungsabruf sync ausführen" - -#: init/completions/df.fish:31 -msgid "Print filesystem type" -msgstr "Dateisystemtyp ausgeben" - -#: init/completions/df.fish:32 -msgid "Excluded filesystem type" -msgstr "Dateisystemtyp ausschliessen" - -#: init/completions/df.fish:38 -msgid "Show all filesystems" -msgstr "Alle Dateisysteme anzeigen" - -#: init/completions/df.fish:39 -msgid "Show sizes in gigabytes" -msgstr "Größe in Gigabyte anzeigen" - -#: init/completions/df.fish:40 -msgid "Show sizes in megabytes" -msgstr "Größe in Megabyte anzeigen" - -#: init/completions/df.fish:41 -msgid "Print out the previously obtained statistics from the file systems" -msgstr "Bisher erhaltene Statistiken über die Dateisysteme ausgeben" - -#: init/completions/diff.fish:2 -msgid "Ignore case differences" -msgstr "Unterschiede bei Groß-/Kleinschreibung ignorieren" - -#: init/completions/diff.fish:3 -msgid "Ignore case when comparing file names" -msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich ignorieren" - -#: init/completions/diff.fish:4 -msgid "Consider case when comparing file names" -msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich beachten" - -#: init/completions/diff.fish:5 -msgid "Ignore changes due to tab expansion" -msgstr "Änderungen aufgrund von Tabulatorausweitung ignorieren" - -#: init/completions/diff.fish:6 -msgid "Ignore changes in the amount of white space" -msgstr "Änderung in der Anzahl von Worttrennern ignorieren" - -#: init/completions/diff.fish:7 -msgid "Ignore all white space" -msgstr "white space (Worttrenner) ignorieren" - -#: init/completions/diff.fish:8 -msgid "Ignore changes whose lines are all blank" -msgstr "Änderungen ignorieren, deren Zeilen alle leer sind" - -#: init/completions/diff.fish:9 -msgid "Ignore changes whose lines match the REGEX" -msgstr "Änderungen ignorieren, deren Zeilen dem reg. Ausdruck entsprechen" - -#: init/completions/diff.fish:10 -msgid "Treat all files as text" -msgstr "Alle Dateien als Text behandeln" - -#: init/completions/diff.fish:11 -msgid "Recursively compare subdirectories" -msgstr "Unterverzeichnisse rekursiv vergleichen" - -#: init/completions/diff.fish:12 -msgid "Treat absent files as empty" -msgstr "Nicht vorhandene Dateien als leer behandeln" - -#: init/completions/diff.fish:13 -msgid "Output NUM lines of copied context" -msgstr "NUM Zeilen des kopierten Kontextes ausgeben" - -#: init/completions/diff.fish:14 -msgid "Output 3 lines of copied context" -msgstr "3 Zeilen des kopierten Kontextes ausgeben" - -#: init/completions/diff.fish:15 -msgid "Output NUM lines of unified context" -msgstr "NUM Zeilen des vereinheitlichten Kontextes ausgeben" - -#: init/completions/diff.fish:16 -msgid "Output 3 lines of unified context" -msgstr "3 Zeilen des vereinheitlichten Kontextes ausgeben" - -#: init/completions/diff.fish:17 -msgid "Output only whether the files differ" -msgstr "Nur Unterschiede der Dateien ausgeben" - -#: init/completions/diff.fish:18 -msgid "Output a normal diff" -msgstr "Normalen Diff ausgeben" - -#: init/completions/diff.fish:19 -msgid "Output in two columns" -msgstr "Ausgabe in zwei Spalten" - -#: init/completions/diff.fish:20 -msgid "Output at most NUM print columns" -msgstr "Gebe maximale NUM Druckspalten aus" - -#: init/completions/diff.fish:21 -msgid "Try to find a smaller set of changes" -msgstr "Versuche, eine kleinere Menge Änderungen zu finden" - -#: init/completions/diff.fish:22 -msgid "Compare FILE1 to all operands" +#: share/completions/dd.fish:5 +#, fuzzy +msgid "Complete dd operands" msgstr "Vergleiche FILE1 mit allen Operanden" -#: init/completions/diff.fish:23 -msgid "Compare FILE2 to all operands" -msgstr "Vergleiche FILE2 mit allen Operanden" +#: share/completions/df.fish:17 +#, fuzzy +msgid "Show file systems of specified type" +msgstr "Dateisysteme des angegebenen Typs anzeigen" -#: init/completions/diff.fish:24 -msgid "Pass the output through 'pr'" -msgstr "Ausgabe durch 'pr' schicken" +#: share/completions/df.fish:22 +msgid "Block size" +msgstr "Blockgrösse" -#: init/completions/du.fish:1 -msgid "Write size for all files" -msgstr "Größe für alle Dateien anzeigen" - -#: init/completions/du.fish:2 -msgid "Print file size, not disk usage" -msgstr "Dateigröße statt Plattenbelegung ausgeben" - -#: init/completions/du.fish:4 -msgid "Use 1B block size" -msgstr "1B-Blockgröße verwenden" - -#: init/completions/du.fish:5 -msgid "Produce grand total" -msgstr "Gesamtsumme erstellen" - -#: init/completions/du.fish:6 -msgid "Dereference file symlinks" -msgstr "Symbolische Links für Datei dereferenzieren" - -#: init/completions/du.fish:10 -msgid "Count hard links multiple times" -msgstr "Harte Links mehrfach zählen" - -#: init/completions/du.fish:11 -msgid "Dereference all symlinks" -msgstr "Alle symbolischen Links dereferenzieren" - -#: init/completions/du.fish:12 -msgid "Do not include subdirectory size" -msgstr "Unterverzeichnisgrösse nicht einschliessen" - -#: init/completions/du.fish:13 -msgid "Display only a total for each argument" -msgstr "Nur eine Gesamtsumme für jedes Argument anzeigen" - -#: init/completions/du.fish:14 -msgid "Skip other filesystems" -msgstr "Andere Dateisysteme überspringen" - -#: init/completions/du.fish:15 -msgid "Exclude files thet match pattern in file" +#: share/completions/du.fish:15 +#, fuzzy +msgid "Exclude files that match pattern in file" msgstr "Den Mustern in der Datei entsprechende Dateien ausschliessen" -#: init/completions/du.fish:16 +#: share/completions/du.fish:16 msgid "Exclude files that match pattern" msgstr "Dem Muster entsprechende Dateien ausschliessen" -#: init/completions/du.fish:17 +#: share/completions/du.fish:17 msgid "Recursion limit" msgstr "Rekursionsgrenze" -#: init/completions/echo.fish:1 -msgid "No newline" -msgstr "Kein Neue-Zeile-Zeichen" - -#: init/completions/echo.fish:2 -msgid "Use backslash escaped characters" -msgstr "Benutze per 'backslash (\\)'maskierte Zeichen " - -#: init/completions/echo.fish:3 -msgid "Do not use backslash escaped characters" -msgstr "Keine per 'backslash (\\)'maskierte Zeichen verwenden" - -#: init/completions/emacs.fish:4 -msgid "Do not load init files" -msgstr "Keine Init-Dateien laden" - -#: init/completions/emacs.fish:5 -msgid "Load users init file" -msgstr "Init-Datei des Benutzers laden" - -#: init/completions/emacs.fish:6 -msgid "Use file as terminal" -msgstr "Datei als Terminal benutzen" - -#: init/completions/emacs.fish:7 -msgid "Execute Lisp function" -msgstr "Lisp-Funktion ausführen" - -#: init/completions/emacs.fish:8 -msgid "Load Lisp code from file" -msgstr "Lisp-Code aus Datei laden" - -#: init/completions/emacs.fish:9 -msgid "Do not use X interface" -msgstr "X-Schnittstelle nicht verwenden" - -#: init/completions/emacs.fish:10 -msgid "Create window on the specified display" -msgstr "Fenster auf der angegebenen Anzeige erstellen" - -#: init/completions/fish.fish:1 -msgid "Run fish with this command" -msgstr "fish mit diesem Befehl ausführen" - -#: init/completions/fish.fish:4 -msgid "Run in interactive mode" -msgstr "Ausführung im interaktiven Modus" - -#: init/completions/fish.fish:5 -msgid "Output profiling information to specified file" -msgstr "Profilierungsinformation in angegebene Datei ausgeben" - -#: init/completions/function.fish:1 init/completions/functions.fish:5 -msgid "Set function description" -msgstr "Funktionsbeschreibung festlegen" - -#: init/completions/function.fish:4 -msgid "Make the function a job exit event handler" -msgstr "Funktion zur Ereignisbehandlung bei Jobende verwenden" - -#: init/completions/function.fish:5 -msgid "Make the function a process exit event handler" -msgstr "Funktion zur Ereignisbehandlung bei Prozessende verwenden" - -#: init/completions/function.fish:6 -msgid "Make the function a signal event handler" -msgstr "Funktion zur Signalereignisbehandlung verwenden" - -#: init/completions/function.fish:7 -msgid "Make the function a variable update event handler" -msgstr "Funktion zur Ereignisbehandlung bei Variablenaktualisierung verwenden" - -#: init/completions/functions.fish:1 -msgid "Erase function" -msgstr "Funktion löschen" - -#: init/completions/functions.fish:3 -msgid "Show hidden functions" -msgstr "Versteckte Funktionen anzeigen" - -#: init/completions/gcc.fish:5 -msgid "Language" -msgstr "Sprache" - -#: init/completions/gcc.fish:23 -msgid "Pass program exit codes" -msgstr "Rückkehrcodes des Programms weiterreichen" - -#: init/completions/gcc.fish:24 -msgid "Stop after assembler" -msgstr "Nach Assemblierung anhalten" - -#: init/completions/gcc.fish:25 -msgid "Stop after compile" -msgstr "Nach Kompilierung anhalten" - -#: init/completions/gcc.fish:26 -msgid "Stop after preprocesswor" -msgstr "Nach Präprozessordurchlauf anhalten" - -#: init/completions/gcc.fish:27 -msgid "Output file" -msgstr "Ausgabedatei" - -#: init/completions/gcc.fish:28 -msgid "Print commands to stderr" -msgstr "Befehle auf Standardfehlerausgabe ausgeben" - -#: init/completions/gcc.fish:29 -msgid "Print quoted commands to stderr, do not run" -msgstr "Maskierte Befehle auf Standardfehlerausgabe ausgeben, nicht ausführen" - -#: init/completions/gcc.fish:30 -msgid "Use pipes" -msgstr "Pipes benutzen" - -#: init/completions/gcc.fish:31 -msgid "Use ansi mode" -msgstr "Ansi-Modus benutzen" - -#: init/completions/gcc.fish:32 -msgid "Standard mode" -msgstr "Standardmodus" - -#: init/completions/gcc.fish:46 -msgid "Write prototypes to file" -msgstr "Prototypen in Datei schreiben" - -#: init/completions/gcc.fish:47 -msgid "Do not recognize asm, inline or typeof keywords" -msgstr "Schlüsselworte asm, inline oder typeof nicht erkennen" - -#: init/completions/gcc.fish:48 -msgid "Do not use builtin functions" -msgstr "Keine eingebauten Funktionen verwenden" - -#: init/completions/gcc.fish:49 -msgid "Assert hosted environment" -msgstr "Gehostete Umgebung bestätigen" - -#: init/completions/gcc.fish:50 -msgid "Assert freestanding environment" -msgstr "Freistehende Umgebung bestätigen" - -#: init/completions/gcc.fish:51 -msgid "Use Microsoft extensions" -msgstr "Microsoft-Erweiterungen verwenden" - -#: init/completions/gcc.fish:52 -msgid "Use ANSI trigraphs" -msgstr "ANSI-Trigraphen verwenden" - -#: init/completions/gcc.fish:53 -msgid "Do not use integrated preprocessor" -msgstr "Integrierten Präprozessor nicht verwenden" - -#: init/completions/gcc.fish:54 -msgid "char is unsigned" -msgstr "char ist nicht vorzeichenbehaftet" - -#: init/completions/gcc.fish:55 -msgid "char is signed" -msgstr "char ist vorzeichenbehaftet" - -#: init/completions/gcc.fish:56 -msgid "bitfield is unsigned" -msgstr "Bitfeld ist nicht vorzeichenbehaftet" - -#: init/completions/gcc.fish:57 -msgid "bitfield is signed" -msgstr "Bitfeld ist vorzeichenbehaftet" - -#: init/completions/gcc.fish:58 -msgid "All bitfields are signed" -msgstr "Alle Bitfielder sind vorzeichenbehaftet" - -#: init/completions/gcc.fish:59 -msgid "All bitfields are unsigned" -msgstr "Alle Bitfielder sind nicht vorzeichenbehaftet" - -#: init/completions/gcc.fish:60 init/completions/gcc.fish:65 -msgid "String constants are not const" -msgstr "Zeichenkettenkonstanten sind nicht const" - -#: init/completions/gcc.fish:61 -msgid "C++ ABI version" -msgstr "C++ ABI-Version" - -#: init/completions/gcc.fish:62 -msgid "Turn off access checking" -msgstr "Zugriffsprüfung abschalten" - -#: init/completions/gcc.fish:63 -msgid "Check pointer returned by new" -msgstr "Durch new zurückgegebenen Zeiger prüfen" - -#: init/completions/gcc.fish:64 -msgid "Put globals in the common segment" -msgstr "Globalwerte im Common-Segment einfügen" - -#: init/completions/gcc.fish:66 -msgid "Accept $ in identifiers" -msgstr "In Bezeichnern $ akzeptieren" - -#: init/completions/gcc.fish:67 -msgid "Reject $ in identifiers" -msgstr "In Bezeichnern $ nicht akzeptieren" - -#: init/completions/gcc.fish:68 -msgid "Do not omit unneeded temporarys" -msgstr "Temporäre Dateien nicht auslassen" - -#: init/completions/gcc.fish:69 -msgid "Allow exception violations" -msgstr "Erlaube Ausnahmeverletzungen" - -#: init/completions/gcc.fish:70 -msgid "Do not extend for-loop scope" -msgstr "Bereich für for-Schleife nicht erweitern" - -#: init/completions/gcc.fish:71 -msgid "Extend for-loop scope" -msgstr "Bereich für for-Schleife erweitern" - -#: init/completions/gcc.fish:72 -msgid "Do not recognize typeof as keyword" -msgstr "typeof nicht als Schlüsselwort erkennen" - -#: init/completions/gcc.fish:73 -msgid "Do not emit code for implicit templates" -msgstr "Keinen Code für implizite Vorlagen abgeben" - -#: init/completions/gcc.fish:74 -msgid "Do not emit code for implicit inline templates" -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 "Keinen Code für abweichende 'inline'-Funktionen abgeben" - -#: init/completions/gcc.fish:76 -msgid "Disable warnings about MFC" -msgstr "Warnungen über MFC deaktivieren" - -#: init/completions/gcc.fish:77 -msgid "Disable some built-in functions" -msgstr "Einige eingebaute Funktionen deaktivieren" - -#: init/completions/gcc.fish:78 -msgid "Disable operator keywords" -msgstr "Operater-Schlüsselworte deaktivieren" - -#: init/completions/gcc.fish:79 -msgid "Disable optional diagnostics" -msgstr "Optionale Diagnostikmeldungen deaktivieren" - -#: init/completions/gcc.fish:80 -msgid "Downgrade some errors to warnings" -msgstr "Einge Fehler zu Warnungen herabstufen" - -#: init/completions/gcc.fish:81 -msgid "Enable automatic template instantiation at link time" -msgstr "Automatische Vorlageninstanziierung zur Linkzeit aktivieren" - -#: init/completions/gcc.fish:82 -msgid "Disable generation of C++ runtime type information" -msgstr "Generierung von C++-Laufzeit-Typinformationen deaktivieren" - -#: init/completions/gcc.fish:86 -msgid "Set maximum template depth to %s" +#: share/completions/duply.fish:5 +#, fuzzy +msgid "Profile" +msgstr "Datei" + +#: share/completions/duply.fish:6 +msgid "Get usage help text" +msgstr "" + +#: share/completions/duply.fish:9 +#, fuzzy +msgid "Creates a configuration profile" +msgstr "Konfigurationsdatei festlegen" + +#: share/completions/duply.fish:10 +msgid "Backup with pre/post script execution" +msgstr "" + +#: share/completions/duply.fish:11 +#, fuzzy +msgid "Backup without executing pre/post scripts" +msgstr "Keine post-Skripte ausführen" + +#: share/completions/duply.fish:12 +#, fuzzy +msgid "Execute /pre script" +msgstr "Keine pre-Skripte ausführen" + +#: share/completions/duply.fish:13 +#, fuzzy +msgid "Execute /post script" +msgstr "Keine post-Skripte ausführen" + +#: share/completions/duply.fish:14 +msgid "Force full backup" +msgstr "" + +#: share/completions/duply.fish:15 +msgid "Force incremental backup" +msgstr "" + +#: share/completions/duply.fish:16 +msgid "List all files in backup (as it was at , default: now)" +msgstr "" + +#: share/completions/duply.fish:17 +msgid "Prints backup sets and chains currently in repository" +msgstr "" + +#: share/completions/duply.fish:18 +msgid "List files changed since latest backup" +msgstr "" + +#: share/completions/duply.fish:19 +msgid "Shows outdated backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:20 +msgid "Shows outdated backups [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:21 +msgid "Shows broken backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:22 +msgid "Restore the backup to [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:23 +msgid "Restore single file/folder from backup [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:26 +msgid "Really execute the commands: purge, purge-full, cleanup" +msgstr "" + +#: share/completions/duply.fish:27 +msgid "Do nothing but print out generated duplicity command lines" +msgstr "" + +#: share/completions/duply.fish:28 +msgid "Calculate what would be done, but dont perform any actions" +msgstr "" + +#: share/completions/duply.fish:29 +msgid "Dont abort when backup different dirs to the same backend" +msgstr "" + +#: share/completions/duply.fish:30 +#, fuzzy +msgid "Output verbosity level" +msgstr "Ausführlichkeitswert auf 0 zurücksetzen" + +#: share/completions/emerge.fish:5 share/completions/equery.fish:5 +msgid "" +"Prints completions for installed packages on the system from /var/db/pkg" +msgstr "" + +#: share/completions/emerge.fish:12 share/completions/equery.fish:12 +msgid "" +"Prints completions for all available packages on the system from /usr/portage" +msgstr "" + +#: share/completions/emerge.fish:19 +#, fuzzy +msgid "" +"Tests if emerge command should have an installed package as potential " +"completion" +msgstr "" +"Testen, ob der apt-Befehl Pakete zur möglichen Fertigstellung haben sollte" + +#: share/completions/emerge.fish:30 share/completions/emerge.fish:31 +#, fuzzy +msgid "All base system packages" +msgstr "Erstellte Pakete löschen" + +#: share/completions/emerge.fish:30 share/completions/emerge.fish:31 +#, fuzzy +msgid "All packages in world" +msgstr "Installierte Pakete synchronisieren" + +#: share/completions/emerge.fish:30 +#, fuzzy +msgid "Installed package" +msgstr "Neues Paket installieren" + +#: share/completions/emerge.fish:31 +#: share/functions/__fish_print_packages.fish:13 +msgid "Package" +msgstr "Paket" + +#: share/completions/emerge.fish:35 +msgid "Usage overview of emerge" +msgstr "" + +#: share/completions/emerge.fish:35 +msgid "Help on subject system" +msgstr "" + +#: share/completions/emerge.fish:35 +#, fuzzy +msgid "Help on subject config" +msgstr "Hilfeabschnitt zu %s" + +#: share/completions/emerge.fish:35 +msgid "Help on subject sync" +msgstr "" + +#: share/completions/emerge.fish:57 +#, fuzzy +msgid "Use colors in output" +msgstr "Farben benutzen" + +#: share/completions/emerge.fish:57 +#, fuzzy +msgid "Don't use colors in output" +msgstr "Keine ausführliche Ausgabe" + +#: share/completions/emerge.fish:81 +#, fuzzy +msgid "Pull in build time dependencies" +msgstr "Erstellungsabhängigkeiten anzeigen" + +#: share/completions/emerge.fish:81 +#, fuzzy +msgid "Don't pull in build time dependencies" +msgstr "Nicht automatisch Abhängigkeiten erfüllen" + +#: share/completions/env.fish:2 +#, fuzzy +msgid "Redefine variable" +msgstr "Variable löschen" + +#: share/completions/equery.fish:19 +msgid "" +"Prints completions for all available categories on the system from /usr/" +"portage" +msgstr "" + +#: share/completions/equery.fish:38 +#, fuzzy +msgid "list all packages owning file(s)" +msgstr "Pakete auflisten, die abhängen von " + +#: share/completions/equery.fish:39 +msgid "check MD5sums and timestamps of package" +msgstr "" + +#: share/completions/equery.fish:40 +#, fuzzy +msgid "list all packages depending on specified package" +msgstr "Pakete auflisten, die abhängen von " + +#: share/completions/equery.fish:41 +#, fuzzy +msgid "display a dependency tree for package" +msgstr "Abhängigkeiten für dieses Paket auflisten" + +#: share/completions/equery.fish:42 +#, fuzzy +msgid "list files owned by package" +msgstr "Dateien im Paket auflisten" + +#: share/completions/equery.fish:43 +#, fuzzy +msgid "list all packages with specified useflag" +msgstr "Ein (deinstalliertes) Paket in der angegebenen Datei abfragen" + +#: share/completions/equery.fish:44 +#, fuzzy +msgid "list all packages matching pattern" +msgstr "Inhalte eines Paketes auflisten, das dem Muster entspricht" + +#: share/completions/equery.fish:45 +#, fuzzy +msgid "print size of files contained in package" +msgstr "Die im Paket enthaltenen Auslöser-Skripte anzeigen" + +#: share/completions/equery.fish:46 +#, fuzzy +msgid "display USE flags for package" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" + +#: share/completions/equery.fish:47 +#, fuzzy +msgid "print full path to ebuild for package" +msgstr "Vollständigen Quellpfad ausgeben" + +#: share/completions/fusermount.fish:15 share/completions/sshfs.fish:27 +#, fuzzy +msgid "Mount options" +msgstr "Einhäng-Option" + +#: share/completions/gcc.fish:25 +#, fuzzy +msgid "Set maximum template depth" msgstr "Maximale Mustertiefe auf %s festlegen" -#: init/completions/gcc.fish:89 -msgid "Do not emit code for thread-safe initialization of local statics" +#: share/completions/gcc.fish:31 share/completions/gcc.fish:513 +msgid "Use dir as the logical root directory for headers and libraries" msgstr "" -"Keinen Code für die threadsichere Initialisierung lokaler statischer Objekte " -"abgeben" -#: init/completions/gcc.fish:90 -msgid "Use __cxa_atexit for destructors" -msgstr "Benutze __cxa_atexit für Destruktoren" - -#: init/completions/gcc.fish:91 -msgid "Hides inline methods from export table" -msgstr "Versteckt 'inline'-Methoden aus der Exporttabelle" - -#: init/completions/gcc.fish:92 -msgid "Do not use weak symbol support" -msgstr "Unterstützung für schwache Symbole nich verwenden" - -#: init/completions/gpg.fish:48 -msgid "Make a signature" -msgstr "Signatur erstellen" - -#: init/completions/gpg.fish:49 -msgid "Make a clear text signature" -msgstr "Klartextsignatur erstellen" - -#: init/completions/gpg.fish:50 -msgid "Make a detached signature" -msgstr "Abgehängte Signatur erstellen" - -#: init/completions/gpg.fish:51 -msgid "Encrypt data" -msgstr "Daten verschlüsseln" - -#: init/completions/gpg.fish:52 -msgid "Encrypt with a symmetric cipher using a passphrase" -msgstr "" -"Verschlüsseln mit einem symmetrischen Verschlüsselungsverfahren mittels eines " -"Passwortsatzes" - -#: init/completions/gpg.fish:53 -msgid "Store only (make a simple RFC1991 packet)" -msgstr "Nur speichern (einfaches RFC1991-Paket erzeugen)" - -#: init/completions/gpg.fish:54 -msgid "Decrypt specified file or stdin" -msgstr "Angegebene Datei oder Standardeingabe entschlüsseln" - -#: 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" - -#: 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'" -msgstr "Entspricht '--multifile --verify'" - -#: init/completions/gpg.fish:58 -msgid "Identical to '--multifile --encrypt'" -msgstr "Entspricht '--multifile --encrypt'" - -#: init/completions/gpg.fish:59 -msgid "Identical to --multifile --decrypt" -msgstr "Entspricht '--multifile --decrypt'" - -#: init/completions/gpg.fish:61 init/completions/gpg.fish:62 +#: share/completions/gcc.fish:261 msgid "" -"List all keys from the public keyrings, or just the ones given on the command " -"line" +"Print the full absolute name of the library file library that would be used " +"when linking---and don\\t" msgstr "" -"Alle Schlüssel der öffentlichen Schlüsselringe auflisten oder nur diejenigen, " -"die auf der Befehlszeile angegeben wurden" -#: init/completions/gpg.fish:63 +#: share/completions/gcc.fish:512 msgid "" -"List all keys from the secret keyrings, or just the ones given on the command " -"line" +"Process file after the compiler reads in the standard specs file, in order " +"to override the defaults that the gcc driver program uses when determining " +"what switches to pass to cc1, cc1plus, as, ld, etc" 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" -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" - -#: init/completions/gpg.fish:67 -msgid "List all keys with their fingerprints" -msgstr "Alle Schlüssel mit ihren Fingerabdrücken ausgeben" - -#: init/completions/gpg.fish:68 -msgid "Generate a new key pair" -msgstr "Ein neues Schlüsselpaar erstellen" - -#: init/completions/gpg.fish:70 -msgid "Present a menu which enables you to do all key related tasks" -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" -msgstr "Einen öffentlichen Schlüssel mit Ihrem geheimen Schlüssel signieren" - -#: 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" - -#: init/completions/gpg.fish:75 -msgid "Remove key from the public keyring" -msgstr "Entferne Schlüssel vom öffentlichen Schlüsselring" - -#: init/completions/gpg.fish:76 -msgid "Remove key from the secret and public keyring" -msgstr "Entferne Schlüssel vom geheimen und öffentlichen Schlüsselring" - -#: init/completions/gpg.fish:77 +#: share/completions/gcc.fish:539 share/completions/gcc.fish:540 +#: share/completions/gcc.fish:541 msgid "" -"Same as --delete-key, but if a secret key exists, it will be removed first" +"This specifies what floating point hardware (or hardware emulation) is " +"available on the target" 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" -msgstr "Generiere ein Widerrufszertifikat für den ganzen Schlüssel" - -#: init/completions/gpg.fish:80 -msgid "Generate a designated revocation certificate for a key" -msgstr "Generiere ein vorgesehenes Widerrufszertifikat für einen Schlüssel" - -#: init/completions/gpg.fish:82 -msgid "Export all or the given keys from all keyrings" -msgstr "Alle oder angegebene Schlüssel aus allen Schlüsselringen exportieren" - -#: 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ü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" - -#: init/completions/gpg.fish:87 init/completions/gpg.fish:88 -msgid "Import/merge keys" -msgstr "Schlüssel importieren/mischen" - -#: init/completions/gpg.fish:90 -msgid "Import the keys with the given key IDs from a keyserver" -msgstr "" -"Schlüssel mit den angegebenen Schlüsselkennungen von einem Schlüsselserver " -"importieren" - -#: init/completions/gpg.fish:91 +#: share/completions/gcc.fish:542 msgid "" -"Request updates from a keyserver for keys that already exist on the local " -"keyring" +"The size of all structures and unions will be rounded up to a multiple of " +"the number of bits set by this option" 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üsselserver nach den angegebenen Namen durchsuchen" +#: share/completions/gcc.fish:548 +msgid "Specify the register to be used for PIC addressing" +msgstr "" -#: init/completions/gpg.fish:93 -msgid "Do trust database maintenance" -msgstr "Wartung der Vertrauensdatenbank durchführen" +#: share/completions/gcc.fish:556 +msgid "Specify the access model for the thread local storage pointer" +msgstr "" -#: init/completions/gpg.fish:94 -msgid "Do trust database maintenance without user interaction" -msgstr "Wartung der Vertrauensdatenbank ohne Benutzerbeteiligung durchführen" +#: share/completions/gcc.fish:557 +msgid "Specify ATMEL AVR instruction set or MCU type" +msgstr "" -#: init/completions/gpg.fish:96 -msgid "Send the ownertrust values to stdout" -msgstr "Eigentümervertrauenswerte auf Standardausgabe schicken" - -#: init/completions/gpg.fish:97 +#: share/completions/gcc.fish:559 msgid "" -"Update the trustdb with the ownertrust values stored in specified files or " -"stdin" +"Specify the initial stack address, which may be a symbol or numeric value, " +"__stack is the default" 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 "Signaturcache im Schlüsselring erstellen" - -#: init/completions/gpg.fish:101 +#: share/completions/gcc.fish:574 msgid "" -"Print message digest of specified algorithm for all given files or stdin" +"Specified the identification number of the ID based shared library being " +"compiled" 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" +#: share/completions/gem.fish:12 +msgid "Build a gem from a gemspec" 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" +#: share/completions/gem.fish:13 +msgid "Adjust RubyGems certificate settings" msgstr "" -"Angegebene Anzahl zufälliger Bytes des gegebenen Qualitätsgrades ausgeben" -#: init/completions/gpg.fish:106 -msgid "Display version and supported algorithms, and exit" -msgstr "Version und unterstützte Algorithmen anzeigen und beenden" +#: share/completions/gem.fish:14 +#, fuzzy +msgid "Check installed gems" +msgstr "Installierte Pakete abfragen" -#: init/completions/gpg.fish:107 -msgid "Display warranty and exit" -msgstr "Gewährleistung anzeigen und beenden" +#: share/completions/gem.fish:15 +msgid "Cleanup old versions of installed gems in the local repository" +msgstr "" -#: init/completions/gpg.fish:115 -msgid "Create ASCII armored output" -msgstr "Erstelle ASCII-bewehrte Ausgabe" +#: share/completions/gem.fish:16 +#, fuzzy +msgid "Display the contents of the installed gems" +msgstr "Namen aller Signale anzeigen" -#: init/completions/gpg.fish:116 +#: share/completions/gem.fish:17 +#, fuzzy +msgid "Show the dependencies of an installed gem" +msgstr "Vor dem Deinstallieren der Pakete keine Abhängigkeiten prüfen" + +#: share/completions/gem.fish:18 +msgid "Display RubyGems environmental information" +msgstr "" + +#: share/completions/gem.fish:19 +#, fuzzy +msgid "Provide help on the 'gem' command" +msgstr "Hilfe für den Befehl '%s'" + +#: share/completions/gem.fish:20 +#, fuzzy +msgid "Install a gem into the local repository" +msgstr "Dateien in das Paketdepot übertragen" + +#: share/completions/gem.fish:21 +msgid "Display all gems whose name starts with STRING" +msgstr "" + +#: share/completions/gem.fish:22 +#, fuzzy +msgid "Query gem information in local or remote repositories" +msgstr "Einträge in .cvspass für entferntes Paketdepot entfernen" + +#: share/completions/gem.fish:23 +msgid "Generates RDoc for pre-installed gems" +msgstr "" + +#: share/completions/gem.fish:24 +msgid "Display all gems whose name contains STRING" +msgstr "" + +#: share/completions/gem.fish:25 +#, fuzzy +msgid "Display gem specification (in yaml)" +msgstr "Letzte Veränderungszeit der Datei anzeigen" + +#: share/completions/gem.fish:26 +#, fuzzy +msgid "Uninstall a gem from the local repository" +msgstr "Einen Eintrag aus dem Paketdepot entfernen" + +#: share/completions/gem.fish:27 +#, fuzzy +msgid "Unpack an installed gem to the current directory" +msgstr "Nie ins übergeordnete Verzeichnis wechseln" + +#: share/completions/gem.fish:28 +msgid "Update the named gem (or all installed gems) in the local repository" +msgstr "" + +#: share/completions/gem.fish:35 +msgid "Use URL as the remote source for gems" +msgstr "" + +#: share/completions/gem.fish:36 +msgid "Use the given HTTP proxy for remote operations" +msgstr "" + +#: share/completions/gem.fish:37 +#, fuzzy +msgid "Use no HTTP proxy for remote operations" +msgstr "root-Verzeichnis für rpm-Operationen angeben" + +#: share/completions/gem.fish:38 +#, fuzzy +msgid "Get help on this command" +msgstr "Hilfe für den Befehl '%s'" + +#: share/completions/gem.fish:39 +#, fuzzy +msgid "Set the verbose level of output" +msgstr "Ausführlichkeitswert auf 0 zurücksetzen" + +#: share/completions/gem.fish:40 +#, fuzzy +msgid "Use this config file instead of default" +msgstr "Angegebene Datei anstelle der Standardvertrauensdatenbank nutzen" + +#: share/completions/gem.fish:41 +msgid "Show stack backtrace on errors" +msgstr "" + +#: share/completions/gem.fish:42 +#, fuzzy +msgid "Turn on Ruby debugging" +msgstr "Entfernung der Zusatzinformationen abschalten" + +#: share/completions/gem.fish:47 +msgid "Add a trusted certificate" +msgstr "" + +#: share/completions/gem.fish:48 +#, fuzzy +msgid "List trusted certificates" +msgstr "Vertraute Schlüssel auflisten" + +#: share/completions/gem.fish:49 +msgid "Remove trusted certificates containing STRING" +msgstr "" + +#: share/completions/gem.fish:50 +msgid "Build private key and self-signed certificate for EMAIL_ADDR" +msgstr "" + +#: share/completions/gem.fish:51 +msgid "Certificate for --sign command" +msgstr "" + +#: share/completions/gem.fish:52 +msgid "Private key for --sign command" +msgstr "" + +#: share/completions/gem.fish:53 +msgid "Sign a certificate with my key and certificate" +msgstr "" + +#: share/completions/gem.fish:58 +msgid "Verify gem file against its internal checksum" +msgstr "" + +#: share/completions/gem.fish:59 +#, fuzzy +msgid "Report 'unmanaged' or rogue files in the gem repository" +msgstr "Ein oder mehrere Dateien/Verzeichnisse aus dem Paketdepot entfernen" + +#: share/completions/gem.fish:60 +msgid "Run unit tests for gem" +msgstr "" + +#: share/completions/gem.fish:61 +#, fuzzy +msgid "Specify version for which to run unit tests" +msgstr "Das Paketdepotverzeichnis angeben, in dem gearbeitet wird" + +#: share/completions/gem.fish:66 +#, fuzzy +msgid "Don't really cleanup" +msgstr "Nicht wirklich deinstallieren" + +#: share/completions/gem.fish:71 +#, fuzzy +msgid "List the files inside a Gem" +msgstr "Dateien im Paket auflisten" + +#: share/completions/gem.fish:72 +#, fuzzy +msgid "Specify version for gem to view" +msgstr "Ziel-E-Mail-Adresse angeben" + +#: share/completions/gem.fish:73 +msgid "Search for gems under specific paths" +msgstr "" + +#: share/completions/gem.fish:74 +msgid "Be verbose when showing status" +msgstr "" + +#: share/completions/gem.fish:79 share/completions/gem.fish:172 +#, fuzzy +msgid "Specify version of gem to uninstall" +msgstr "Liste zu installierender Pakete" + +#: share/completions/gem.fish:80 +#, fuzzy +msgid "Include reverse dependencies in the output" +msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" + +#: share/completions/gem.fish:81 +#, fuzzy +msgid "Don't include reverse dependencies in the output" +msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" + +#: share/completions/gem.fish:82 +msgid "Pipe Format (name --version ver)" +msgstr "" + +#: share/completions/gem.fish:87 +#, fuzzy +msgid "display the package version" +msgstr "Paketsatz anzeigen" + +#: share/completions/gem.fish:87 +msgid "display the path where gems are installed" +msgstr "" + +#: share/completions/gem.fish:87 +#, fuzzy +msgid "display path used to search for gems" +msgstr "Zeige den für eine Nachricht benutzten Sitzungsschlüssel an" + +#: share/completions/gem.fish:87 +#, fuzzy +msgid "display the gem format version" +msgstr "Sektion für Dateiformate" + +#: share/completions/gem.fish:87 +#, fuzzy +msgid "display the remote gem servers" +msgstr "Datei zum Zugriff auf Server" + +#: share/completions/gem.fish:92 +#, fuzzy +msgid "list all 'gem' commands" +msgstr "Diesen Befehl deaktivieren" + +#: share/completions/gem.fish:92 +msgid "show some examples of usage" +msgstr "" + +#: share/completions/gem.fish:97 +#, fuzzy +msgid "Specify version of gem to install" +msgstr "Liste zu installierender Pakete" + +#: share/completions/gem.fish:98 share/completions/gem.fish:121 +#: share/completions/gem.fish:131 share/completions/gem.fish:150 +#: share/completions/gem.fish:158 +msgid "Restrict operations to the LOCAL domain (default)" +msgstr "" + +#: share/completions/gem.fish:99 share/completions/gem.fish:122 +#: share/completions/gem.fish:132 share/completions/gem.fish:151 +#: share/completions/gem.fish:159 +msgid "Restrict operations to the REMOTE domain" +msgstr "" + +#: share/completions/gem.fish:100 share/completions/gem.fish:123 +#: share/completions/gem.fish:133 share/completions/gem.fish:152 +#: share/completions/gem.fish:160 +msgid "Allow LOCAL and REMOTE operations" +msgstr "" + +#: share/completions/gem.fish:101 share/completions/gem.fish:182 +msgid "Gem repository directory to get installed gems" +msgstr "" + +#: share/completions/gem.fish:102 share/completions/gem.fish:183 +msgid "Generate RDoc documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:103 share/completions/gem.fish:184 +msgid "Don't generate RDoc documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:104 share/completions/gem.fish:185 +msgid "Generate RI documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:105 share/completions/gem.fish:186 +msgid "Don't generate RI documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:106 share/completions/gem.fish:187 +msgid "Force gem to install, bypassing dependency checks" +msgstr "" + +#: share/completions/gem.fish:107 share/completions/gem.fish:188 +#, fuzzy +msgid "Don't force gem to install, bypassing dependency checks" +msgstr "Keine Abhängigkeiten prüfen" + +#: share/completions/gem.fish:108 share/completions/gem.fish:189 +msgid "Run unit tests prior to installation" +msgstr "" + +#: share/completions/gem.fish:109 share/completions/gem.fish:190 +#, fuzzy +msgid "Don't run unit tests prior to installation" +msgstr "Vor der Installation nicht auf ausreichenden Plattenplatz prüfen" + +#: share/completions/gem.fish:110 share/completions/gem.fish:191 +#, fuzzy +msgid "Use bin wrappers for executables" +msgstr "Datei ist ausführbar" + +#: share/completions/gem.fish:111 share/completions/gem.fish:192 +#, fuzzy +msgid "Don't use bin wrappers for executables" +msgstr "Skripte nicht ausführbar machen" + +#: share/completions/gem.fish:112 share/completions/gem.fish:193 +#, fuzzy +msgid "Specify gem trust policy" +msgstr "Vertrauensmodell angeben" + +#: share/completions/gem.fish:113 share/completions/gem.fish:194 +msgid "Do not install any required dependent gems" +msgstr "" + +#: share/completions/gem.fish:114 share/completions/gem.fish:195 +msgid "Unconditionally install the required dependent gems" +msgstr "" + +#: share/completions/gem.fish:119 share/completions/gem.fish:129 +#: share/completions/gem.fish:148 +#, fuzzy +msgid "Display detailed information of gem(s)" +msgstr "Zeigt Benutzungsinformation für den Befehl" + +#: share/completions/gem.fish:120 share/completions/gem.fish:130 +#: share/completions/gem.fish:149 +#, fuzzy +msgid "Don't display detailed information of gem(s)" +msgstr "Zeigt Benutzungsinformation für den Befehl" + +#: share/completions/gem.fish:128 +msgid "Name of gem(s) to query on matches the provided REGEXP" +msgstr "" + +#: share/completions/gem.fish:138 +msgid "Generate RDoc/RI documentation for all installed gems" +msgstr "" + +#: share/completions/gem.fish:139 +msgid "Include RDoc generated documents" +msgstr "" + +#: share/completions/gem.fish:140 +msgid "Don't include RDoc generated documents" +msgstr "" + +#: share/completions/gem.fish:141 +msgid "Include RI generated documents" +msgstr "" + +#: share/completions/gem.fish:142 +msgid "Don't include RI generated documents" +msgstr "" + +#: share/completions/gem.fish:143 +msgid "Specify version of gem to rdoc" +msgstr "" + +#: share/completions/gem.fish:157 +#, fuzzy +msgid "Specify version of gem to examine" +msgstr "Ziel-E-Mail-Adresse angeben" + +#: share/completions/gem.fish:161 +msgid "Output specifications for all versions of the gem" +msgstr "" + +#: share/completions/gem.fish:166 +#, fuzzy +msgid "Uninstall all matching versions" +msgstr "Alle Versionen ausgeben" + +#: share/completions/gem.fish:167 +#, fuzzy +msgid "Don't uninstall all matching versions" +msgstr "Nicht wirklich deinstallieren" + +#: share/completions/gem.fish:168 +msgid "Ignore dependency requirements while uninstalling" +msgstr "" + +#: share/completions/gem.fish:169 +#, fuzzy +msgid "Don't ignore dependency requirements while uninstalling" +msgstr "Vor dem Deinstallieren der Pakete keine Abhängigkeiten prüfen" + +#: share/completions/gem.fish:170 +msgid "Uninstall applicable executables without confirmation" +msgstr "" + +#: share/completions/gem.fish:171 +msgid "Don't uninstall applicable executables without confirmation" +msgstr "" + +#: share/completions/gem.fish:177 +msgid "Specify version of gem to unpack" +msgstr "" + +#: share/completions/gem.fish:196 +msgid "Update the RubyGems system software" +msgstr "" + +#: share/completions/git.fish:121 share/completions/git.fish:144 +msgid "Branch" +msgstr "" + +#: share/completions/git.fish:145 +#, fuzzy +msgid "Tag" +msgstr "Ziel" + +#: share/completions/gpg.fish:116 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" - -#: init/completions/gpg.fish:120 -msgid "Use specified key as the key to sign with" -msgstr "Angegebenen Schlüssel als Schlüssel zum Signieren verwenden" - -#: init/completions/gpg.fish:121 -msgid "Use specified key as the default key to sign with" -msgstr "Angegebenen Schlüssel als Standardschlüssel zum Signieren verwenden" - -#: init/completions/gpg.fish:123 -msgid "Encrypt for specified user id" -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 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 Benutzerkennung als Standardempfänger benutzen" - -#: init/completions/gpg.fish:126 -msgid "Use the default key as default recipient" -msgstr "Standardschlüssel als Standardempfänger benutzen" - -#: init/completions/gpg.fish:127 -msgid "Reset --default-recipient and --default-recipient-self" -msgstr "--default-recipient und --default-recipient-self zurücksetzen" - -#: init/completions/gpg.fish:129 -msgid "Give more information during processing" -msgstr "Während der Verarbeitung zusätzliche Informationen ausgeben" - -#: init/completions/gpg.fish:132 init/completions/gpg.fish:133 -#: init/completions/gpg.fish:134 -msgid "Compression level" -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" - -#: 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 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 Standardzeilenendungen CRLF" - -#: init/completions/gpg.fish:140 -msgid "Don't make any changes (this is not completely implemented)" -msgstr "Keine Änderungen vornehmen (dies ist nicht vollständig implementiert)" - -#: init/completions/gpg.fish:142 init/completions/mv.fish:3 -msgid "Prompt before overwrite" -msgstr "Vor Überschreiben nachfragen" - -#: init/completions/gpg.fish:144 init/completions/scp.fish:28 -#: init/completions/top.fish:2 -msgid "Batch mode" -msgstr "Stapelverarbeitungsmodus" - -#: init/completions/gpg.fish:145 -msgid "Don't use batch mode" -msgstr "Stapelverarbeitungsmodus nicht verwenden" - -#: init/completions/gpg.fish:146 -msgid "Never write output to terminal" -msgstr "Niemals Ausgaben aufs Terminal schreiben" - -#: init/completions/gpg.fish:148 -msgid "Assume yes on most questions" -msgstr "Ja als Standardantwort annehmen" - -#: init/completions/gpg.fish:149 -msgid "Assume no on most questions" -msgstr "Nein als Standardantwort annehmen" - -#: init/completions/gpg.fish:151 -msgid "Prompt for a certification level when making a key signature" -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 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 "" -"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 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" - -#: init/completions/gpg.fish:157 -msgid "Specify trust model" -msgstr "Vertrauensmodell angeben" - -#: init/completions/gpg.fish:159 -msgid "Select how to display key IDs" -msgstr "Wählen Sie aus, wie Schlüsselkennungen angezeigt werden sollen" - -#: init/completions/gpg.fish:161 +#: share/completions/gpg.fish:161 msgid "Use specified keyserver" -msgstr "Angegebenen Schlüsselserver verwenden" +msgstr "Angegebenen Schlüsselserver verwenden" -#: init/completions/gpg.fish:162 -msgid "Options for the keyserver" -msgstr "Optionen für den Schlüsselserver" - -#: init/completions/gpg.fish:164 -msgid "Options for importing keys" -msgstr "Optionen zum Importieren von Schlüsseln" - -#: init/completions/gpg.fish:165 -msgid "Options for exporting keys" -msgstr "Optionen zum Exportieren von Schlüsseln" - -#: init/completions/gpg.fish:166 -msgid "Options for listing keys and signatures" -msgstr "Optionen zum Auflisten von Schlüsseln und Signaturen" - -#: init/completions/gpg.fish:167 -msgid "Options for verifying signatures" -msgstr "Optionen zum Überprüfen von Signaturen" - -#: init/completions/gpg.fish:169 +#: share/completions/gpg.fish:169 msgid "The command line that should be run to view a photo ID" msgstr "Befehlszeile, die zum Betrachten einer Fotokennung benutzt werden soll" -#: init/completions/gpg.fish:170 +#: share/completions/gpg.fish:170 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" +"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 " -"welchem Schlüsselring sich ein gegebener Schlüssel befindet" - -#: init/completions/gpg.fish:173 +#: share/completions/gpg.fish:173 msgid "Add specified file to the current list of keyrings" -msgstr "Angegebene Datei zur aktuellen Schlüsselringliste hinzufügen" +msgstr "Angegebene Datei zur aktuellen Schlüsselringliste hinzufügen" -#: init/completions/gpg.fish:175 +#: share/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" +"Angegebene Datei zur aktuellen Liste geheimer Schlüsselringe hinzufügen" -#: init/completions/gpg.fish:176 +#: share/completions/gpg.fish:176 msgid "Designate specified file as the primary public keyring" -msgstr "Angegebene Datei als primären öffentlichen Schlüsselring bestimmen" +msgstr "Angegebene Datei als primären öffentlichen Schlüsselring bestimmen" -#: init/completions/gpg.fish:178 +#: share/completions/gpg.fish:178 msgid "Use specified file instead of the default trustdb" msgstr "Angegebene Datei anstelle der Standardvertrauensdatenbank nutzen" -#: init/completions/gpg.fish:179 -msgid "Set the home directory" -msgstr "Startverzeichnis festlegen" - -#: init/completions/gpg.fish:180 -msgid "Set the native character set" -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" - -#: 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 " -"bestimmten Zeichensatz kodiert sind" - -#: init/completions/gpg.fish:184 +#: share/completions/gpg.fish:184 msgid "Read options from specified file, do not read the default options file" msgstr "Optionen aus angegebener Datei lesen, Standardoptionsdatei nicht lesen" -#: init/completions/gpg.fish:185 -msgid "Shortcut for '--options /dev/null'" -msgstr "Abkürzung für '--options /dev/null'" - -#: init/completions/gpg.fish:186 +#: share/completions/gpg.fish:186 msgid "Load an extension module" msgstr "Erweiterungsmodul laden" -#: init/completions/gpg.fish:188 +#: share/completions/gpg.fish:188 msgid "Write special status strings to the specified file descriptor" msgstr "" "Spezielle Statusmeldungen auf den angegebenen Dateideskriptor schreiben" -#: init/completions/gpg.fish:189 +#: share/completions/gpg.fish:189 msgid "Write log output to the specified file descriptor" msgstr "Protokollausgabe auf angegebenen Dateideskriptor schreiben" -#: init/completions/gpg.fish:190 -msgid "Write attribute subpackets to the specified file descriptor" -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 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 mit " -"einschließen" - -#: init/completions/gpg.fish:195 +#: share/completions/gpg.fish:195 msgid "Use specified string as comment string" msgstr "Angegebene Zeichenkette als Kommentar verwenden" -#: init/completions/gpg.fish:196 -msgid "Don't use a comment string" -msgstr "Keinen Kommentar verwenden" - -#: init/completions/gpg.fish:198 -msgid "Include the version string in ASCII armored output" -msgstr "Version in ASCII-bewehrte Ausgabe einfügen" - -#: init/completions/gpg.fish:199 -msgid "Don't include the version string in ASCII armored output" -msgstr "Version nicht in ASCII-bewehrter Ausgabe einfügen" - -#: init/completions/gpg.fish:204 +#: share/completions/gpg.fish:204 msgid "Put the specified name value pair into the signature as notation data" -msgstr "Das angegebene Wertepaar als Notationsdaten in die Signatur einfügen" +msgstr "Das angegebene Wertepaar als Notationsdaten in die Signatur einfügen" -#: init/completions/gpg.fish:205 +#: share/completions/gpg.fish:205 msgid "Set signature policy" msgstr "Signaturregeln festlegen" -#: init/completions/gpg.fish:206 +#: share/completions/gpg.fish:206 msgid "Set certificate policy" msgstr "Zertifikatsregeln festlegen" -#: init/completions/gpg.fish:207 +#: share/completions/gpg.fish:207 msgid "Set signature and certificate policy" msgstr "Signatur- und Zertifikatsregeln festlegen" -#: init/completions/gpg.fish:208 +#: share/completions/gpg.fish:208 msgid "Use specified URL as a preferred keyserver for data signatures" msgstr "" -"Angegebene URL als bevorzugten Schlüsselserver für Datensignaturen benutzen" +"Angegebene URL als bevorzugten Schlüsselserver für Datensignaturen benutzen" -#: init/completions/gpg.fish:210 +#: share/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" -#: init/completions/gpg.fish:212 -msgid "Set the 'for your eyes only' flag in the message" -msgstr "Die 'for your eyes only'-Markierung in der Nachricht setzen" - -#: init/completions/gpg.fish:213 -msgid "Clear the 'for your eyes only' flag in the message" -msgstr "Die 'for your eyes only'-Markierung in der Nachricht löschen" - -#: init/completions/gpg.fish:215 -msgid "Create file with name as given in data" -msgstr "Datei mit in den Daten enthaltenem Namen erstellen" - -#: init/completions/gpg.fish:216 -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 +#: share/completions/gpg.fish:218 msgid "" -"Number of completely trusted users to introduce a new key signer (defaults to " -"1)" +"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)" +"Anzahl der vollständig vertrauenswürdigen Benutzer, um einen neuen " +"Schlüsselunterzeichner einzuführen (Standard ist 1)" -#: init/completions/gpg.fish:219 +#: share/completions/gpg.fish:219 msgid "" -"Number of marginally trusted users to introduce a new key signer (defaults to " -"3)" +"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)" +"Anzahl der beschränkt vertrauenswürdigen Benutzer, um einen neuen " +"Schlüsselunterzeichner einzuführen (Standard ist 3)" -#: init/completions/gpg.fish:221 +#: share/completions/gpg.fish:221 msgid "Maximum depth of a certification chain (default is 5)" msgstr "Maximale Tiefe einer Zertifizierungskette (Standard 5)" -#: init/completions/gpg.fish:223 -msgid "Use specified cipher algorithm" -msgstr "Benutze angegebenen Verschlüsselungsalgorithmus" - -#: init/completions/gpg.fish:224 -msgid "Use specified message digest algorithm" -msgstr "Angegebenen Message-Digest-Algorithmus verwenden" - -#: init/completions/gpg.fish:225 -msgid "Use specified compression algorithm" -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" - -#: init/completions/gpg.fish:227 -msgid "Use specified cipher algorithm to protect secret keys" -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" - -#: init/completions/gpg.fish:229 -msgid "Selects how passphrases are mangled" -msgstr "Auswahl, wie Passwortsätze verstümmelt werden" - -#: init/completions/gpg.fish:231 -msgid "Integrity protect secret keys by using a SHA-1 checksum" -msgstr "Integrität geheimer Schlüssel mittels SHA-1-Prüfsumme schützen" - -#: init/completions/gpg.fish:233 -msgid "Never allow the use of specified cipher algorithm" -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" - -#: init/completions/gpg.fish:236 -msgid "Do not cache the verification status of key signatures" -msgstr "Überprüfungsstatus von Schlüsselsignaturen nicht zwischenspeichern" - -#: init/completions/gpg.fish:237 -msgid "Do not verify each signature right after creation" -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" - -#: init/completions/gpg.fish:240 -msgid "Never automatically run the --check-trustdb" -msgstr "--check-trustdb niemals automatisch ausführen" - -#: init/completions/gpg.fish:242 -msgid "Do not put the recipient keyid into encrypted packets" -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ü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 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 E-Mail-Kopfzeilen verstümmeln (Standard)" - -#: init/completions/gpg.fish:247 -msgid "Do not mangle From-field of email headers" -msgstr "From-Feld aus E-Mail-Kopfzeilen nicht verstümmeln" - -#: init/completions/gpg.fish:249 +#: share/completions/gpg.fish:249 msgid "Read passphrase from specified file descriptor" msgstr "Passwortsatz aus dem angegebenen Dateideskriptor lesen" -#: init/completions/gpg.fish:250 +#: share/completions/gpg.fish:250 msgid "Read user input from specified file descriptor" msgstr "Benutzereingaben aus dem angegebenen Dateideskriptor lesen" -#: init/completions/gpg.fish:252 -msgid "Try to use the GnuPG-Agent" -msgstr "Versuche, den GnuPG-Agenten zu nutzen" - -#: init/completions/gpg.fish:253 -msgid "Do not try to use the GnuPG-Agent" -msgstr "Nicht versuchen, den GnuPG-Agenten zu nutzen" - -#: init/completions/gpg.fish:254 +#: share/completions/gpg.fish:254 msgid "Override value of GPG_AGENT_INFO environment variable" -msgstr "Wert der GPG_AGENT_INFO-Umgebungsvariablen überschreiben" +msgstr "Wert der GPG_AGENT_INFO-Umgebungsvariablen überschreiben" -#: init/completions/gpg.fish:256 -msgid "Force v3 signatures for signatures on data" -msgstr "v3-Signaturen für Datensignaturen erzwingen" - -#: init/completions/gpg.fish:257 -msgid "Do not force v3 signatures for signatures on data" -msgstr "Keine v3-Signaturen für Datensignaturen erzwingen" - -#: init/completions/gpg.fish:259 -msgid "Always use v4 key signatures even on v3 keys" -msgstr "Stets v4-Schlüsselsignaturen verwenden (auch bei v3-Schlüsseln)" - -#: init/completions/gpg.fish:260 -msgid "Don't use v4 key signatures on v3 keys" -msgstr "Keine v4-Schlüsselsignaturen mit v3-Schlüsseln verwenden" - -#: init/completions/gpg.fish:262 -msgid "Force the use of encryption with a modification detection code" -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ä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 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 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 Benutzerkennungsformats deaktivieren, wenn ein neuer " -"generiert wird" - -#: init/completions/gpg.fish:270 -msgid "Do not fail if signature is older than key" -msgstr "Nicht abbrechen, wenn die Signatur älter als der Schlüssel ist" - -#: init/completions/gpg.fish:271 -msgid "Allow subkeys that have a timestamp from the future" -msgstr "Unterschlüssel erlauben, deren Zeitstempel in der Zukunft liegt" - -#: init/completions/gpg.fish:272 -msgid "Ignore CRC errors" -msgstr "CRC-Fehler ignorieren" - -#: init/completions/gpg.fish:273 -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" - -#: 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" - -#: init/completions/gpg.fish:279 -msgid "Reset verbose level to 0" -msgstr "Ausführlichkeitswert auf 0 zurücksetzen" - -#: init/completions/gpg.fish:280 -msgid "Suppress the initial copyright message" -msgstr "Copyright-Meldung beim Start unterdrücken" - -#: init/completions/gpg.fish:281 -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" - -#: init/completions/gpg.fish:283 -msgid "Suppress the warning about missing MDC integrity protection" -msgstr "Warnung über fehlenden MDC-Integritätsschutz unterdrücken" - -#: init/completions/gpg.fish:285 -msgid "Refuse to run if GnuPG cannot get secure memory" -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)" - -#: 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" - -#: init/completions/gpg.fish:290 -msgid "Do not add the default keyrings to the list of keyrings" -msgstr "Standardschlüsselringe nicht der Schlüsselringliste hinzufügen" - -#: init/completions/gpg.fish:292 -msgid "Skip the signature verification step" -msgstr "Verifizierung der Signatur überspringen" - -#: init/completions/gpg.fish:294 -msgid "Print key listings delimited by colons" -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" - -#: 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" - -#: 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 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" - -#: init/completions/gpg.fish:303 -msgid "Display the session key used for one message" -msgstr "Zeige den für eine Nachricht benutzten Sitzungsschlüssel an" - -#: init/completions/gpg.fish:304 +#: share/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 " +"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" -msgstr "Nach Ablaufzeit fragen" - -#: init/completions/gpg.fish:307 init/completions/gpg.fish:310 -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ü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" -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 +#: share/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 Aliasnamen in E-Mail-Programmen " "entspricht" -#: init/completions/gpg.fish:316 -msgid "Remove a given entry from the --group list" -msgstr "Angegebenen Eintrag aus der --group-Liste entfernen" - -#: init/completions/gpg.fish:317 -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" - -#: init/completions/gpg.fish:321 +#: share/completions/gpg.fish:321 msgid "Set the list of personal cipher preferences to the specified string" msgstr "" -"Die Liste der persönlichen Verschlüsselungseinstellungen gemäß der " +"Die Liste der persönlichen Verschlüsselungseinstellungen gemäß der " "angegebenen Zeichenkette festlegen" -#: init/completions/gpg.fish:322 +#: share/completions/gpg.fish:322 msgid "Set the list of personal digest preferences to the specified string" msgstr "" -"Die Liste der persönlichen Übersichtseinstellungen gemäß der " -"angegebenen Zeichenkette festlegen" +"Die Liste der persönlichen Ãœbersichtseinstellungen gemäß der angegebenen " +"Zeichenkette festlegen" -#: init/completions/gpg.fish:323 +#: share/completions/gpg.fish:323 msgid "" "Set the list of personal compression preferences to the specified string" msgstr "" -"Die Liste der persönlichen Komprimierungseinstellungen gemäß der " -"angegebenen Zeichenkette festlegen" +"Die Liste der persönlichen Komprimierungseinstellungen gemäß der angegebenen " +"Zeichenkette festlegen" -#: init/completions/gpg.fish:324 +#: share/completions/gpg.fish:324 msgid "Set the list of default preferences to the specified string" msgstr "" -"Die Liste der Standardeinstellungen gemäß der angegebenen Zeichenkette " +"Die Liste der Standardeinstellungen gemäß der angegebenen Zeichenkette " "festlegen" -#: init/completions/gprof.fish:1 -msgid "Print annotated source" -msgstr "Kommentierte Quelle ausgeben" - -#: init/completions/gprof.fish:2 -msgid "Do not print explanations" -msgstr "Keine Erklärungen ausgeben" - -#: init/completions/gprof.fish:3 -msgid "Print tally" -msgstr "Zähler ausgeben" - -#: init/completions/gprof.fish:4 -msgid "Display summary" -msgstr "Zusammenfassung anzeigen" - -#: init/completions/gprof.fish:5 -msgid "Search directories for source" -msgstr "Verzeichnisse nach Quelle durchsuchen" - -#: init/completions/gprof.fish:6 -msgid "No annotated source" -msgstr "Keine kommentierte Quelle" - -#: init/completions/gprof.fish:7 -msgid "Print full path of source" -msgstr "Vollständigen Quellpfad ausgeben" - -#: init/completions/gprof.fish:8 -msgid "Print flat profile" -msgstr "Flaches Profil ausgeben" - -#: init/completions/gprof.fish:9 -msgid "No flat profile" -msgstr "Kein flaches Profil" - -#: init/completions/gprof.fish:10 -msgid "Print call graph" -msgstr "Aufrufgraph ausgeben" - -#: init/completions/gprof.fish:11 -msgid "No call graph" -msgstr "Kein Aufrufgraph" - -#: init/completions/gprof.fish:12 -msgid "Annotate to file" -msgstr "Kommentare in Datei" - -#: init/completions/gprof.fish:13 -msgid "No tally" -msgstr "Keine Zählung" - -#: init/completions/gprof.fish:14 -msgid "Suggest function ordering" -msgstr "Funktionssortierung vorschlagen" - -#: init/completions/gprof.fish:15 -msgid "Suggest file ordering" -msgstr "Dateisortierung vorschlagen" - -#: init/completions/gprof.fish:16 -msgid "Traditional mode" -msgstr "Traditioneller Modus" - -#: init/completions/gprof.fish:17 -msgid "Set width of output" -msgstr "Ausgabebreite festlegen" - -#: init/completions/gprof.fish:18 -msgid "Anotate every line" -msgstr "Kommentiere jede Zeile" - -#: init/completions/gprof.fish:19 -msgid "Set demangling style" -msgstr "Format für Entfernen der Zusatzinformation festlegen" - -#: init/completions/gprof.fish:20 -msgid "Turn of demangling" -msgstr "Entfernung der Zusatzinformationen abschalten" - -#: init/completions/gprof.fish:21 -msgid "Supress static functions" -msgstr "Unterdrücke statische Funktionen" - -#: init/completions/gprof.fish:23 -msgid "Ignore symbols not known to be functions" -msgstr "Ignoriere nicht als Funktionen bekannte Symbole" - -#: init/completions/gprof.fish:24 +#: share/completions/gprof.fish:24 msgid "Delete arcs from callgraph" -msgstr "Bögen aus Aufrufgraph löschen" +msgstr "Bögen aus Aufrufgraph löschen" -#: init/completions/gprof.fish:25 -msgid "Line by line profiling" -msgstr "Zeilenweise Profilieren" - -#: init/completions/gprof.fish:26 +#: share/completions/gprof.fish:26 msgid "Supress output when executed less than specified times" -msgstr "Ausgabe unterdrücken, wenn weniger als angegeben ausgeführt" +msgstr "Ausgabe unterdrücken, wenn weniger als angegeben ausgeführt" -#: init/completions/gprof.fish:27 -msgid "Only propagate times for matching symbols" -msgstr "Zeiten nur für passende Symbole propagieren" - -#: init/completions/gprof.fish:28 -msgid "Do not propagate times for matching symbols" -msgstr "Zeiten für passende Symbole nicht propagieren" - -#: init/completions/gprof.fish:29 -msgid "Mention unused functions in flat profile" -msgstr "Unbenutzte Funktionen im pauschalen Profil erwähnen" - -#: init/completions/gprof.fish:30 -msgid "Specify debugging options" -msgstr "Debug-Optionen angeben" - -#: init/completions/gprof.fish:33 +#: share/completions/gprof.fish:33 msgid "Profile data format" msgstr "Profildatenformat" -#: init/completions/gprof.fish:34 -msgid "Print summary" -msgstr "Zusammenfassung ausgeben" - -#: init/completions/grep.fish:5 -msgid "Print NUM lines of trailing context" -msgstr "NUM folgende Kontext-Zeilen ausgeben" - -#: init/completions/grep.fish:6 -msgid "Process binary file as text" -msgstr "Binärdateien als Text behandeln" - -#: init/completions/grep.fish:7 -msgid "Print NUM lines of leading context" -msgstr "NUM führende Kontext-Zeilen ausgeben" - -#: init/completions/grep.fish:8 -msgid "Print NUM lines of context" -msgstr "NUM Kontext-Zeilen ausgeben" - -#: init/completions/grep.fish:9 -msgid "Print byte offset of matches" -msgstr "Byte-Offset von Treffern ausgeben" - -#: init/completions/grep.fish:10 -msgid "Assume data type for binary files" -msgstr "Datentyp für Binärdateien unterstellen" - -#: init/completions/grep.fish:13 -msgid "Only print number of matches" -msgstr "Nur Anzahl von Treffern ausgeben" - -#: init/completions/grep.fish:14 -msgid "Action for devices" -msgstr "Aktion für Gerätedateien" - -#: init/completions/grep.fish:15 -msgid "Action for directories" -msgstr "Aktion für Verzeichnisse" - -#: init/completions/grep.fish:16 -msgid "Pattern is extended regexp" -msgstr "Muster ist ein erweiterter regulärer Ausdruck" - -#: init/completions/grep.fish:17 -msgid "Pattern is a regexp" -msgstr "Muster ist ein regulärer Ausdruck" - -#: init/completions/grep.fish:18 -msgid "Pattern is a fixed string" -msgstr "Muster ist eine feststehende Zeichenkette" - -#: init/completions/grep.fish:19 -msgid "Use pattern from file" -msgstr "Muster aus Datei nutzen" - -#: init/completions/grep.fish:20 -msgid "Pattern is basic regex" -msgstr "Muster ist ein einfacher regulärer Ausdruck" - -#: init/completions/grep.fish:21 -msgid "Print filename" -msgstr "Dateiname ausgeben" - -#: init/completions/grep.fish:22 -msgid "Supress printing filename" -msgstr "Dateinamenausgabe unterdrücken" - -#: init/completions/grep.fish:24 -msgid "Skip binary files" -msgstr "Binärdateien überspringen" - -#: init/completions/grep.fish:25 init/completions/sort.fish:3 -msgid "Ignore case" -msgstr "Gross-/Kleinschreibung ignorieren" - -#: init/completions/grep.fish:26 -msgid "Print first non-matching file" -msgstr "Erste nicht zutreffende Datei ausgeben" - -#: init/completions/grep.fish:27 -msgid "Print first matching file" -msgstr "Erste zutreffende Datei ausgeben" - -#: init/completions/grep.fish:28 -msgid "Stop reading after NUM matches" -msgstr "Lesen nach NUM Treffern beenden" - -#: init/completions/grep.fish:29 -msgid "Use the mmap system call to read input" -msgstr "mmap-Systemaufruf zum Lesen der Eingabe nutzen" - -#: init/completions/grep.fish:30 -msgid "Print linenumber" -msgstr "Zeilennummer ausgeben" - -#: init/completions/grep.fish:31 -msgid "Show only matching part" -msgstr "Nur zutreffenden Teil anzeigen" - -#: init/completions/grep.fish:32 -msgid "Rename stdin" -msgstr "Standardeingabe umbenennen" - -#: init/completions/grep.fish:33 init/completions/sed.fish:36 -msgid "Use line buffering" -msgstr "Zeilenpufferung benutzen" - -#: init/completions/grep.fish:34 init/completions/grep.fish:35 -msgid "Do not write anything" -msgstr "Nichts schreiben" - -#: init/completions/grep.fish:36 init/completions/grep.fish:37 -msgid "Read files under each directory" -msgstr "Dateien unter jedem Verzeichnis lesen" - -#: init/completions/grep.fish:38 -msgid "Recurse, search file matching PATTERN" -msgstr "Rekursiv, Dateien gemäß MUSTER suchen" - -#: init/completions/grep.fish:39 -msgid "Recurse, skip file matching PATTERN" -msgstr "Rekursiv, dem MUSTER entsprechende Dateien überspringen" - -#: init/completions/grep.fish:40 -msgid "Suppress error messages" -msgstr "Fehlermeldungen unterdrücken" - -#: init/completions/grep.fish:41 -msgid "Treat files as binary" -msgstr "Dateien als binär behandeln" - -#: init/completions/grep.fish:42 -msgid "Report Unix-style byte offsets" -msgstr "Byte-Offset im Unix-Format angeben" - -#: init/completions/grep.fish:44 -msgid "Invert the sense of matching" -msgstr "Bedeutung der Treffer umkehren" - -#: init/completions/grep.fish:45 -msgid "Only whole matching words" -msgstr "Nur vollständig übereinstimmende Worte" - -#: init/completions/grep.fish:46 -msgid "Only whole matching lines" -msgstr "Nur vollständig übereinstimmende Zeilen" - -#: init/completions/grep.fish:47 -msgid "Synonym for -i" -msgstr "Synonym für -i" - -#: init/completions/grep.fish:48 -msgid "Output a zero byte after filename" -msgstr "Ein Null-Byte nach dem Dateinamen ausgeben" - -#: init/completions/gunzip.fish:9 init/completions/gzip.fish:11 -msgid "List compression information" -msgstr "Komprimierungsinformation auflisten" - -#: init/completions/gunzip.fish:11 init/completions/gzip.fish:13 -msgid "Do not save/restore filename" -msgstr "Dateiname nciht (zurück)sichern" - -#: init/completions/gunzip.fish:12 init/completions/gzip.fish:14 -msgid "Save/restore filename" -msgstr "Dateiname (zurück)sichern" - -#: init/completions/gunzip.fish:13 init/completions/gzip.fish:15 -msgid "Supress warnings" -msgstr "Warnungen unterdrücken" - -#: init/completions/gunzip.fish:14 init/completions/gzip.fish:16 -msgid "Recurse directories" -msgstr "Verzeichnisse rekursiv durchlaufen" - -#: init/completions/gunzip.fish:15 init/completions/gzip.fish:17 +#: share/completions/gunzip.fish:15 share/completions/gzip.fish:17 msgid "Suffix" msgstr "Suffix" -#: init/completions/gunzip.fish:17 init/completions/gzip.fish:19 -msgid "Display compression ratios" -msgstr "Kompressionsrate anzeigen" +#: share/completions/help.fish:6 +#, fuzzy +msgid "Help for this command" +msgstr "Hilfe für den Befehl '%s'" -#: init/completions/gzip.fish:21 -msgid "Use fast setting" -msgstr "Einstellung für Schnelligkeit verwenden" +#: share/completions/help.fish:9 +msgid "Introduction to the fish syntax" +msgstr "" -#: init/completions/gzip.fish:22 -msgid "Use high compression setting" -msgstr "Einstellung für hohe Kompression verwenden" +#: share/completions/help.fish:10 +msgid "Incomplete aspects of fish" +msgstr "" -#: init/completions/help.fish:6 -msgid "Help for the '%s' builtin" -msgstr "Hilfe zur eingebauten Funktion '%s'" +#: share/completions/help.fish:11 +msgid "Known fish bugs" +msgstr "" -#: init/completions/help.fish:10 -msgid "Help for the '%s' command" -msgstr "Hilfe für den Befehl '%s'" +#: share/completions/help.fish:12 +msgid "Help on how to reuse previously entered commands" +msgstr "" -#: init/completions/help.fish:14 -msgid "Help section on %s" -msgstr "Hilfeabschnitt zu %s" - -#: init/completions/help.fish:17 +#: share/completions/help.fish:14 msgid "Help on how tab-completion works" -msgstr "Hilfe zur Tab-Vervollständigung" +msgstr "Hilfe zur Tab-Vervollständigung" -#: init/completions/help.fish:18 +#: share/completions/help.fish:15 msgid "Help on how job control works" msgstr "Hilfe zur Jobsteuerung" -#: init/completions/help.fish:19 +#: share/completions/help.fish:16 msgid "Summary on how fish differs from other shells" msgstr "Zusammenfassung der Unterschiede zwischen fish und anderen shells" -#: init/completions/help.fish:21 +#: share/completions/help.fish:18 msgid "Help on how to set the prompt" msgstr "Hilfe zum Festlegen des Prompts" -#: init/completions/help.fish:22 +#: share/completions/help.fish:19 msgid "Help on how to set the titlebar message" msgstr "Hilfe zum Einrichten der Titelzeilen-Nachricht" -#: init/completions/help.fish:23 +#: share/completions/help.fish:20 msgid "Help on how to copy and paste" -msgstr "Hilfe zum Kopieren und Einfügen" +msgstr "Hilfe zum Kopieren und Einfügen" -#: init/completions/help.fish:24 +#: share/completions/help.fish:21 msgid "Help on editor shortcuts" -msgstr "Hilfe zu Editor-Tastenkürzeln" +msgstr "Hilfe zu Editor-Tastenkürzeln" -#: init/completions/help.fish:25 +#: share/completions/help.fish:22 msgid "Help on environment variables" msgstr "Hilfe zu Umgebungsvariablen" -#: init/completions/help.fish:26 +#: share/completions/help.fish:23 msgid "Help on setting syntax highlighting colors" msgstr "Hilfe zur Farbeinrichtung zur Syntaxhervorhebung" -#: init/completions/help.fish:27 -msgid "A short summary of all builtin commands" -msgstr "Kurze Zusammenfassung aller eingebauten Befehle" - -#: init/completions/help.fish:29 init/completions/help.fish:30 +#: share/completions/help.fish:25 share/completions/help.fish:26 msgid "Help on parameter expansion (Globbing)" msgstr "Hilfe zur Parameter-Expansion (Dateinamen)" -#: init/completions/help.fish:31 +#: share/completions/help.fish:27 #, sh-format msgid "Help on variable expansion $VARNAME" msgstr "Hilfe zur Variablen-Expansion $VARNAME" -#: init/completions/help.fish:32 +#: share/completions/help.fish:28 msgid "Help on home directory expansion ~USER" msgstr "Hilfe zur Startverzeichnis-Expansion ~USER" -#: init/completions/help.fish:33 +#: share/completions/help.fish:29 msgid "Help on brace expansion {a,b,c}" msgstr "Hilfe zur Klammer-Expansion {a,b,c}" -#: init/completions/help.fish:34 +#: share/completions/help.fish:30 msgid "Help on wildcard expansion *.*" msgstr "Hilfe zur Muster-Expansion *.*" -#: init/completions/help.fish:35 -msgid "Help on command substututions (SUBCOMMAND)" +#: share/completions/help.fish:31 +#, fuzzy +msgid "Help on command substitution (SUBCOMMAND)" msgstr "Hilfe zu Befehlsersetzungen (SUBCOMMAND)" -#: init/completions/help.fish:36 +#: share/completions/help.fish:32 msgid "Help on process expansion %JOB" msgstr "Hilfe zur Prozess-Expansion %JOB" -#: init/completions/id.fish:1 -msgid "Print effective group id" -msgstr "Effektive Gruppenkennung ausgeben" +#: share/completions/hg.fish:17 +#, fuzzy +msgid "add the specified files on the next commit" +msgstr "Angegebene Datei zur aktuellen Schlüsselringliste hinzufügen" -#: init/completions/id.fish:2 -msgid "Print all group ids" -msgstr "Alle Gruppenkennungen ausgeben" +#: share/completions/hg.fish:18 +msgid "add all new files, delete all missing files" +msgstr "" -#: init/completions/id.fish:3 -msgid "Print name, not number" -msgstr "Name statt Nummer ausgeben" +#: share/completions/hg.fish:19 +#, fuzzy +msgid "show changeset information by line for each file" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" -#: init/completions/id.fish:4 -msgid "Print real ID, not effective" -msgstr "Reale, nicht effektive Kennung ausgeben" +#: share/completions/hg.fish:20 +msgid "create an unversioned archive of a repository revision" +msgstr "" -#: init/completions/id.fish:5 -msgid "Print effective user ID" -msgstr "Effektive Benutzerkennung ausgeben" +#: share/completions/hg.fish:21 +msgid "reverse effect of earlier changeset" +msgstr "" -#: init/completions/ifconfig.fish:1 +#: share/completions/hg.fish:22 +msgid "subdivision search of changesets" +msgstr "" + +#: share/completions/hg.fish:23 +msgid "track a line of development with movable markers" +msgstr "" + +#: share/completions/hg.fish:24 +msgid "set or show the current branch name" +msgstr "" + +#: share/completions/hg.fish:25 +msgid "list repository named branches" +msgstr "" + +#: share/completions/hg.fish:26 +#, fuzzy +msgid "create a changegroup file" +msgstr "Paket aus Datei lesen" + +#: share/completions/hg.fish:27 +msgid "output the current or given revision of files" +msgstr "" + +#: share/completions/hg.fish:28 +#, fuzzy +msgid "make a copy of an existing repository" +msgstr "Eine lokale Kopie eines weiteren Paketdepots erstellen" + +#: share/completions/hg.fish:29 +#, fuzzy +msgid "commit the specified files or all outstanding changes" +msgstr "Angegebene Datei oder Standardeingabe entschlüsseln" + +#: share/completions/hg.fish:30 +msgid "mark files as copied for the next commit" +msgstr "" + +#: share/completions/hg.fish:31 +msgid "diff repository (or selected files)" +msgstr "" + +#: share/completions/hg.fish:32 +msgid "dump the header and diffs for one or more changesets" +msgstr "" + +#: share/completions/hg.fish:33 +msgid "forget the specified files on the next commit" +msgstr "" + +#: share/completions/hg.fish:34 +msgid "copy changes from other branches onto the current branch" +msgstr "" + +#: share/completions/hg.fish:35 +msgid "search for a pattern in specified files and revisions" +msgstr "" + +#: share/completions/hg.fish:36 +msgid "show current repository heads or show branch heads" +msgstr "" + +#: share/completions/hg.fish:37 +msgid "show help for a given topic or a help overview" +msgstr "" + +#: share/completions/hg.fish:38 +msgid "identify the working copy or specified revision" +msgstr "" + +#: share/completions/hg.fish:39 +#, fuzzy +msgid "import an ordered set of patches" +msgstr "Byte-Offset von Treffern ausgeben" + +#: share/completions/hg.fish:40 +msgid "show new changesets found in source" +msgstr "" + +#: share/completions/hg.fish:41 +#, fuzzy +msgid "create a new repository in the given directory" +msgstr "CVS-Paketdepot erstellen, wenn es nicht existiert" + +#: share/completions/hg.fish:42 +#, fuzzy +msgid "locate files matching specific patterns" +msgstr "Dem Muster entsprechende Dateien ausschliessen" + +#: share/completions/hg.fish:43 +msgid "show revision history of entire repository or files" +msgstr "" + +#: share/completions/hg.fish:44 +msgid "output the current or given revision of the project manifest" +msgstr "" + +#: share/completions/hg.fish:45 +msgid "merge working directory with another revision" +msgstr "" + +#: share/completions/hg.fish:46 +msgid "show changesets not found in the destination" +msgstr "" + +#: share/completions/hg.fish:47 +msgid "show the parents of the working directory or revision" +msgstr "" + +#: share/completions/hg.fish:48 +#, fuzzy +msgid "show aliases for remote repositories" +msgstr "Einträge in .cvspass für entferntes Paketdepot entfernen" + +#: share/completions/hg.fish:49 +msgid "set or show the current phase name" +msgstr "" + +#: share/completions/hg.fish:50 +#, fuzzy +msgid "pull changes from the specified source" +msgstr "Pakete mit der angegebenen Gruppe abfragen" + +#: share/completions/hg.fish:51 +#, fuzzy +msgid "push changes to the specified destination" +msgstr "Pakete mit der angegebenen Gruppe abfragen" + +#: share/completions/hg.fish:52 +msgid "roll back an interrupted transaction" +msgstr "" + +#: share/completions/hg.fish:53 +#, fuzzy +msgid "remove the specified files on the next commit" +msgstr "Die auf der Befehlszeile angegebene Datei verschieben" + +#: share/completions/hg.fish:54 +msgid "rename files; equivalent of copy + remove" +msgstr "" + +#: share/completions/hg.fish:55 +msgid "redo merges or set/view the merge status of files" +msgstr "" + +#: share/completions/hg.fish:56 +msgid "restore files to their checkout state" +msgstr "" + +#: share/completions/hg.fish:57 +msgid "roll back the last transaction (dangerous)" +msgstr "" + +#: share/completions/hg.fish:58 +msgid "print the root (top) of the current working directory" +msgstr "" + +#: share/completions/hg.fish:59 +msgid "start stand-alone webserver" +msgstr "" + +#: share/completions/hg.fish:60 +msgid "show combined config settings from all hgrc files" +msgstr "" + +#: share/completions/hg.fish:61 +#, fuzzy +msgid "show changed files in the working directory" +msgstr "Arbeitsverzeichnis wechseln" + +#: share/completions/hg.fish:62 +#, fuzzy +msgid "summarize working directory state" +msgstr "Arbeitsverzeichnis ausgeben" + +#: share/completions/hg.fish:63 +msgid "add one or more tags for the current or given revision" +msgstr "" + +#: share/completions/hg.fish:64 +#, fuzzy +msgid "list repository tags" +msgstr "Depot deaktivieren" + +#: share/completions/hg.fish:65 +#, fuzzy +msgid "show the tip revision" +msgstr "Zeige Zeit" + +#: share/completions/hg.fish:66 +#, fuzzy +msgid "apply one or more changegroup files" +msgstr "Ein oder mehrere Paket(e) installieren" + +#: share/completions/hg.fish:67 +msgid "update working directory (or switch revisions)" +msgstr "" + +#: share/completions/hg.fish:68 +#, fuzzy +msgid "verify the integrity of the repository" +msgstr "Einen Eintrag aus dem Paketdepot entfernen" + +#: share/completions/hg.fish:69 +#, fuzzy +msgid "output version and copyright information" +msgstr "Magische Versionsinformation ignorieren" + +#: share/completions/hg.fish:70 +#, fuzzy +msgid "Configuration Files" +msgstr "Konfigurationsdatei" + +#: share/completions/hg.fish:71 +#, fuzzy +msgid "Date Formats" +msgstr "Format festlegen" + +#: share/completions/hg.fish:72 +#, fuzzy +msgid "Diff Formats" +msgstr "Listenformat" + +#: share/completions/hg.fish:73 +#, fuzzy +msgid "Environment Variables" +msgstr "Behandlung von Umgebungsvariablen" + +#: share/completions/hg.fish:74 +msgid "Using Additional Features" +msgstr "" + +#: share/completions/hg.fish:75 +#, fuzzy +msgid "Specifying File Sets" +msgstr "Konfigurationsdatei angeben" + +#: share/completions/hg.fish:76 +msgid "Glossary" +msgstr "" + +#: share/completions/hg.fish:77 +msgid "Syntax for Mercurial Ignore Files" +msgstr "" + +#: share/completions/hg.fish:78 +#, fuzzy +msgid "Configuring hgweb" +msgstr "Konfigurationsdatei" + +#: share/completions/hg.fish:79 +#, fuzzy +msgid "Merge Tools" +msgstr "Sortierte Dateien mischen" + +#: share/completions/hg.fish:80 +msgid "Specifying Multiple Revisions" +msgstr "" + +#: share/completions/hg.fish:81 +msgid "File Name Patterns" +msgstr "" + +#: share/completions/hg.fish:82 +msgid "Working with Phases" +msgstr "" + +#: share/completions/hg.fish:83 +#, fuzzy +msgid "Specifying Single Revisions" +msgstr "Kernel-Version angeben" + +#: share/completions/hg.fish:84 +#, fuzzy +msgid "Specifying Revision Sets" +msgstr "Optionen angeben" + +#: share/completions/hg.fish:85 +#, fuzzy +msgid "Subrepositories" +msgstr "Depot aktivieren" + +#: share/completions/hg.fish:86 +msgid "Template Usage" +msgstr "" + +#: share/completions/hg.fish:87 +msgid "URL Paths" +msgstr "" + +#: share/completions/hg.fish:94 share/completions/hg.fish:433 +#: share/completions/hg.fish:458 share/completions/hg.fish:569 +#: share/completions/hg.fish:579 share/completions/hg.fish:594 +#: share/completions/hg.fish:606 share/completions/hg.fish:671 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Module einfügen, die den angegebenen Mustern entsprechen" + +#: share/completions/hg.fish:95 share/completions/hg.fish:434 +#: share/completions/hg.fish:459 share/completions/hg.fish:570 +#: share/completions/hg.fish:580 share/completions/hg.fish:595 +#: share/completions/hg.fish:607 share/completions/hg.fish:672 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "Alle Module auflisten, die den angegebenen Mustern entsprechen" + +#: share/completions/hg.fish:104 share/completions/hg.fish:391 +msgid "Guess renamed files by similarity (0<=s<=100)" +msgstr "" + +#: share/completions/hg.fish:105 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Module einfügen, die den angegebenen Mustern entsprechen" + +#: share/completions/hg.fish:106 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "Alle Module auflisten, die den angegebenen Mustern entsprechen" + +#: share/completions/hg.fish:114 +msgid "Annotate the specified revision" +msgstr "" + +#: share/completions/hg.fish:387 +msgid "Use text as commit message" +msgstr "" + +#: share/completions/hg.fish:388 +#, fuzzy +msgid "Read commit message from file" +msgstr "Paket aus Datei lesen" + +#: share/completions/hg.fish:389 share/completions/hg.fish:693 +#, fuzzy +msgid "Record the specified date as commit date" +msgstr "Angegebene Zeichenkette als Kommentar verwenden" + +#: share/completions/hg.fish:390 share/completions/hg.fish:694 +#, fuzzy +msgid "Record the specified user as committer" +msgstr "Angegebene Zeichenkette als Kommentar verwenden" + +#: share/completions/hg.fish:400 +#, fuzzy +msgid "File to store the bundles into" +msgstr "Beschreibung des Patchpaketes editieren" + +#: share/completions/hg.fish:401 share/completions/hg.fish:446 +#: share/completions/hg.fish:448 share/completions/hg.fish:450 +#: share/completions/hg.fish:485 share/completions/hg.fish:534 +#: share/completions/hg.fish:536 share/completions/hg.fish:548 +#: share/completions/hg.fish:550 share/completions/hg.fish:669 +msgid "[+]" +msgstr "" + +#: share/completions/hg.fish:403 +msgid "[+] a specific branch you would like to pull" +msgstr "" + +#: share/completions/hg.fish:406 share/completions/hg.fish:453 +#: share/completions/hg.fish:491 +msgid "Limit number of changes displayed" +msgstr "" + +#: share/completions/hg.fish:409 share/completions/hg.fish:456 +#: share/completions/hg.fish:494 share/completions/hg.fish:507 +#: share/completions/hg.fish:709 +msgid "Display using template map file" +msgstr "" + +#: share/completions/hg.fish:410 share/completions/hg.fish:457 +#: share/completions/hg.fish:495 share/completions/hg.fish:508 +#: share/completions/hg.fish:710 +#, fuzzy +msgid "Display with template" +msgstr "Alle Ãœbereinstimmungen anzeigen" + +#: share/completions/hg.fish:411 share/completions/hg.fish:421 +#: share/completions/hg.fish:496 share/completions/hg.fish:537 +#: share/completions/hg.fish:552 +#, fuzzy +msgid "Specify ssh command to use" +msgstr "Befehl an die Shell übergeben" + +#: share/completions/hg.fish:412 share/completions/hg.fish:422 +#: share/completions/hg.fish:497 share/completions/hg.fish:538 +#: share/completions/hg.fish:553 +msgid "Specify hg command to run on the remote side" +msgstr "" + +#: share/completions/hg.fish:430 +#, fuzzy +msgid "Search the repository as it is in REV" +msgstr "Das Paketdepotverzeichnis angeben, in dem gearbeitet wird" + +#: share/completions/hg.fish:441 +msgid "A filename will only show ancestors or" +msgstr "" + +#: share/completions/hg.fish:443 +#, fuzzy +msgid "Show revisions matching date spec" +msgstr "Nur zutreffenden Teil anzeigen" + +#: share/completions/hg.fish:445 +msgid "[+] do case-insensitive search for a given text" +msgstr "" + +#: share/completions/hg.fish:449 +msgid "[+] show changesets within the given named branch" +msgstr "" + +#: share/completions/hg.fish:466 +#, fuzzy +msgid "Revision to display" +msgstr "Grafikanzeige auswählen" + +#: share/completions/hg.fish:475 +msgid "Revision to merge" +msgstr "" + +#: share/completions/hg.fish:477 share/completions/hg.fish:593 +#, fuzzy +msgid "Specify merge tool" +msgstr "Kernel-Version angeben" + +#: share/completions/hg.fish:488 +msgid "[+] a specific branch you would like to push" +msgstr "" + +#: share/completions/hg.fish:506 +#, fuzzy +msgid "Show parents of the specified revision" +msgstr "Dateisysteme des angegebenen Typs anzeigen" + +#: share/completions/hg.fish:525 +msgid "[+] target revision" +msgstr "" + +#: share/completions/hg.fish:535 +msgid "[+] bookmark to pull" +msgstr "" + +#: share/completions/hg.fish:546 +msgid "You want to allow push to create a new named branch" +msgstr "" + +#: share/completions/hg.fish:549 +msgid "[+] bookmark to push" +msgstr "" + +#: share/completions/hg.fish:603 share/completions/hg.fish:726 +#, fuzzy +msgid "Tipmost revision matching date" +msgstr "Dem Muster entsprechende Einträge übergehen" + +#: share/completions/hg.fish:604 +#, fuzzy +msgid "Revert to the specified revision" +msgstr "Fenster auf der angegebenen Anzeige erstellen" + +#: share/completions/hg.fish:615 +msgid "Not perform actions, just print output" +msgstr "" + +#: share/completions/hg.fish:629 +msgid "Name of access log file to write to" +msgstr "" + +#: share/completions/hg.fish:631 +msgid "Used internally by daemon mode" +msgstr "" + +#: share/completions/hg.fish:632 +msgid "Name of error log file to write to" +msgstr "" + +#: share/completions/hg.fish:633 +msgid "Port to listen on (default: 8000)" +msgstr "" + +#: share/completions/hg.fish:634 +msgid "Address to listen on (default: all interfaces)" +msgstr "" + +#: share/completions/hg.fish:635 +msgid "Prefix path to serve from (default: server root)" +msgstr "" + +#: share/completions/hg.fish:636 +msgid "Name to show in web pages (default: working" +msgstr "" + +#: share/completions/hg.fish:637 +msgid "Name of the hgweb config file (see \"hg help hgweb\")" +msgstr "" + +#: share/completions/hg.fish:638 +msgid "Name of file to write process ID to" +msgstr "" + +#: share/completions/hg.fish:640 +#, fuzzy +msgid "For remote clients" +msgstr "Funktionen auflisten oder entfernen" + +#: share/completions/hg.fish:641 +msgid "Web templates to use" +msgstr "" + +#: share/completions/hg.fish:642 +msgid "Template style to use" +msgstr "" + +#: share/completions/hg.fish:644 +#, fuzzy +msgid "SSL certificate file" +msgstr "Zertifikatsregeln festlegen" + +#: share/completions/hg.fish:651 +#, fuzzy +msgid "Untrusted configuration options" +msgstr "Konfigurationsoptionen festlegen" + +#: share/completions/hg.fish:670 +msgid "List the changed files of a revision" +msgstr "" + +#: share/completions/hg.fish:680 +msgid "For push and pull" +msgstr "" + +#: share/completions/hg.fish:689 +msgid "Revision to tag" +msgstr "" + +#: share/completions/hg.fish:692 +msgid "Use as commit message" +msgstr "" + +#: share/completions/hg.fish:717 +msgid "To new branch head if changesets were unbundled" +msgstr "" + +#: share/completions/hg.fish:727 +msgid "Revision" +msgstr "" + +#: share/completions/hg.fish:844 +msgid "Or select an existing template-style (--style)" +msgstr "" + +#: share/completions/hg.fish:845 +msgid "Is set" +msgstr "" + +#: share/completions/history.fish:1 +msgid "Match history items that start with the given prefix" +msgstr "" + +#: share/completions/history.fish:2 +msgid "Match history items that contain the given string" +msgstr "" + +#: share/completions/ifconfig.fish:1 msgid "Stop interface" msgstr "Schnittstelle stoppen" -#: init/completions/ifconfig.fish:2 +#: share/completions/ifconfig.fish:2 msgid "Start interface" msgstr "Schnittstelle starten" -#: init/completions/ifconfig.fish:25 +#: share/completions/ifconfig.fish:25 share/completions/ifdown.fish:1 +#: share/completions/ifup.fish:1 msgid "Network interface" msgstr "Netzwerkschnittstelle" -#: init/completions/jobs.fish:3 -msgid "Show the process id of each process in the job" -msgstr "Prozesskennung jedes Prozesses im Job anzeigen" - -#: init/completions/jobs.fish:4 -msgid "Show group id of job" -msgstr "Gruppenkennung des Jobs anzeigen" - -#: init/completions/jobs.fish:5 -msgid "Show commandname of each job" -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 anzeigen" - -#: init/completions/kill.fish:34 -msgid "List names of available signals" -msgstr "Namen der verfügbaren Signale auflisten" - -#: init/completions/less.fish:2 -msgid "Search after end of screen" -msgstr "Über Bildschirmende hinaus suchen" - -#: init/completions/less.fish:3 +#: share/completions/less.fish:3 msgid "Buffer space" msgstr "Pufferplatz" -#: init/completions/less.fish:4 -msgid "Disable automtic buffer allocation" -msgstr "Automatische Pufferzuordnung deaktivieren" +#: share/completions/lsusb.fish:2 +msgid "Show only devices with specified device and/or bus numbers (in decimal)" +msgstr "" -#: init/completions/less.fish:5 -msgid "Repaint from top" -msgstr "von oben neu anzeigen" - -#: init/completions/less.fish:6 -msgid "Clear and repaint from top" -msgstr "Löschen und von oben neu anzeigen" - -#: init/completions/less.fish:7 -msgid "Supress error for lacking terminal capability" -msgstr "Fehler für fehlende Terminaleigenschaft unterdrücken" - -#: init/completions/less.fish:8 -msgid "Exit on second EOF" -msgstr "Ende bei zweitem EOF" - -#: init/completions/less.fish:9 -msgid "Exit on EOF" -msgstr "Bei Dateiende beenden" - -#: init/completions/less.fish:10 -msgid "Open non-regular files" -msgstr "Nicht-reguläre Dateien öffnen" - -#: init/completions/less.fish:11 -msgid "Quit if file shorter than one screen" -msgstr "Beenden, wenn die Datei kürzer als eine Bildschirmseite ist" - -#: init/completions/less.fish:12 -msgid "Hilight one search target" -msgstr "Ein Suchziel hervorheben" - -#: init/completions/less.fish:13 -msgid "No search highlighting" -msgstr "Keine Hervorhebung bei Suche" - -#: init/completions/less.fish:14 -msgid "Maximum backward scroll" -msgstr "Maximum für Rückwärtsblättern" - -#: init/completions/less.fish:15 -msgid "Search ignores lowercase case" -msgstr "Suche ignoriert Kleinschreibung" - -#: init/completions/less.fish:16 -msgid "Search ignores all case" -msgstr "Suche ignoriert Gross-/Kleinschreibung " - -#: init/completions/less.fish:17 -msgid "Target line" -msgstr "Zielzeile" - -#: init/completions/less.fish:18 -msgid "Display status column" -msgstr "Statusspalte anzeigen" - -#: init/completions/less.fish:19 -msgid "Specify key bindings file" -msgstr "Datei mit Tastaturbindungen angeben" - -#: init/completions/less.fish:21 -msgid "Prompt with percentage" -msgstr "Prompt mit Prozentanzeige" - -#: init/completions/less.fish:22 -msgid "Verbose prompt" -msgstr "Ausführlicher Prompt" - -#: init/completions/less.fish:23 -msgid "Display line number" -msgstr "Zeilennummer anzeigen" - -#: init/completions/less.fish:24 -msgid "Display line number for each line" -msgstr "Zeilennummer für jede Zeile anzeigen" - -#: init/completions/less.fish:25 -msgid "Log input to file" -msgstr "Eingabe in Datei protokollieren" - -#: init/completions/less.fish:26 -msgid "Log to file, overwrite" -msgstr "Protokoll in Datei, überschreiben" - -#: init/completions/less.fish:27 -msgid "Start at first occorance of pattern" -msgstr "Start beim ersten Vorkommen des Musters" - -#: init/completions/less.fish:28 -msgid "Prompt string" -msgstr "Prompt-Anzeige" - -#: init/completions/less.fish:29 init/completions/less.fish:30 -#: init/completions/sed.fish:12 init/completions/sed.fish:21 -msgid "Silent mode" -msgstr "Ruhiger Modus" - -#: init/completions/less.fish:31 init/completions/less.fish:32 -msgid "Completly silent mode" -msgstr "Vollständig ruhiger Modus" - -#: init/completions/less.fish:33 -msgid "Display control chars" -msgstr "Steuerzeichen anzeigen" - -#: init/completions/less.fish:34 -msgid "Display control chars, guess screen appearance" -msgstr "Steuerzeichen anzeigen, Bildschirmdarstellung erraten" - -#: init/completions/less.fish:35 -msgid "Multiple blank lines sqeezed" -msgstr "Mehrere Leerzeilen zusammengefasst" - -#: init/completions/less.fish:36 -msgid "Do not fold long lines" -msgstr "Lange Zeilen nicht umbrechen" - -#: init/completions/less.fish:37 -msgid "Edit tag" -msgstr "Kennzeichnung bearbeiten" - -#: init/completions/less.fish:38 -msgid "Set tag file" -msgstr "Kennzeichnungsdatei festlegen" - -#: init/completions/less.fish:39 -msgid "Allow backspace and carriage return" -msgstr "Rückschritt und Zeilenschaltung zulassen" - -#: init/completions/less.fish:40 -msgid "Allow backspace, tab and carriage return" -msgstr "Rückschritt, Tab und Zeilenschaltung zulassen" - -#: init/completions/less.fish:42 -msgid "Highlight first unread line on new page" -msgstr "Erste ungelesene Zeile auf neuer Seite hervorheben" - -#: init/completions/less.fish:43 -msgid "Highlight first unread line on any movement" -msgstr "Erste ungelesene Zeile bei Verschiebung hervorheben" - -#: init/completions/less.fish:44 -msgid "Set tab stops" -msgstr "Tab-Stopps festlegen" - -#: init/completions/less.fish:45 -msgid "No termcap init" -msgstr "Keine termcap-Initialisierung" - -#: init/completions/less.fish:46 -msgid "No keypad init" -msgstr "Keine Ziffernblock-Initialisierung" - -#: init/completions/less.fish:47 -msgid "Maximum forward scroll" -msgstr "Maximum für Vorwärtsblättern" - -#: init/completions/less.fish:48 -msgid "Max scroll window" -msgstr "Maximale Fenstergrösse für Blättern" - -#: init/completions/less.fish:49 -msgid "Set quote char" -msgstr "Markierungszeichen festlegen" - -#: init/completions/less.fish:50 -msgid "Lines after EOF are blank" -msgstr "Zeilen nach EOF sind leer" - -#: init/completions/less.fish:51 -msgid "Characters to scroll on left/right arrows" -msgstr "Anzahl zu blätternde Zeichen bei Links-/Rechts-Pfeilen" - -#: init/completions/ls.fish:14 -msgid "Show hidden" -msgstr "Zeige versteckte Dateien" - -#: init/completions/ls.fish:15 -msgid "Show hidden except . and .." -msgstr "Zeige versteckte Dateien ausser . und .." - -#: init/completions/ls.fish:16 init/completions/ls.fish:25 -#: init/completions/ls.fish:57 -msgid "Append filetype indicator" -msgstr "Dateityp-Anzeige anhängen" - -#: init/completions/ls.fish:17 init/completions/ls.fish:18 -msgid "Follow symlinks" -msgstr "Symbolischen Links folgen" - -#: init/completions/ls.fish:19 -msgid "List subdirectory recursively" -msgstr "Unterverzeichnisse rekursiv auflisten" - -#: init/completions/ls.fish:20 init/completions/ls.fish:95 -msgid "Octal escapes for non graphic characters" -msgstr "Oktaldarstellung für nichtgrafische Zeichen" - -#: init/completions/ls.fish:21 -msgid "List directories, not their content" -msgstr "Verzeichnisse, aber nicht deren Inhalt auflisten" - -#: init/completions/ls.fish:23 -msgid "Print inode number of files" -msgstr "Inode-Nummer der Dateien ausgeben" - -#: init/completions/ls.fish:24 -msgid "Long format, numeric IDs" -msgstr "Langformat, numerische IDs" - -#: init/completions/ls.fish:26 -msgid "Replace non-graphic characters with '?'" -msgstr "Nicht darstellbare Zeichen durch '?' ersetzen" - -#: init/completions/ls.fish:27 -msgid "Reverse sort order" -msgstr "Sortierreihenfolge umkehren" - -#: init/completions/ls.fish:28 -msgid "Print size of files" -msgstr "Größe der Dateien ausgeben" - -#: init/completions/ls.fish:30 -msgid "List by columns" -msgstr "Nach Spalten auflisten" - -#: init/completions/ls.fish:31 -msgid "Sort by size" -msgstr "Nach Größe sortieren" - -#: init/completions/ls.fish:32 -msgid "Show and sort by ctime" -msgstr "Nach ctime sortieren und anzeigen" - -#: init/completions/ls.fish:33 -msgid "Don't sort" -msgstr "Nicht sortieren" - -#: init/completions/ls.fish:34 -msgid "Long format without owner" -msgstr "Langformat ohne Eigentümer" - -#: init/completions/ls.fish:35 -msgid "Set blocksize to 1kB" -msgstr "Blockgröße auf 1kB festlegen" - -#: init/completions/ls.fish:36 init/completions/ps.fish:25 -msgid "Long format" -msgstr "Langformat" - -#: init/completions/ls.fish:37 -msgid "Comma separated format" -msgstr "Komma-getrenntes Format" - -#: init/completions/ls.fish:38 -msgid "Sort by modification time" -msgstr "Nach Veränderungsdatum sortieren" - -#: init/completions/ls.fish:39 -msgid "Show access time" -msgstr "Zugriffszeit anzeigen" - -#: init/completions/ls.fish:40 -msgid "List entries by lines" -msgstr "Einträge auflisten" - -#: init/completions/ls.fish:41 -msgid "List one file per line" -msgstr "Eine Datei pro Zeile auflisten" - -#: init/completions/ls.fish:47 -msgid "Print author" -msgstr "Autor ausgeben" - -#: init/completions/ls.fish:48 -msgid "Set block size" -msgstr "Blockgröße festlegen" - -#: init/completions/ls.fish:49 -msgid "Ignore files ending with ~" -msgstr "Dateien ignorieren, die mit ~ enden" - -#: init/completions/ls.fish:50 init/completions/ls.fish:96 -msgid "Use colors" -msgstr "Farben benutzen" - -#: init/completions/ls.fish:51 -msgid "Generate dired output" -msgstr "dired-Ausgabe erzeugen" - -#: init/completions/ls.fish:52 -msgid "List format" -msgstr "Listenformat" - -#: init/completions/ls.fish:53 -msgid "Long format, full-iso time" -msgstr "Langformat, volle ISO-Zeit" - -#: init/completions/ls.fish:54 -msgid "Don't print group information" -msgstr "Keine Gruppeninformation ausgeben" - -#: init/completions/ls.fish:58 -msgid "Skip entries matching pattern" -msgstr "Dem Muster entsprechende Einträge übergehen" - -#: init/completions/ls.fish:59 init/completions/ls.fish:103 -msgid "Print raw entry names" -msgstr "Roheinträge ausgeben" - -#: init/completions/ls.fish:60 -msgid "Long format without groups" -msgstr "Langformat ohne Gruppen" - -#: init/completions/ls.fish:61 -msgid "Non graphic as-is" -msgstr "Nicht darstellbare Zeichen unverändert lassen" - -#: init/completions/ls.fish:62 -msgid "Enclose entry in quotes" -msgstr "Eintrag in Markierungen einschliessen" - -#: init/completions/ls.fish:63 -msgid "Select quoting style" -msgstr "Markierungsstil auswählen" - -#: init/completions/ls.fish:64 -msgid "Sort criteria" -msgstr "Sortier-Kriterien" - -#: init/completions/ls.fish:75 -msgid "Show time type" -msgstr "Zeittyp anzeigen" - -#: init/completions/ls.fish:82 -msgid "Select time style" -msgstr "Zeitformat auswählen" - -#: init/completions/ls.fish:83 -msgid "Assume tab stops at each COLS" -msgstr "Tab-Stopp bei jeder COLS annehmen" - -#: init/completions/ls.fish:84 -msgid "Do not sort" -msgstr "Nicht sortieren" - -#: init/completions/ls.fish:85 -msgid "Sort by version" -msgstr "Sortierung nach Version" - -#: init/completions/ls.fish:86 -msgid "Assume screen width" -msgstr "Angenommene Bildschirmbreite" - -#: init/completions/ls.fish:87 -msgid "Sort by extension" -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 festlegen" - -#: init/completions/ls.fish:98 -msgid "Don't follow symlinks" -msgstr "Symbolischen Links nicht folgen" - -#: init/completions/ls.fish:99 -msgid "Show modification time" -msgstr "Änderungsdatum anzeigen" - -#: init/completions/ls.fish:100 -msgid "Show whiteouts when scanning directories" -msgstr "Überblendungen beim Scannen von Verzeichnissen anzeigen" - -#: init/completions/ls.fish:101 -msgid "Display each file's MAC label" -msgstr "MAC-Markierung jeder Datei anzeigen" - -#: init/completions/ls.fish:102 -msgid "Include the file flags in a long (-l) output" -msgstr "Datei-Kennungen in langer (-l) Ausgabe einfügen" - -#: init/completions/makedepend.fish:1 -msgid "Define" -msgstr "Definiere" - -#: init/completions/makedepend.fish:2 -msgid "Include directory" -msgstr "include-Verzeichnis" - -#: init/completions/makedepend.fish:3 -msgid "Replace include directories" -msgstr "include-Verzeichnisse ersetzen" - -#: init/completions/makedepend.fish:4 -msgid "Append dependencies to makefile" -msgstr "Abhängigkeiten an makefile anhängen" - -#: init/completions/makedepend.fish:5 -msgid "Specify makefile" -msgstr "makefile angeben" - -#: init/completions/makedepend.fish:6 -msgid "Prepend file to input" -msgstr "Datei der Eingabe voranstellen" - -#: init/completions/makedepend.fish:7 -msgid "Object file suffix" -msgstr "Suffix für Objektdatei" - -#: init/completions/makedepend.fish:8 -msgid "Object file prefix" -msgstr "Prefix für Objektdatei" - -#: init/completions/makedepend.fish:9 -msgid "Starting string delimiter" -msgstr "Start-Begrenzer für Zeichenketten" - -#: init/completions/makedepend.fish:10 -msgid "Line width" -msgstr "Zeilenbreite" - -#: init/completions/makedepend.fish:12 -msgid "Warn about multiple inclusion" -msgstr "bei mehrmaligen Einschluss warnen" - -#: init/completions/make.fish:8 +#: share/completions/make.fish:12 msgid "Target" msgstr "Ziel" -#: init/completions/make.fish:9 +#: share/completions/make.fish:13 msgid "Use file as makefile" msgstr "Datei als makefile verwenden" -#: init/completions/make.fish:10 init/completions/tar.fish:15 -msgid "Change directory" -msgstr "Verzeichnis wechseln" - -#: init/completions/make.fish:12 -msgid "Environment before makefile" -msgstr "Umgebung vor makefile" - -#: init/completions/make.fish:13 -msgid "Ignore errors" -msgstr "Fehler ignorieren" - -#: init/completions/make.fish:14 +#: share/completions/make.fish:18 msgid "Search directory for makefile" msgstr "Verzeichnis nach makefile durchsuchen" -#: init/completions/make.fish:15 +#: share/completions/make.fish:19 msgid "Number of concurrent jobs" msgstr "Anzahl gleichzeitiger Jobs" -#: init/completions/make.fish:16 -msgid "Continue after an error" -msgstr "Fortsetzung nach Fehler" - -#: init/completions/make.fish:17 -msgid "Start when load drops" -msgstr "Start, wenn die Systemlast sinkt" - -#: init/completions/make.fish:18 -msgid "Do not execute commands" -msgstr "Keine Befehle ausführen" - -#: init/completions/make.fish:19 +#: share/completions/make.fish:23 msgid "Ignore specified file" msgstr "Angegebene Datei ignorieren" -#: init/completions/make.fish:20 -msgid "Print database" -msgstr "Datenbank ausgeben" - -#: init/completions/make.fish:21 -msgid "Question mode" -msgstr "Fragemodus" - -#: init/completions/make.fish:22 -msgid "Eliminate implicit rules" -msgstr "implizite Regeln beseitigen" - -#: init/completions/make.fish:24 -msgid "Don't continue after an error" -msgstr "Keine Fortsetzung bei Fehlern" - -#: init/completions/make.fish:25 -msgid "Touch files, don't run commands" -msgstr "Dateien ändern, keine Befehle ausführen" - -#: init/completions/make.fish:27 -msgid "Print working directory" -msgstr "Arbeitsverzeichnis ausgeben" - -#: init/completions/make.fish:28 +#: share/completions/make.fish:32 msgid "Pretend file is modified" -msgstr "Vorgegebene Datei wurde geändert" +msgstr "Vorgegebene Datei wurde geändert" -#: init/completions/man.fish:32 -msgid "Program section" -msgstr "Programm-Sektion" +#: share/completions/makedepend.fish:1 +msgid "Define" +msgstr "Definiere" -#: init/completions/man.fish:33 -msgid "Syscall section" -msgstr "Sektion zu Systemaufrufen" +#: share/completions/makedepend.fish:2 +msgid "Include directory" +msgstr "include-Verzeichnis" -#: init/completions/man.fish:34 -msgid "Library section" -msgstr "Bibliotheks-Sektion" +#: share/completions/makedepend.fish:3 +msgid "Replace include directories" +msgstr "include-Verzeichnisse ersetzen" -#: init/completions/man.fish:35 -msgid "Device section" -msgstr "Geräte-Sektion" +#: share/completions/makedepend.fish:5 +msgid "Specify makefile" +msgstr "makefile angeben" -#: init/completions/man.fish:36 -msgid "File format section" -msgstr "Sektion für Dateiformate" +#: share/completions/makedepend.fish:6 +msgid "Prepend file to input" +msgstr "Datei der Eingabe voranstellen" -#: init/completions/man.fish:37 -msgid "Games section" -msgstr "Spiele-Sektion" +#: share/completions/makedepend.fish:7 +msgid "Object file suffix" +msgstr "Suffix für Objektdatei" -#: init/completions/man.fish:38 -msgid "Misc section" -msgstr "Sektion für sonstiges" +#: share/completions/makedepend.fish:8 +msgid "Object file prefix" +msgstr "Prefix für Objektdatei" -#: init/completions/man.fish:39 -msgid "Admin section" -msgstr "Adminstrations-Sektion" +#: share/completions/makedepend.fish:9 +msgid "Starting string delimiter" +msgstr "Start-Begrenzer für Zeichenketten" -#: init/completions/man.fish:40 -msgid "Kernel section" -msgstr "Kernel-Sektion" +#: share/completions/makedepend.fish:10 +msgid "Line width" +msgstr "Zeilenbreite" -#: init/completions/man.fish:41 -msgid "Tcl section" -msgstr "Tcl-Sektion" - -#: init/completions/man.fish:42 -msgid "New section" -msgstr "Neue Sektion" - -#: init/completions/man.fish:43 -msgid "Local section" -msgstr "Lokale Sektion" - -#: init/completions/man.fish:45 -msgid "Old section" -msgstr "Alte Sektion" - -#: init/completions/man.fish:46 init/completions/modprobe.fish:7 -#: init/completions/ssh.fish:12 init/completions/yum.fish:51 -msgid "Configuration file" -msgstr "Konfigurationsdatei" - -#: init/completions/man.fish:47 -msgid "Manpath" -msgstr "Pfad für Handbuchseiten" - -#: init/completions/man.fish:48 -msgid "Pager" -msgstr "Anzeigeprogramm" - -#: init/completions/man.fish:49 -msgid "Manual sections" -msgstr "Handbuch-Sektionen" - -#: init/completions/man.fish:50 -msgid "Display all matches" -msgstr "Alle Übereinstimmungen anzeigen" - -#: init/completions/man.fish:51 -msgid "Always reformat" -msgstr "immer neuformatieren" - -#: init/completions/man.fish:52 -msgid "Debug" -msgstr "Debug" - -#: init/completions/man.fish:53 -msgid "Debug and run" -msgstr "Debug und Ausführung" - -#: init/completions/man.fish:54 -msgid "Show whatis information" -msgstr "whatis-Information anzeigen" - -#: init/completions/man.fish:55 -msgid "Format only" -msgstr "Nur Format" - -#: init/completions/man.fish:57 -msgid "Show apropos information" -msgstr "apropos-Information anzeigen" - -#: init/completions/man.fish:58 -msgid "Search in all man pages" -msgstr "In allen Handbuchseiten suchen" - -#: init/completions/man.fish:59 -msgid "Set system" -msgstr "System festlegen" - -#: init/completions/man.fish:60 -msgid "Preprocessors" -msgstr "Preprozessoren" - -#: init/completions/man.fish:61 -msgid "Format for printing" -msgstr "Druckformat" - -#: init/completions/man.fish:62 init/completions/man.fish:63 -msgid "Only print locations" -msgstr "Nur Lokationen ausgeben" - -#: init/completions/mimedb.fish:1 -msgid "Input is a file, use name and contents to determine mimetype" +#: share/completions/mosh.fish:20 +msgid "Controls use of speculative local echo" 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" -msgstr "Eingabe ist eine Datei, Namen zur mime-Typbestimmung benutzen" - -#: init/completions/mimedb.fish:3 -msgid "Input is a mimetype" -msgstr "Eingabe ist ein mime-Typ" - -#: init/completions/mimedb.fish:4 -msgid "Output mimetype" -msgstr "mime-Typ ausgeben" - -#: init/completions/mimedb.fish:5 -msgid "Output description of mimetype" -msgstr "Beschreibung des mime-Typs ausgeben" - -#: init/completions/mimedb.fish:6 -msgid "Output default action for mimetype" -msgstr "Standardaktion für mime-Typ ausgeben" - -#: init/completions/mimedb.fish:7 -msgid "Launch default action for each file" -msgstr "Starte Standardakion für jede Datei" - -#: init/completions/modprobe.fish:6 -msgid "Print messages about what the program is doing" -msgstr "Nachrichten über den Programmablauf ausgeben" - -#: init/completions/modprobe.fish:8 -msgid "Dump configuration file" -msgstr "Konfigurationsdatei ausgeben" - -#: init/completions/modprobe.fish:9 -msgid "Do not actually insert/remove module" -msgstr "Modul nicht wirklich laden/entfernen" - -#: init/completions/modprobe.fish:10 init/completions/modprobe.fish:11 -msgid "Ignore install and remove commands in configuration file" -msgstr "Installations- und Löschbefehle der Konfigurationsdatei ignorieren" - -#: init/completions/modprobe.fish:12 -msgid "Ignore bogus module names" -msgstr "gefälschte Modulnamen ignorieren" - -#: init/completions/modprobe.fish:13 -msgid "Remove modules" -msgstr "Module entfernen" - -#: init/completions/modprobe.fish:15 -msgid "Ignore all version information" -msgstr "Sämtliche Versions-Informationen ignorieren" - -#: init/completions/modprobe.fish:16 -msgid "Ignore version magic information" -msgstr "Magische Versionsinformation ignorieren" - -#: init/completions/modprobe.fish:17 -msgid "Ignore module interface version" -msgstr "Modulschnittstellenversion ignorieren" - -#: init/completions/modprobe.fish:18 -msgid "List all modules matching the given wildcard" -msgstr "Alle Module auflisten, die den angegebenen Mustern entsprechen" - -#: init/completions/modprobe.fish:19 -msgid "Insert modules matching the given wildcard" -msgstr "Module einfügen, die den angegebenen Mustern entsprechen" - -#: init/completions/modprobe.fish:20 -msgid "Restrict wildcards to specified directory" -msgstr "Jokerzeichen auf angegebenes Verzeichnis beschränken" - -#: init/completions/modprobe.fish:21 -msgid "Send error messages through syslog" -msgstr "Fehlermeldungen per syslog senden" - -#: init/completions/modprobe.fish:22 -msgid "Specify kernel version" -msgstr "Kernel-Version angeben" - -#: init/completions/modprobe.fish:23 -msgid "List dependencies of module" -msgstr "Modulabhängigkeiten auflisten" - -#: init/completions/modprobe.fish:24 -msgid "Rename module" -msgstr "Modul umbenennen" - -#: init/completions/modprobe.fish:25 -msgid "Fail if inserting already loaded module" -msgstr "Abbruch, wenn bereits geladenes Modul eingefügt werden soll" - -#: init/completions/mount.fish:49 -msgid "Mount filesystems in fstab" -msgstr "Dateisystems aus fstab einhängen" - -#: init/completions/mount.fish:50 -msgid "Fork process for each mount" -msgstr "Für jedes Einhängen neuen Prozess erzeugen" - -#: init/completions/mount.fish:51 -msgid "Fake mounting" -msgstr "Einhängen vortäuschen" - -#: init/completions/mount.fish:52 -msgid "Add label to output" -msgstr "Ausgabe mit Markierung versehen" - -#: init/completions/mount.fish:53 -msgid "Do not write mtab" -msgstr "keine mtab schreiben" - -#: init/completions/mount.fish:54 -msgid "Tolerate sloppy mount options" -msgstr "Saloppe Einhäng-Optionen tolerieren" - -#: init/completions/mount.fish:55 -msgid "Read only" -msgstr "Nur lesen" - -#: init/completions/mount.fish:56 -msgid "Read/Write mode" -msgstr "Lese-/Schreib-Modus" - -#: init/completions/mount.fish:57 +#: share/completions/mount.fish:19 msgid "Mount partition with specified label" -msgstr "Partition mit angegebenem Label einhängen" +msgstr "Partition mit angegebenem Label einhängen" -#: init/completions/mount.fish:58 +#: share/completions/mount.fish:20 msgid "Mount partition with specified UID" -msgstr "Partition mit angegebener UID einhängen" +msgstr "Partition mit angegebener UID einhängen" -#: init/completions/mount.fish:59 -msgid "Exclude filesystems" +#: share/completions/mount.fish:21 +#, fuzzy +msgid "Exclude file systems" msgstr "Dateisysteme ausschliessen" -#: init/completions/mount.fish:60 +#: share/completions/mount.fish:22 msgid "Remount a subtree to a second position" -msgstr "Teilbaum an einer zweiten Position erneut einhängen" +msgstr "Teilbaum an einer zweiten Position erneut einhängen" -#: init/completions/mount.fish:61 +#: share/completions/mount.fish:23 msgid "Move a subtree to a new position" msgstr "Teilbaum zu einer neuen Position verschieben" -#: init/completions/mount.fish:62 -msgid "Filesystem" +#: share/completions/mount.fish:24 +#, fuzzy +msgid "File system" msgstr "Dateisystem" -#: init/completions/mount.fish:64 +#: share/completions/mount.fish:26 msgid "Mount option" -msgstr "Einhäng-Option" +msgstr "Einhäng-Option" -#: init/completions/mplayer.fish:27 -msgid "Dynamically change postprocessing" -msgstr "Nachverarbeitung dynamisch ändern" - -#: init/completions/mplayer.fish:28 +#: share/completions/mplayer.fish:28 msgid "A/V sync speed" msgstr "A/V Sync-Geschwindigkeit" -#: init/completions/mplayer.fish:29 init/completions/mplayer.fish:31 -msgid "Skip frames to maintain A/V sync" -msgstr "Rahmen überspringen, um A/V-Synchronisation zu erhalten" - -#: init/completions/mplayer.fish:32 +#: share/completions/mplayer.fish:32 msgid "Loop playback" msgstr "Playback-Schleife" -#: init/completions/mplayer.fish:33 -msgid "Play in random order" -msgstr "in zufälliger Reihenfolge spielen" - -#: init/completions/mplayer.fish:36 -msgid "Full screen" -msgstr "Vollbildschirm" - -#: init/completions/mplayer.fish:37 -msgid "Set playlist" -msgstr "Abspielliste einrichten" - -#: init/completions/mplayer.fish:38 -msgid "Audio language" -msgstr "Audio-Sprache" - -#: init/completions/mplayer.fish:39 -msgid "Play audio from file" -msgstr "Audio aus Datei spielen" - -#: init/completions/mplayer.fish:40 -msgid "Set default CD-ROM drive" -msgstr "Standard-CD-ROM-Gerät festlegen" - -#: init/completions/mplayer.fish:41 -msgid "Set number of audio channels" -msgstr "Anzahl der Audiokanäle festlegen" - -#: init/completions/mplayer.fish:42 -msgid "Set start chapter" -msgstr "Startkapitel festlegen" - -#: init/completions/mplayer.fish:43 -msgid "Set default DVD-ROM drive" -msgstr "Standard DVD-ROM-Gerät festlegen" - -#: init/completions/mplayer.fish:44 -msgid "Set dvd viewing angle" -msgstr "DVD-Betrachtungswinkel festlegen" - -#: init/completions/mplayer.fish:45 -msgid "Force rebuilding index" -msgstr "Index-Neuerstellung erzwingen" - -#: init/completions/mplayer.fish:46 -msgid "Override framerate" -msgstr "Frame-Rate überschreiben" - -#: init/completions/mplayer.fish:47 -msgid "Build index if unavailable" -msgstr "Index erstellen, wenn nicht vorhanden" - -#: init/completions/mplayer.fish:48 -msgid "Load index from file" -msgstr "Index aus Datei laden" - -#: init/completions/mplayer.fish:49 -msgid "Force non-interleaved AVI parser" -msgstr "Nicht verschachtelten AVI-Parser" - -#: init/completions/mplayer.fish:50 -msgid "Rebuild index and save to file" -msgstr "Index neu erstellen und in Datei speichern" - -#: init/completions/mplayer.fish:51 -msgid "Seek to give time position" -msgstr "Zeitposition suchen" - -#: init/completions/mplayer.fish:52 -msgid "TV capture mode" -msgstr "Tv-Capture-Modus" - -#: init/completions/mplayer.fish:53 -msgid "Subtitle language" -msgstr "Untertitel-Sprache" - -#: init/completions/mplayer.fish:54 -msgid "Subtitle file" -msgstr "Untertitel-Datei" - -#: init/completions/mplayer.fish:55 -msgid "Handle subtitlefile as unicode" -msgstr "Untertitel-Datei als Unicode behandeln" - -#: init/completions/mplayer.fish:56 -msgid "Handle subtitlefile as utf8" -msgstr "Untertitel-Datei als utf8 behandeln" - -#: init/completions/mplayer.fish:58 init/completions/mplayer.fish:76 +#: share/completions/mplayer.fish:58 share/completions/mplayer.fish:76 msgid "Video output" msgstr "Video-Ausgabe" -#: init/completions/mplayer.fish:64 init/completions/mplayer.fish:70 +#: share/completions/mplayer.fish:64 share/completions/mplayer.fish:70 msgid "Audio output" msgstr "Audio-Ausgabe" -#: init/completions/mv.fish:1 -msgid "Make backup of each existing destination file" -msgstr "Sicherung jeder existierenden Zieldatei erstellen" +#: share/completions/msgfmt.fish:5 +#, fuzzy +msgid "Generate a Java ResourceBundle class" +msgstr "Quellindexdatei erstellen" -#: init/completions/mv.fish:2 -msgid "Do not prompt before overwriting" -msgstr "Keine Abfrage vor Überschreiben" +#: share/completions/msgfmt.fish:6 +msgid "Like --java, and assume Java2 (JDK 1.2 or higher)" +msgstr "" -#: init/completions/mv.fish:4 +#: share/completions/msgfmt.fish:7 +#, fuzzy +msgid "Generate a .NET .dll file" +msgstr "Masterdatei erstellen" + +#: share/completions/msgfmt.fish:8 +#, fuzzy +msgid "Generate a .NET .resources file" +msgstr "Quellindexdatei erstellen" + +#: share/completions/msgfmt.fish:9 +#, fuzzy +msgid "Generate a tcl/msgcat .msg file" +msgstr "Masterdatei erstellen" + +#: share/completions/msgfmt.fish:10 +#, fuzzy +msgid "Generate a Qt .qm file" +msgstr "Masterdatei erstellen" + +#: share/completions/msgfmt.fish:17 +#, fuzzy +msgid "Resource name" +msgstr "Dienstname" + +#: share/completions/msgfmt.fish:18 +msgid "Locale name, either language or language_COUNTRY" +msgstr "" + +#: share/completions/msgfmt.fish:19 +#, fuzzy +msgid "Base directory for output" +msgstr "Datei-Deskriptor für Eingabe" + +#: share/completions/mutt.fish:18 +msgid "An expanded version of the given alias is passed to stdout" +msgstr "" + +#: share/completions/mutt.fish:19 +msgid "Attach a file to your message using MIME" +msgstr "" + +#: share/completions/mutt.fish:20 +msgid "Specify a blind-carbon-copy (BCC) recipient" +msgstr "" + +#: share/completions/mutt.fish:21 +msgid "Specify a carbon-copy (CC) recipient" +msgstr "" + +#: share/completions/mutt.fish:22 +msgid "Run command after processing of initialization files" +msgstr "" + +#: share/completions/mutt.fish:23 +#, fuzzy +msgid "Specify which mailbox to load" +msgstr "sendmail-Befehl angeben" + +#: share/completions/mutt.fish:24 +msgid "Specify an initialization file to read instead of ~/.muttrc" +msgstr "" + +#: share/completions/mutt.fish:25 +msgid "Specify a draft file containing header and body for the message" +msgstr "" + +#: share/completions/mutt.fish:26 +msgid "Specify a file to include into the body of a message" +msgstr "" + +#: share/completions/mutt.fish:27 +#, fuzzy +msgid "Specify a default mailbox type" +msgstr "Ziel-E-Mail-Adresse angeben" + +#: share/completions/mutt.fish:28 +#, fuzzy +msgid "Query a configuration variables value" +msgstr "Eine Konfigurationsdatei angeben" + +#: share/completions/mutt.fish:29 +#, fuzzy +msgid "Specify the subject of the message" +msgstr "Geben Sie einen Titel für rss an" + +#: share/completions/mv.fish:4 msgid "Answer for overwrite questions" -msgstr "Antwort für Überschreib-Fragen" +msgstr "Antwort für Ãœberschreib-Fragen" -#: init/completions/mv.fish:5 -msgid "Remove trailing slashes from source" -msgstr "Angehängte / von der Quelle entfernen" - -#: init/completions/mv.fish:6 -msgid "Backup suffix" -msgstr "Endung für Sicherung" - -#: init/completions/mv.fish:7 -msgid "Target directory" -msgstr "Zielverzeichnis" - -#: init/completions/mv.fish:8 -msgid "Do not overwrite newer files" -msgstr "Neuere Dateien nicht überschreiben" - -#: init/completions/nextd.fish:1 init/completions/prevd.fish:1 -msgid "Also print directory history" -msgstr "Auch Verzeichnisverlauf ausgeben" - -#: init/completions/nice.fish:2 -msgid "Increment priority by specified number first" -msgstr "Priorität zunächst um angegebene Zahl erhöhen" - -#: init/completions/perl.fish:1 init/completions/ruby.fish:2 +#: share/completions/perl.fish:6 msgid "Specify record separator" msgstr "Satztrenner angeben" -#: init/completions/perl.fish:2 init/completions/ruby.fish:3 +#: share/completions/perl.fish:7 msgid "Turn on autosplit mode" msgstr "Autosplit-Modus aktivieren" -#: init/completions/perl.fish:3 init/completions/ruby.fish:4 +#: share/completions/perl.fish:8 msgid "Check syntax" -msgstr "Syntax prüfen" +msgstr "Syntax prüfen" -#: init/completions/perl.fish:4 init/completions/ruby.fish:6 +#: share/completions/perl.fish:9 +msgid "Control Unicode features" +msgstr "" + +#: share/completions/perl.fish:10 +msgid "Debug UTF-8 cache" +msgstr "" + +#: share/completions/perl.fish:11 +msgid "ARGV uses UTF-8" +msgstr "" + +#: share/completions/perl.fish:12 +msgid "Opened filehandles are UTF-8" +msgstr "" + +#: share/completions/perl.fish:13 +msgid "STDERR is UTF-8" +msgstr "" + +#: share/completions/perl.fish:14 +msgid "Filehandles that are read are UTF-8" +msgstr "" + +#: share/completions/perl.fish:15 +msgid "STDIN is UTF-8" +msgstr "" + +#: share/completions/perl.fish:16 +msgid "Enable Unicode conditionally" +msgstr "" + +#: share/completions/perl.fish:17 +msgid "Filehandles written to are UTF-8" +msgstr "" + +#: share/completions/perl.fish:18 +msgid "STDOUT is UTF-8" +msgstr "" + +#: share/completions/perl.fish:19 +msgid "STDOUT, STDIN, and STDERR are UTF-8" +msgstr "" + +#: share/completions/perl.fish:20 msgid "Debugger" msgstr "Debugger" -#: init/completions/perl.fish:5 -msgid "Debug option" -msgstr "Debug-Option" +#: share/completions/perl.fish:25 +#, fuzzy +msgid "Disable sitecustomize.pl" +msgstr "Cookie-Benutzung deaktivieren" -#: init/completions/perl.fish:6 init/completions/ruby.fish:7 -msgid "Execute command" -msgstr "Befehl ausführen" +#: share/completions/perl.fish:27 +#, fuzzy +msgid "Show help and exit" +msgstr "Hilfe anzeigen und beenden" -#: init/completions/perl.fish:7 init/completions/ruby.fish:9 -msgid "Set regexp used to split input" -msgstr "Zur Eingabetrennung benutzten regulären Ausdruck festlegen" - -#: init/completions/perl.fish:8 init/completions/ruby.fish:10 -msgid "Edit files in-place" -msgstr "Original-Dateien editieren" - -#: init/completions/perl.fish:9 init/completions/ruby.fish:11 -msgid "Include path" -msgstr "Include-Pfad" - -#: init/completions/perl.fish:10 init/completions/ruby.fish:12 +#: share/completions/perl.fish:30 msgid "Automatic line ending processing" msgstr "Automatische Zeilenende-Verarbeitung" -#: init/completions/perl.fish:11 init/completions/ruby.fish:13 +#: share/completions/perl.fish:33 msgid "Loop script" msgstr "Schleifen-Skript" -#: init/completions/perl.fish:12 init/completions/ruby.fish:14 +#: share/completions/perl.fish:34 #, sh-format msgid "Loop script, print $_" msgstr "Schleifen-Skript, zeige $_" -#: init/completions/perl.fish:13 -msgid "Invoke CPP" -msgstr "CPP aufrufen" - -#: init/completions/perl.fish:14 init/completions/ruby.fish:16 +#: share/completions/perl.fish:35 msgid "Define custom switches" msgstr "Angepasste Schalter definieren" -#: init/completions/perl.fish:15 init/completions/ruby.fish:17 +#: share/completions/perl.fish:36 #, sh-format msgid "Search $PATH for script" msgstr "$PATH nach Skript durchsuchen" -#: init/completions/perl.fish:16 init/completions/ruby.fish:18 -msgid "Taint checking" -msgstr "Taintprüfung" +#: share/completions/perl.fish:37 +msgid "Taint checking, but only with warnings" +msgstr "" -#: init/completions/perl.fish:17 +#: share/completions/perl.fish:38 +msgid "Taint checking" +msgstr "Taintprüfung" + +#: share/completions/perl.fish:39 +msgid "Dump core" +msgstr "" + +#: share/completions/perl.fish:40 msgid "Unsafe mode" msgstr "Unsicherer Modus" -#: init/completions/perl.fish:19 init/completions/ruby.fish:22 -msgid "Extract script" -msgstr "Skript extrahieren" +#: share/completions/perl.fish:42 +#, fuzzy +msgid "Display configuration and exit" +msgstr "Version anzeigen und beenden" -#: init/completions/pine.fish:1 -msgid "Open folder" -msgstr "Ordner öffnen" +#: share/completions/perl.fish:43 +#, fuzzy +msgid "Show warnings" +msgstr "Warnungen unterdrücken" -#: init/completions/pine.fish:2 -msgid "Open file" -msgstr "Datei öffnen" +#: share/completions/perl.fish:44 +#, fuzzy +msgid "Force warnings" +msgstr "Warnungen unterdrücken" -#: init/completions/pine.fish:4 -msgid "Start in folder index" -msgstr "Im Ordner-Index starten" +#: share/completions/perl.fish:45 +#, fuzzy +msgid "Disable warnings" +msgstr "Warnungen über MFC deaktivieren" -#: init/completions/pine.fish:5 -msgid "Initial set of keystrokes" -msgstr "Startmenge der Tastendrücke" +#: share/completions/portmaster.fish:49 +#, fuzzy +msgid "Ports Directory" +msgstr "Verzeichnis" -#: init/completions/pine.fish:6 -msgid "Use function keys for commands" -msgstr "Funktionstasten für Befehle nutzen" +#: share/completions/portmaster.fish:55 +#, fuzzy +msgid "Installed Package" +msgstr "Neues Paket installieren" -#: init/completions/pine.fish:7 -msgid "Expand collections in FOLDER LIST display" -msgstr "Sammlungen bei der Anzeige der VERZEICHNISLISTE erweitern" +#: share/completions/psql.fish:19 +#, fuzzy +msgid "execute commands from file, then exit" +msgstr "Befehl ausführen, als ob es Teil von .wgetrc wäre" -#: init/completions/pine.fish:8 -msgid "Start with specified current message number" -msgstr "Mit angegebener aktueller Nachrichtennummer starten" - -#: init/completions/pine.fish:9 -msgid "Open folder read-only" -msgstr "Ordner nur zum Lesen öffnen" - -#: init/completions/pine.fish:10 -msgid "Set configuration file" -msgstr "Konfigurationsdatei festlegen" - -#: init/completions/pine.fish:11 -msgid "Set global configuration file" -msgstr "Globale Konfigurationsdatei festlegen" - -#: init/completions/pine.fish:12 -msgid "Restricted mode" -msgstr "Beschränkter Modus" - -#: init/completions/pine.fish:13 -msgid "Enable suspention support" -msgstr "Unterstützung für Suspension aktivieren" - -#: init/completions/pine.fish:14 -msgid "Produce a sample global configuration file" -msgstr "Ein Beispiel für eine globale Konfigurationsdatei erstellen" - -#: init/completions/pine.fish:15 -msgid "Produce sample configuration file" -msgstr "Beispiel-Konfigurationsdatei erstellen" - -#: init/completions/pine.fish:16 -msgid "Set mail sort order" -msgstr "Mail-Sortierordnung festlegen" - -#: init/completions/pine.fish:26 -msgid "Config option" -msgstr "Konfigurations-Option" - -#: init/completions/ping.fish:2 -msgid "Audible ping" -msgstr "Hörbares ping" - -#: init/completions/ping.fish:3 -msgid "Adaptive ping" -msgstr "Anpassendes ping" - -#: init/completions/ping.fish:4 -msgid "Allow pinging a broadcast address" -msgstr "Ping an eine Broadcast-Adresse erlauben" - -#: init/completions/ping.fish:5 -msgid "Do not allow ping to change source address of probes" -msgstr "Verbiete ping das Ändern der Quell-Adresse der Proben" - -#: init/completions/ping.fish:6 -msgid "Stop after specified number of ECHO_REQUEST packets" -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 "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 festlegen" - -#: init/completions/ping.fish:9 -msgid "Flood ping" -msgstr "Ping-Flood" - -#: init/completions/ping.fish:10 -msgid "Wait specified interval of seconds between sending each packet" -msgstr "Warte angegebenes Sekundenintervall zwischen dem Senden der Pakete" - -#: init/completions/ping.fish:11 -msgid "Set source address to specified interface address" -msgstr "Quelladresse auf angegebene Schnittstellenadresse festlegen" - -#: init/completions/ping.fish:12 -msgid "Send the specified number of packets without waiting for reply" -msgstr "Angegebene Zahl von Paketen, ohne auf Antwort zu warten" - -#: init/completions/ping.fish:13 -msgid "Suppress loopback of multicast packets" -msgstr "Schleife bei Multicast-Paketen unterdrücken" - -#: init/completions/ping.fish:14 -msgid "Numeric output only" -msgstr "nur numerische Ausgabe" - -#: init/completions/ping.fish:15 -msgid "Pad packet with empty bytes" -msgstr "Packet mit leeren Bytes auffüllen" - -#: init/completions/ping.fish:16 -msgid "Set Quality of Service -related bits in ICMP datagrams" -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" +#: share/completions/psql.fish:63 +msgid "database server port" 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" -msgstr "Gibt die Anzahl zu sendender Bytes an" - -#: init/completions/ping.fish:21 -msgid "Set socket buffer size" -msgstr "Socketpuffergröße festlegen" - -#: init/completions/ping.fish:22 -msgid "Set the IP Time to Live" -msgstr "IP-Lebensdauer (TTL) festlegen" - -#: init/completions/ping.fish:23 -msgid "Set special IP timestamp options" -msgstr "Spezielle IP-Zeitstempeloptionen festlegen" - -#: init/completions/ping.fish:24 -msgid "Select Path MTU Discovery strategy" -msgstr "Wähle Strategie zur Erkennung der Pfad-MTU" - -#: init/completions/ping.fish:25 -msgid "Print full user-to-user latency" -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 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" -msgstr "Zeit zum Warten auf eine Antwort, in Sekunden" - -#: init/completions/ps.fish:3 init/completions/ps.fish:7 -msgid "Select all" -msgstr "Alle auswählen" - -#: init/completions/ps.fish:4 -msgid "Invert selection" -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 "Alle Prozesse mit Ausnahme der Sitzungsführer auswählen" - -#: init/completions/ps.fish:8 -msgid "Deselect all processes that do not fulfill conditions" -msgstr "Alle Prozesse deselektieren, die nicht die Bedingungen erfüllen" - -#: init/completions/ps.fish:10 -msgid "Select by command" -msgstr "Auswahl per Befehl" - -#: init/completions/ps.fish:11 -msgid "Select by group" -msgstr "Auswahl per Gruppe" - -#: init/completions/ps.fish:13 init/completions/ps.fish:14 -msgid "Select by user" -msgstr "Auswahl per Benutzer" - -#: init/completions/ps.fish:15 -msgid "Select by group/session" -msgstr "Auswahl per Gruppe/Sitzung" - -#: init/completions/ps.fish:16 -msgid "Select by PID" -msgstr "Auswahl per PID" - -#: init/completions/ps.fish:17 -msgid "Select by parent PID" -msgstr "Auswahl per Eltern-PID" - -#: init/completions/ps.fish:18 -msgid "Select by session ID" -msgstr "Auswahl per Sitzungskennung" - -#: init/completions/ps.fish:19 -msgid "Select by tty" -msgstr "Auswahl per tty" - -#: init/completions/ps.fish:20 -msgid "Extra full format" -msgstr "Zusätzliches Vollformat" - -#: init/completions/ps.fish:21 init/completions/ps.fish:26 -msgid "User defined format" -msgstr "Benutzerdefiniertes Format" - -#: init/completions/ps.fish:22 init/completions/ps.fish:28 -msgid "Add column for security data" -msgstr "Spalte für Sicherheitsdaten hinzufügen" - -#: init/completions/ps.fish:23 -msgid "Full format" -msgstr "Volles Format" - -#: init/completions/ps.fish:24 -msgid "Jobs format" -msgstr "Job-Format" - -#: init/completions/ps.fish:27 -msgid "Do not show flags" -msgstr "Keine Flags anzeigen" - -#: init/completions/ps.fish:29 -msgid "Show hierarchy" -msgstr "Hierarchie anzeigen" - -#: init/completions/ps.fish:30 -msgid "Set namelist file" -msgstr "namelist-Datei festlegen" - -#: init/completions/ps.fish:31 -msgid "Wide output" -msgstr "breite Ausgabe" - -#: init/completions/ps.fish:32 init/completions/ps.fish:33 -msgid "Show threads" -msgstr "Threads anzeigen" - -#: init/completions/python.fish:1 -msgid "Execute argument as command" -msgstr "Argument als Befehl ausführen" - -#: init/completions/python.fish:2 -msgid "Debug on" -msgstr "Debug einschalten" - -#: init/completions/python.fish:3 -msgid "Ignore environment variables" -msgstr "Umgebungsvariablen ignorieren" - -#: init/completions/python.fish:5 -msgid "Interactive mode after executing commands" -msgstr "Interaktiver Modus nach Ausführung der Befehle" - -#: init/completions/python.fish:6 -msgid "Enable optimizations" -msgstr "Optimierungen aktivieren" - -#: init/completions/python.fish:7 -msgid "Division control" -msgstr "Bereichskontrolle" - -#: init/completions/python.fish:8 -msgid "Disable import of site module" -msgstr "Import des Seitenmoduls deaktivieren" - -#: init/completions/python.fish:9 -msgid "Warn on mixed tabs and spaces" -msgstr "Warnung bei gemischten Tabulator- und Leerzeichen" - -#: init/completions/python.fish:10 -msgid "Unbuffered input and output" -msgstr "ungepufferte Ein-/Ausgabe" - -#: init/completions/python.fish:13 -msgid "Warning control" -msgstr "Steuerung für Warnungen" - -#: init/completions/python.fish:14 -msgid "Ignore first line of input" -msgstr "Erste Zeile der Eingabe ignorieren" - -#: init/completions/read.fish:2 -msgid "Set prompt command" -msgstr "Prompt-Befehl festlegen" - -#: init/completions/read.fish:3 init/completions/set.fish:62 -msgid "Export variable to subprocess" -msgstr "Variable an Unterprozess exportieren" - -#: init/completions/read.fish:4 init/completions/set.fish:64 -msgid "Make variable scope global" -msgstr "Geltungsbereich der Variablen global machen" - -#: init/completions/read.fish:5 init/completions/set.fish:65 -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 Benutzers auf diesem Computer verfügbar" - -#: init/completions/read.fish:7 init/completions/set.fish:63 -msgid "Do not export variable to subprocess" -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 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 " -"Prozessgruppenkennungen" - -#: init/completions/renice.fish:4 -msgid "Force following parameters to be interpreted as user names" -msgstr "Erzwinge die Interpretation der folgenden Parameter als Benutzernamen" - -#: init/completions/rmdir.fish:3 -msgid "Ignore errors from non-empty directories" -msgstr "Fehler aus nicht leeren Verzeichnissen ignorieren" - -#: init/completions/rmdir.fish:4 -msgid "Remove each component of path" -msgstr "Jede Komponente des Pfades entfernen" - -#: init/completions/rm.fish:2 -msgid "Unlink directory (Only by superuser)" -msgstr "Verzeichnis trennen (nur durch root)" - -#: init/completions/rm.fish:3 -msgid "Never prompt before removal" -msgstr "Vor Löschung niemals fragen" - -#: init/completions/rm.fish:4 -msgid "Prompt before removal" -msgstr "Vor Löschung nachfragen" - -#: init/completions/rm.fish:5 init/completions/rm.fish:6 -msgid "Recursively remove subdirectories" -msgstr "Unterverzeichnisse rekursiv entfernen" - -#: init/completions/rm.fish:7 -msgid "Explain what is done" -msgstr "Erläutere was geschieht" - -#: init/completions/rpm.fish:8 -msgid "List of rpm configuration files" -msgstr "Liste der rpm-Konfigurationsdateien" - -#: init/completions/rpm.fish:9 -msgid "Pipe output through specified command" -msgstr "Ausgabe durch angegebenen Befehl schicken" - -#: init/completions/rpm.fish:10 -msgid "Specify directory for rpm database" -msgstr "Verzeichnis für rpm-Datenbank angeben" - -#: init/completions/rpm.fish:15 -msgid "Specify root directory for rpm operations" -msgstr "root-Verzeichnis für rpm-Operationen angeben" - -#: init/completions/rpm.fish:22 +#: share/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" +"Füge der Transaktionsmenge die vorgeschlagenen Pakete hinzu, falls nötig" -#: init/completions/rpm.fish:23 +#: share/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" +"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 +#: share/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)" 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" +"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 +#: share/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" -#: init/completions/rpm.fish:26 +#: share/completions/rpm.fish:26 msgid "Don't install any files which are marked as documentation" msgstr "Keine Dateien installieren, die als Dokumentation markiert sind" -#: init/completions/rpm.fish:27 +#: share/completions/rpm.fish:27 msgid "Same as using --replacepkgs, --replacefiles, and --oldpackage" msgstr "" "Entspricht der Benutzung von --replacepkgs, --replacefiles und --oldpackage" -#: init/completions/rpm.fish:28 +#: share/completions/rpm.fish:28 msgid "Print 50 hash marks as the package archive is unpacked" msgstr "Zeige 50 Hash-Markierungen beim Auspacken des Paketarchivs" -#: init/completions/rpm.fish:29 +#: share/completions/rpm.fish:29 msgid "Don't check for sufficient disk space before installation" -msgstr "Vor der Installation nicht auf ausreichenden Plattenplatz prüfen" +msgstr "Vor der Installation nicht auf ausreichenden Plattenplatz prüfen" -#: init/completions/rpm.fish:30 +#: share/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" +"Installation und Aktualisierung auch dann ermöglichen, wenn die " +"Architekturen des Binärpaketes und des Rechners nicht übereinstimmen" -#: init/completions/rpm.fish:31 +#: share/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" +"Installation und Aktualisierung auch dann ermöglichen, wenn die " +"Betriebssysteme des Binärpaketes und des Rechners nicht übereinstimmen" -#: init/completions/rpm.fish:32 +#: share/completions/rpm.fish:32 msgid "Install documentation files (default)" msgstr "Dokumentationsdateien installieren (Standard)" -#: init/completions/rpm.fish:33 +#: share/completions/rpm.fish:33 msgid "Update only the database, not the filesystem" msgstr "Nur die Datenbank, nicht das Dateisystem aktualisieren" -#: init/completions/rpm.fish:34 init/completions/rpm.fish:94 +#: share/completions/rpm.fish:34 share/completions/rpm.fish:94 msgid "Don't verify package or header digests when reading" -msgstr "Beim Lesen keine Paket- oder Kopfzeilen-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 +#: share/completions/rpm.fish:35 share/completions/rpm.fish:97 msgid "Don't verify package or header signatures when reading" -msgstr "Beim Lesen keine Paket- oder Kopfzeilen-Signaturen überprüfen" +msgstr "Beim Lesen keine Paket- oder Kopfzeilen-Signaturen überprüfen" -#: init/completions/rpm.fish:36 +#: share/completions/rpm.fish:36 msgid "Don't do a dependency check" -msgstr "Keine Abhängigkeiten prüfen" +msgstr "Keine Abhängigkeiten prüfen" -#: init/completions/rpm.fish:37 +#: share/completions/rpm.fish:37 msgid "Don't suggest package(s) that provide a missing dependency" -msgstr "Keine Pakete vorschlagen, die fehlende Abhängigkeiten bereitstellen" +msgstr "Keine Pakete vorschlagen, die fehlende Abhängigkeiten bereitstellen" -#: init/completions/rpm.fish:38 +#: share/completions/rpm.fish:38 msgid "Don't change the package installation order" -msgstr "Paket-Installationsreihenfolge nicht ändern" +msgstr "Paket-Installationsreihenfolge nicht ändern" -#: init/completions/rpm.fish:39 +#: share/completions/rpm.fish:39 msgid "Don't execute scripts" -msgstr "Keine Skrpte ausführen" +msgstr "Keine Skrpte ausführen" -#: init/completions/rpm.fish:40 +#: share/completions/rpm.fish:40 msgid "Don't execute pre scripts" -msgstr "Keine pre-Skripte ausführen" +msgstr "Keine pre-Skripte ausführen" -#: init/completions/rpm.fish:41 +#: share/completions/rpm.fish:41 msgid "Don't execute post scripts" -msgstr "Keine post-Skripte ausführen" +msgstr "Keine post-Skripte ausführen" -#: init/completions/rpm.fish:42 +#: share/completions/rpm.fish:42 msgid "Don't execute preun scripts" -msgstr "Prerun-Skripte nicht ausführen" +msgstr "Prerun-Skripte nicht ausführen" -#: init/completions/rpm.fish:43 +#: share/completions/rpm.fish:43 msgid "Don't execute postun scripts" -msgstr "Postrun-Skripte nicht ausführen" +msgstr "Postrun-Skripte nicht ausführen" -#: init/completions/rpm.fish:44 init/completions/rpm.fish:115 +#: share/completions/rpm.fish:44 share/completions/rpm.fish:115 msgid "Don't execute trigger scriptlets" -msgstr "Trigger-Skripte nicht ausführen" +msgstr "Trigger-Skripte nicht ausführen" -#: init/completions/rpm.fish:45 +#: share/completions/rpm.fish:45 msgid "Don't execute triggerin scriptlets" -msgstr "Triggerin-Skripte nicht ausführen" +msgstr "Triggerin-Skripte nicht ausführen" -#: init/completions/rpm.fish:46 init/completions/rpm.fish:116 +#: share/completions/rpm.fish:46 share/completions/rpm.fish:116 msgid "Don't execute triggerun scriptlets" -msgstr "Triggerun-Skripte nicht ausführen" +msgstr "Triggerun-Skripte nicht ausführen" -#: init/completions/rpm.fish:47 init/completions/rpm.fish:117 +#: share/completions/rpm.fish:47 share/completions/rpm.fish:117 msgid "Don't execute triggerpostun scriptlets" -msgstr "Triggerpostun-Skripte nicht ausführen" +msgstr "Triggerpostun-Skripte nicht ausführen" -#: init/completions/rpm.fish:48 +#: share/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" +"älteres" -#: init/completions/rpm.fish:49 +#: share/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 ausgeben, während Dateien aus dem Paketarchiv ausgepackt werden. " -"Dies soll das Ausführen von rpm aus anderen Programmen heraus erleichtern" +"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 +#: share/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" +"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" +"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" - -#: init/completions/rpm.fish:52 init/completions/rpm.fish:118 +#: share/completions/rpm.fish:52 share/completions/rpm.fish:118 msgid "Re-package the files before erasing" -msgstr "Dateien vor dem Löschen umpacken" +msgstr "Dateien vor dem Löschen umpacken" -#: init/completions/rpm.fish:53 +#: share/completions/rpm.fish:53 msgid "" "Install the packages even if they replace files from other, already " "installed, packages" @@ -7131,69 +6028,71 @@ msgstr "" "Installiere diese Pakete, selbst wenn sie Dateien aus anderen, bereits " "installierten Paketen ersetzen" -#: init/completions/rpm.fish:54 +#: share/completions/rpm.fish:54 msgid "" -"Install the packages even if some of them are already installed on this system" +"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 +#: share/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" +"Paket nicht installieren, nur auf mögliche Konflikte testen und diese " +"anzeigen" -#: init/completions/rpm.fish:59 +#: share/completions/rpm.fish:59 msgid "Display change information for the package" -msgstr "Zeigt Änderungsinformationen zu dem Paket an" +msgstr "Zeigt Änderungsinformationen zu dem Paket an" -#: init/completions/rpm.fish:60 +#: share/completions/rpm.fish:60 msgid "List only configuration files (implies -l)" msgstr "Zeigt nur Konfigurationsdateien (impliziert -l)" -#: init/completions/rpm.fish:61 +#: share/completions/rpm.fish:61 msgid "List only documentation files (implies -l)" msgstr "Nur Dokumentationsdateien auflisten (impliziert -l)" -#: init/completions/rpm.fish:62 +#: share/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" -#: init/completions/rpm.fish:63 +#: share/completions/rpm.fish:63 msgid "List all the files in each selected package" -msgstr "Zeigt alle Dateien in jedem gewählten Paket an" +msgstr "Zeigt alle Dateien in jedem gewählten Paket an" -#: init/completions/rpm.fish:64 +#: share/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 " +"Zeit Paketinformation einschließlich Name, Version und Beschreibung. Benutzt " "--queryformat falls angegeben" -#: init/completions/rpm.fish:65 +#: share/completions/rpm.fish:65 msgid "Orders the package listing by install time" msgstr "Ordnet die angezeigten Paketen entsprechend der Installationszeit" -#: init/completions/rpm.fish:66 +#: share/completions/rpm.fish:66 msgid "List files in package" msgstr "Dateien im Paket auflisten" -#: init/completions/rpm.fish:67 +#: share/completions/rpm.fish:67 msgid "List capabilities this package provides" msgstr "Eigenschaften auflisten, die dieses Paket bereitstellt" -#: init/completions/rpm.fish:68 +#: share/completions/rpm.fish:68 msgid "List packages on which this package depends" -msgstr "Pakete auflisten, von denen dieses Paket abhängt" +msgstr "Pakete auflisten, von denen dieses Paket abhängt" -#: init/completions/rpm.fish:69 +#: share/completions/rpm.fish:69 msgid "List the package specific scriptlets" msgstr "Die Paket-spezifischen Skripte auflisten" -#: init/completions/rpm.fish:70 +#: share/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" @@ -7201,19 +6100,19 @@ 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 +#: share/completions/rpm.fish:71 share/completions/rpm.fish:72 msgid "Display the trigger scripts contained in the package" -msgstr "Die im Paket enthaltenen Auslöser-Skripte anzeigen" +msgstr "Die im Paket enthaltenen Auslöser-Skripte anzeigen" -#: init/completions/rpm.fish:78 +#: share/completions/rpm.fish:78 msgid "Query all installed packages" msgstr "Alle installierten Pakete abfragen" -#: init/completions/rpm.fish:79 +#: share/completions/rpm.fish:79 msgid "Query package owning specified file" -msgstr "Paket abfragen, zu dem die angegebene Datei gehört" +msgstr "Paket abfragen, zu dem die angegebene Datei gehört" -#: init/completions/rpm.fish:80 +#: share/completions/rpm.fish:80 msgid "" "Query package that contains a given file identifier, i.e. the MD5 digest of " "the file contents" @@ -7221,1845 +6120,6408 @@ msgstr "" "Frage nach Paketen, die einen gegebenen Datei-Identifikator enthalten, z. B. " "den MD5-Digest der Dateiinhalte" -#: init/completions/rpm.fish:81 +#: share/completions/rpm.fish:81 msgid "Query packages with the specified group" msgstr "Pakete mit der angegebenen Gruppe abfragen" -#: init/completions/rpm.fish:82 +#: share/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 Kopfzeilen-Bezeichner enthalten, z. " -"B. " -"den SHA1-Digest des unveränderlichen Kopfzeilenbereichs" +"B. den SHA1-Digest des unveränderlichen Kopfzeilenbereichs" -#: init/completions/rpm.fish:83 +#: share/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 +#: share/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 der kombinierten Kopfzeile und des Nutzdateninhaltes" +"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 +#: share/completions/rpm.fish:85 msgid "Parse and query specified spec-file as if it were a package" -msgstr "Angegebene spec-Datei auswerten, als ob es ein Paket wäre" +msgstr "Angegebene spec-Datei auswerten, als ob es ein Paket wäre" -#: init/completions/rpm.fish:86 +#: share/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" -#: init/completions/rpm.fish:87 +#: share/completions/rpm.fish:87 msgid "Query packages that are triggered by the specified packages" msgstr "Pakete abfragen, die von den angegebenen Paketen aktiviert werden" -#: init/completions/rpm.fish:88 +#: share/completions/rpm.fish:88 msgid "Query all packages that provide the specified capability" msgstr "Alle Pakete abfragen, die die angegebene Eigenschaft bereitstellen" -#: init/completions/rpm.fish:89 +#: share/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" +"Alle Pakete abfragen, die die angegebene Eigenschaft für die " +"Funktionsfähigkeit erfordern" -#: init/completions/rpm.fish:93 +#: share/completions/rpm.fish:93 msgid "Don't verify dependencies of packages" -msgstr "Abhängigkeiten der Pakete nicht prüfen" +msgstr "Abhängigkeiten der Pakete nicht prüfen" -#: init/completions/rpm.fish:95 +#: share/completions/rpm.fish:95 msgid "Don't verify any attributes of package files" -msgstr "Keine Attribute der Paketdateien prüfen" +msgstr "Keine Attribute der Paketdateien prüfen" -#: init/completions/rpm.fish:96 +#: share/completions/rpm.fish:96 msgid "Don't execute the %verifyscript scriptlet" -msgstr "Das Skript %verifyscript nicht ausführen" +msgstr "Das Skript %verifyscript nicht ausführen" -#: init/completions/rpm.fish:98 +#: share/completions/rpm.fish:98 msgid "Don't verify linkto attribute" -msgstr "Verweis(linkto)-Attribute nicht prüfen" +msgstr "Verweis(linkto)-Attribute nicht prüfen" -#: init/completions/rpm.fish:99 +#: share/completions/rpm.fish:99 msgid "Don't verify md5 attribute" -msgstr "md5-Attribute nicht prüfen" +msgstr "md5-Attribute nicht prüfen" -#: init/completions/rpm.fish:100 +#: share/completions/rpm.fish:100 msgid "Don't verify size attribute" -msgstr "Grössen-Attribute nicht prüfen" +msgstr "Grössen-Attribute nicht prüfen" -#: init/completions/rpm.fish:101 +#: share/completions/rpm.fish:101 msgid "Don't verify user attribute" -msgstr "Benutzerattribute nicht überprüfen" +msgstr "Benutzerattribute nicht überprüfen" -#: init/completions/rpm.fish:102 +#: share/completions/rpm.fish:102 msgid "Don't verify group attribute" -msgstr "Gruppen-Attribute nicht prüfen" +msgstr "Gruppen-Attribute nicht prüfen" -#: init/completions/rpm.fish:103 +#: share/completions/rpm.fish:103 msgid "Don't verify time attribute" -msgstr "Zeit-Attribute nicht prüfen" +msgstr "Zeit-Attribute nicht prüfen" -#: init/completions/rpm.fish:104 +#: share/completions/rpm.fish:104 msgid "Don't verify mode attribute" -msgstr "Modus-Attribute nicht prüfen" +msgstr "Modus-Attribute nicht prüfen" -#: init/completions/rpm.fish:105 +#: share/completions/rpm.fish:105 msgid "Don't verify dev attribute" -msgstr "Geräte-Attribute nicht prüfen" +msgstr "Geräte-Attribute nicht prüfen" -#: init/completions/rpm.fish:110 +#: share/completions/rpm.fish:110 msgid "Remove all versions of the package which match specified string" msgstr "Alle Paketversionen entfernen, die der Zeichenkette entsprechen" -#: init/completions/rpm.fish:111 +#: share/completions/rpm.fish:111 msgid "Don't check dependencies before uninstalling the packages" -msgstr "Vor dem Deinstallieren der Pakete keine Abhängigkeiten prüfen" +msgstr "Vor dem Deinstallieren der Pakete keine Abhängigkeiten prüfen" -#: init/completions/rpm.fish:112 +#: share/completions/rpm.fish:112 msgid "Don't execute scriplets" -msgstr "Skripte nicht ausführen" +msgstr "Skripte nicht ausführen" -#: init/completions/rpm.fish:113 +#: share/completions/rpm.fish:113 msgid "Don't execute preun scriptlet" -msgstr "Preun-Skripte nicht ausführen" +msgstr "Preun-Skripte nicht ausführen" -#: init/completions/rpm.fish:114 +#: share/completions/rpm.fish:114 msgid "Don't execute postun scriptlet" -msgstr "Postun-Skripte nicht ausführen" +msgstr "Postun-Skripte nicht ausführen" -#: init/completions/rpm.fish:119 +#: share/completions/rpm.fish:119 msgid "Don't really uninstall anything" msgstr "Nicht wirklich deinstallieren" -#: init/completions/rpm.fish:123 +#: share/completions/rpm.fish:123 msgid "Install new package" msgstr "Neues Paket installieren" -#: init/completions/rpm.fish:124 +#: share/completions/rpm.fish:124 msgid "Upgrade existing package" msgstr "Bestehendes Paket aktualisieren" -#: init/completions/rpm.fish:125 +#: share/completions/rpm.fish:125 msgid "Upgrade package if already installed" msgstr "Paket aktualisieren, wenn es bereits installiert ist" -#: init/completions/rpm.fish:126 +#: share/completions/rpm.fish:126 msgid "Query installed packages" msgstr "Installierte Pakete abfragen" -#: init/completions/rpm.fish:127 -msgid "Verify package integrety" -msgstr "Paketintegrität verifizieren" +#: share/completions/rpm.fish:127 +#, fuzzy +msgid "Verify package integrity" +msgstr "Paketintegrität verifizieren" -#: init/completions/rpm.fish:128 +#: share/completions/rpm.fish:128 msgid "Erase package" -msgstr "Paket löschen" +msgstr "Paket löschen" -#: init/completions/ruby.fish:5 -msgid "Kanji code-set" -msgstr "Kanji-Codeset" +#: share/completions/rsync.fish:41 +msgid "Force a fixed checksum block-size" +msgstr "" -#: init/completions/ruby.fish:15 +#: share/completions/rsync.fish:42 +#, fuzzy +msgid "Specify the remote shell to use" +msgstr "Zeitablauf für Zwischenspeicher angeben" + +#: share/completions/rsync.fish:43 +#, fuzzy +msgid "Specify the rsync to run on remote machine" +msgstr "root-Verzeichnis für rpm-Operationen angeben" + +#: share/completions/rsync.fish:69 +msgid "Also compare received files relative to DIR" +msgstr "" + +#: share/completions/rsync.fish:70 +msgid "" +"Also compare received files relative to DIR and include copies of unchanged " +"files" +msgstr "" + +#: share/completions/rsync.fish:93 +#, fuzzy +msgid "Output filenames using the specified format" +msgstr "Profilierungsinformation in angegebene Datei ausgeben" + +#: share/completions/rsync.fish:94 +msgid "Read password from FILE" +msgstr "" + +#: share/completions/rsync.fish:96 +msgid "Limit I/O bandwidth; KBytes per second" +msgstr "" + +#: share/completions/rsync.fish:97 +msgid "Write a batched update to FILE" +msgstr "" + +#: share/completions/rsync.fish:99 +msgid "Read a batched update from FILE" +msgstr "" + +#: share/completions/rsync.fish:100 +msgid "Force an older protocol version to be used" +msgstr "" + +#: share/completions/rsync.fish:101 +msgid "Set block/file checksum seed (advanced)" +msgstr "" + +#: share/completions/ruby.fish:7 +msgid "Execute command" +msgstr "Befehl ausführen" + +#: share/completions/ruby.fish:15 msgid "Require file" msgstr "Datei erfordern" -#: init/completions/ruby.fish:20 -msgid "Verbose mode without message" -msgstr "Ausführlicher Modus ohne Nachricht" - -#: init/completions/ruby.fish:24 -msgid "Compiler debug mode" -msgstr "Compiler-Debug-Modus" - -#: init/completions/scp.fish:29 +#: share/completions/scp.fish:40 msgid "Bandwidth limit" msgstr "Bandbreitenbegrenzung" -#: init/completions/scp.fish:30 init/completions/ssh.fish:97 +#: share/completions/scp.fish:41 share/completions/ssh.fish:39 +#: share/completions/sshfs.fish:25 msgid "Port" msgstr "Port" -#: init/completions/scp.fish:31 -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 -msgid "Recursively copy" -msgstr "Rekursive Kopie" - -#: init/completions/scp.fish:34 -msgid "Encyption program" -msgstr "Verschlüsselungsprogramm" - -#: init/completions/screen.fish:1 +#: share/completions/screen.fish:1 msgid "Print a list of running screen sessions" msgstr "Liste laufender screen-Sitzungen ausgeben" -#: init/completions/sed.fish:13 +#: share/completions/sed.fish:13 msgid "Evaluate expression" msgstr "Ausdruck auswerten" -#: init/completions/sed.fish:14 +#: share/completions/sed.fish:14 msgid "Evalute file" msgstr "Datei auswerten" -#: init/completions/sed.fish:15 -msgid "Edit files in place" -msgstr "Originaldateien editieren" - -#: init/completions/sed.fish:22 +#: share/completions/sed.fish:22 msgid "Specify line-length" -msgstr "Zeilenlänge angeben" +msgstr "Zeilenlänge angeben" -#: init/completions/sed.fish:23 -msgid "Disable all GNU extensions" -msgstr "Alle GNU-Erweiterungen deaktivieren" - -#: init/completions/sed.fish:24 init/completions/sed.fish:34 -msgid "Use extended regexp" -msgstr "Erweiterte reguläre Ausdrücke benutzen" - -#: init/completions/sed.fish:25 -msgid "Consider files as separate" -msgstr "Siehe Dateien als separat an" - -#: init/completions/sed.fish:26 -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" - -#: init/completions/service.fish:3 -msgid "Service name" -msgstr "Dienstname" - -#: init/completions/set_color.fish:1 init/completions/set.fish:74 +#: share/completions/set.fish:73 share/completions/set_color.fish:1 msgid "Color" msgstr "Farbe" -#: init/completions/set_color.fish:2 +#: share/completions/set.fish:74 share/completions/set_color.fish:2 msgid "Change background color" -msgstr "Hintergrundfarbe ändern" +msgstr "Hintergrundfarbe ändern" -#: init/completions/set_color.fish:3 -msgid "Make font bold" -msgstr "Zeichensatz fett" - -#: init/completions/set.fish:61 -msgid "Erase variable" -msgstr "Variable löschen" - -#: init/completions/set.fish:67 -msgid "Test if variable is defined" -msgstr "Test, ob Variable definiert ist" - -#: init/completions/set.fish:78 +#: share/completions/set.fish:79 msgid "Locale" msgstr "Locale" -#: init/completions/sort.fish:1 -msgid "Ignore leading blanks" -msgstr "Führende Leerzeichen ignorieren" - -#: init/completions/sort.fish:2 -msgid "Consider only blanks and alphanumerics" -msgstr "Nur Leerzeichen und alfanumerische Zeichen beachten" - -#: init/completions/sort.fish:4 -msgid "Compare general numeric value" -msgstr "Vergleiche generelle numerische Werte" - -#: init/completions/sort.fish:5 -msgid "Consider only printable" -msgstr "Beachte nur druckbare Zeichen" - -#: init/completions/sort.fish:6 -msgid "Compare month names" -msgstr "Vergleiche Monatsnamen" - -#: init/completions/sort.fish:7 -msgid "Compare string numerical value" -msgstr "Vergleiche numerische Werte als Zeichenkette" - -#: init/completions/sort.fish:8 -msgid "Reverse results" -msgstr "Ergebnisse umkehren" - -#: init/completions/sort.fish:9 -msgid "Only check if sorted" -msgstr "Nur auf Sortierung testen" - -#: init/completions/sort.fish:10 -msgid "Define key" -msgstr "Schlüssel definieren" - -#: init/completions/sort.fish:11 -msgid "Merge sorted files" -msgstr "Sortierte Dateien mischen" - -#: init/completions/sort.fish:12 +#: share/completions/sort.fish:12 msgid "Write to file" msgstr "In Datei schreiben" -#: init/completions/sort.fish:13 -msgid "Stabilize sort" -msgstr "Sort stabilisieren" - -#: init/completions/sort.fish:14 +#: share/completions/sort.fish:14 msgid "Set memory buffer size" -msgstr "Speicherpuffergröße festlegen" +msgstr "Speicherpuffergröße festlegen" -#: init/completions/sort.fish:15 -msgid "Field separator" -msgstr "Feldtrenner" - -#: init/completions/sort.fish:16 +#: share/completions/sort.fish:16 msgid "Set temporary directory" -msgstr "Temporäres Verzeichnis festlegen" +msgstr "Temporäres Verzeichnis festlegen" -#: init/completions/sort.fish:17 -msgid "Output only first of equal lines" -msgstr "Nur die ersten von gleichen Zeilen ausgeben" - -#: init/completions/sort.fish:18 -msgid "Lines end with 0 byte" -msgstr "Zeilen enden mit Null-Byte" - -#: init/completions/ssh.fish:6 -msgid "Protocoll version 1 only" -msgstr "Nur Protokoll-Version 1" - -#: init/completions/ssh.fish:7 -msgid "Protocoll version 2 only" -msgstr "Nur Protokoll-Version 2" - -#: init/completions/ssh.fish:8 -msgid "IPv4 addresses only" -msgstr "Nur IPv4-Adressen" - -#: init/completions/ssh.fish:9 -msgid "IPv6 addresses only" -msgstr "Nur IPv6-Adressen" - -#: init/completions/ssh.fish:10 -msgid "Compress all data" -msgstr "Alle Daten komprimieren" - -#: init/completions/ssh.fish:11 -msgid "Encryption algorithm" -msgstr "Verschlüsselungs-Algorithmus" - -#: init/completions/ssh.fish:13 -msgid "Identity file" -msgstr "Datei identifizieren" - -#: init/completions/ssh.fish:14 -msgid "Options" -msgstr "Optionen" - -#: init/completions/ssh.fish:80 -msgid "Disables forwarding of the authentication agent" -msgstr "Deaktiviert Weiterleitung des Authentifizierungs-Agenten" - -#: init/completions/ssh.fish:81 -msgid "Enables forwarding of the authentication agent" -msgstr "Aktiviert Weiterleitung des Authentifizierungs-Agenten" - -#: init/completions/ssh.fish:82 +#: share/completions/ssh.fish:24 msgid "Interface to transmit from" -msgstr "Schnittstelle zur Übertragung" +msgstr "Schnittstelle zur Ãœbertragung" -#: init/completions/ssh.fish:88 +#: share/completions/ssh.fish:30 msgid "Escape character" msgstr "Escape-Zeichen" -#: init/completions/ssh.fish:89 -msgid "Go to background" -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" - -#: init/completions/ssh.fish:91 -msgid "Smartcard device" -msgstr "Smartcard-Gerät" - -#: init/completions/ssh.fish:92 -msgid "Disable forwarding of Kerberos tickets" -msgstr "Weiterleitung von Kerberos-Tickets deaktivieren" - -#: init/completions/ssh.fish:93 +#: share/completions/ssh.fish:35 msgid "User" msgstr "Benutzer" -#: init/completions/ssh.fish:94 -msgid "MAC algorithm" -msgstr "MAC-Algorithmus" - -#: init/completions/ssh.fish:95 -msgid "Prevent reading from stdin" -msgstr "Lesen über Standardeingabe verhindern" - -#: init/completions/ssh.fish:96 -msgid "Do not execute remote command" -msgstr "Entfernten Befehl nicht ausführen" - -#: init/completions/ssh.fish:99 -msgid "Subsystem" -msgstr "Subsystem" - -#: init/completions/ssh.fish:100 -msgid "Force pseudo-tty allocation" -msgstr "Pseudo-tty-Zuordnung erzwingen" - -#: init/completions/ssh.fish:101 -msgid "Disable pseudo-tty allocation" -msgstr "Pseudo-tty-Zuordnung deaktivieren" - -#: init/completions/ssh.fish:102 -msgid "Disable X11 forwarding" -msgstr "X11-Weiterleitung deaktivieren" - -#: init/completions/ssh.fish:103 -msgid "Enable X11 forwarding" -msgstr "X11-Weiterleitung aktivieren" - -#: init/completions/ssh.fish:104 -msgid "Locally forwarded ports" -msgstr "Lokal weitergeleitete Ports" - -#: init/completions/ssh.fish:105 -msgid "Remotely forwarded ports" -msgstr "entfernt weitergeleitete Ports" - -#: init/completions/ssh.fish:106 -msgid "Dynamic port forwarding" -msgstr "Dynamische Port-Weiterleitung" - -#: init/completions/su.fish:4 -msgid "Make login shell" -msgstr "Login-Shell erstellen" - -#: init/completions/su.fish:5 +#: share/completions/su.fish:5 msgid "Pass command to shell" -msgstr "Befehl an die Shell übergeben" +msgstr "Befehl an die Shell übergeben" -#: init/completions/su.fish:6 -msgid "Pass -f to the shell" -msgstr "-f an die Shell weitergeben" +#: share/completions/sylpheed.fish:8 +msgid "Open composition window with address" +msgstr "" -#: init/completions/su.fish:7 init/completions/su.fish:8 -msgid "Preserve environment" -msgstr "Umgebung erhalten" +#: share/completions/sylpheed.fish:9 +msgid "Open composition window with attached files" +msgstr "" -#: init/completions/tar.fish:1 init/completions/tar.fish:2 -msgid "Append archive to archive" -msgstr "Archiv an Archiv anhängen" +#: share/completions/sylpheed.fish:10 +msgid "Receive new messages" +msgstr "" -#: init/completions/tar.fish:3 -msgid "Create archive" -msgstr "Archiv erstellen" +#: share/completions/sylpheed.fish:11 +msgid "Receive new messages of all accounts" +msgstr "" -#: init/completions/tar.fish:4 init/completions/tar.fish:5 -msgid "Compare archive and filesystem" -msgstr "Archiv und Dateisystem vergleichen" +#: share/completions/sylpheed.fish:12 +msgid "Send all queued messages" +msgstr "" -#: init/completions/tar.fish:6 -msgid "Delete from archive" -msgstr "Aus Archiv löschen" +#: share/completions/sylpheed.fish:13 +msgid "Show the total number of messages for folder" +msgstr "" -#: init/completions/tar.fish:7 -msgid "Append files to archive" -msgstr "Dateien an Archiv anhängen" +#: share/completions/sylpheed.fish:14 +msgid "Show the total number of messages for each folder" +msgstr "" -#: init/completions/tar.fish:8 -msgid "List archive" -msgstr "Archiv auflisten" +#: share/completions/sylpheed.fish:15 +#, fuzzy +msgid "Specify directory with configuration files" +msgstr "Eine Konfigurationsdatei angeben" -#: init/completions/tar.fish:9 -msgid "Append new files" -msgstr "Neue Dateien anfügen" +#: share/completions/tar.fish:19 share/functions/cd.fish:5 +msgid "Change directory" +msgstr "Verzeichnis wechseln" -#: init/completions/tar.fish:10 init/completions/tar.fish:11 -msgid "Extract from archive" -msgstr "Aus Archiv extrahieren" - -#: init/completions/tar.fish:12 -msgid "Keep access time" -msgstr "Zugriffszeit behalten" - -#: init/completions/tar.fish:14 -msgid "Reblock while reading" -msgstr "Während des Lesens umblocken" - -#: init/completions/tar.fish:16 -msgid "Print directory names" -msgstr "Verzeichnisnamen ausgeben" - -#: init/completions/tar.fish:17 +#: share/completions/tar.fish:21 msgid "Archive file" msgstr "Archiv-Datei" -#: init/completions/tar.fish:18 -msgid "Archive is local" -msgstr "Archiv ist lokal" - -#: init/completions/tar.fish:19 -msgid "Run script at end of tape" -msgstr "Bei Bandende Skript ausführen" - -#: init/completions/tar.fish:20 -msgid "Use old incremental GNU format" -msgstr "altes inkrementelles GNU-Format benutzen" - -#: init/completions/tar.fish:21 -msgid "Use new incremental GNU format" -msgstr "Neues inkrementelles GNU-Format benutzen" - -#: init/completions/tar.fish:22 -msgid "Derefrerence symlinks" -msgstr "Symbolische Links dereferenzieren" - -#: init/completions/tar.fish:23 -msgid "Ignore zero block in archive" -msgstr "Nullblock im Archiv ignorieren" - -#: init/completions/tar.fish:24 -msgid "Filter through bzip2" -msgstr "Durch bzip2 filtern" - -#: init/completions/tar.fish:25 -msgid "Don't exit on unreadable files" -msgstr "Bei unlesbaren Dateien nicht abbrechen" - -#: init/completions/tar.fish:26 -msgid "Don't overwrite" -msgstr "Nicht überschreiben" - -#: init/completions/tar.fish:27 +#: share/completions/tar.fish:31 msgid "Starting file in archive" msgstr "Startdatei im Archiv" -#: init/completions/tar.fish:28 -msgid "Stay in local filesystem" -msgstr "Im lokalen Dateisystem bleiben" - -#: init/completions/tar.fish:29 +#: share/completions/tar.fish:33 msgid "Tape length" -msgstr "Band-Länge" +msgstr "Band-Länge" -#: init/completions/tar.fish:30 -msgid "Don't extract modification time" -msgstr "Modifizierungszeit nicht extrahieren" - -#: init/completions/tar.fish:31 -msgid "Multi volume archive" -msgstr "Mehr-Volume-Archiv" - -#: init/completions/tar.fish:32 +#: share/completions/tar.fish:36 msgid "Only store newer files" msgstr "Nur neuere Dateien speichern" -#: init/completions/tar.fish:33 init/completions/tar.fish:34 -msgid "Use V7 format" -msgstr "V7-Format verwenden" - -#: init/completions/tar.fish:35 -msgid "Extract to stdout" -msgstr "Auf stdout extrahieren" - -#: init/completions/tar.fish:36 init/completions/tar.fish:37 -msgid "Extract all permissions" -msgstr "Alle Rechte extrahieren" - -#: init/completions/tar.fish:38 -msgid "Don't strip leading /" -msgstr "Führenden / nicht entfernen" - -#: init/completions/tar.fish:39 -msgid "Preserve all permissions and do not sort file arguments" -msgstr "Alle Rechte bewahren und Datei-Argumente nicht sortieren" - -#: init/completions/tar.fish:40 -msgid "Show record number" -msgstr "Satznummer anzeigen" - -#: init/completions/tar.fish:41 -msgid "Remove files after adding to archive" -msgstr "Dateien nach Archivierung entfernen" - -#: init/completions/tar.fish:42 init/completions/tar.fish:43 -msgid "Do not sort file arguments" -msgstr "Dateiargumente nicht sortieren" - -#: init/completions/tar.fish:44 -msgid "Preserve file ownership" -msgstr "Dateieigentümer erhalten" - -#: init/completions/tar.fish:45 -msgid "Handle sparse files" -msgstr "Sparse-Dateien bearbeiten" - -#: init/completions/tar.fish:46 +#: share/completions/tar.fish:50 msgid "Extract file from file" msgstr "Datei aus Datei extrahieren" -#: init/completions/tar.fish:47 -msgid "-T has null-terminated names" -msgstr "-T enthält null-terminierte Namen" - -#: init/completions/tar.fish:48 -msgid "Print total bytes written" -msgstr "Gesamtzahl geschriebener Bytes ausgeben" - -#: init/completions/tar.fish:50 +#: share/completions/tar.fish:54 msgid "Set volume name" msgstr "Volume-Namen festlegen" -#: init/completions/tar.fish:52 init/completions/tar.fish:53 -msgid "Ask for confirmation" -msgstr "Nach Bestätigung fragen" - -#: init/completions/tar.fish:54 -msgid "Verify archive" -msgstr "Archiv prüfen" - -#: init/completions/tar.fish:55 +#: share/completions/tar.fish:59 msgid "Exclude file" msgstr "Datei ausschliessen" -#: init/completions/tar.fish:56 +#: share/completions/tar.fish:60 msgid "Exclude files listed in specified file" -msgstr "die in der angegebenen Datei aufgeführten Dateien ausschliessen" +msgstr "die in der angegebenen Datei aufgeführten Dateien ausschliessen" -#: init/completions/tar.fish:57 init/completions/tar.fish:58 -msgid "Filter through compress" -msgstr "durch compress filtern" - -#: init/completions/tar.fish:59 init/completions/tar.fish:60 -msgid "Filter through gzip" -msgstr "durch gzip filtern" - -#: init/completions/tar.fish:61 +#: share/completions/tar.fish:65 msgid "Filter through specified program" msgstr "durch angegebenes Programm filtern" -#: init/completions/test.fish:4 -msgid "Negate expression" -msgstr "Ausdruck negieren" +#: share/completions/telnet.fish:9 share/completions/telnet.fish:14 +#, fuzzy +msgid "Specifies an 8-bit data path" +msgstr "Man-Pfad angeben" -#: init/completions/test.fish:5 -msgid "Logical and" -msgstr "Logisches Und" +#: share/completions/telnet.fish:10 +msgid "Do not try to negotiate TELNET BINARY option" +msgstr "" -#: init/completions/test.fish:6 -msgid "Logical or" -msgstr "Logisches Oder" +#: share/completions/telnet.fish:11 +msgid "Stops any character from being recognized as an escape character" +msgstr "" -#: init/completions/test.fish:7 -msgid "String length is non-zero" -msgstr "Länge der Zeichenkette ist nicht 0" +#: share/completions/telnet.fish:12 +msgid "Use local Kerberos authentication, if possible" +msgstr "" -#: init/completions/test.fish:8 -msgid "String length is zero" -msgstr "Länge der Zeichenkette ist 0" +#: share/completions/telnet.fish:13 +msgid "Specifies no automatic login to remote system" +msgstr "" -#: init/completions/test.fish:9 -msgid "Strings are equal" -msgstr "Zeichenketten sind gleich" +#: share/completions/telnet.fish:15 +msgid "Attempt automatic login" +msgstr "" -#: init/completions/test.fish:10 -msgid "Strings are not equal" -msgstr "Zeichenketten sind nicht gleich" +#: share/completions/telnet.fish:16 +#, fuzzy +msgid "Disables reading user's .telnetrc" +msgstr "Weiterleitung von Kerberos-Tickets deaktivieren" -#: init/completions/test.fish:11 -msgid "Integers are equal" -msgstr "Ganzzahlen sind gleich" +#: share/completions/telnet.fish:17 +#, fuzzy +msgid "Sets debug mode" +msgstr "Debug-Grad festlegen" -#: init/completions/test.fish:12 -msgid "Left integer larger than or equal to right integer" -msgstr "Linke Ganzzahl ist größer oder gleich zur rechten Ganzzahl" +#: share/completions/telnet.fish:18 +msgid "Sets IP TOS" +msgstr "" -#: init/completions/test.fish:13 -msgid "Left integer larger than right integer" -msgstr "Linke Ganzzahl ist größer als rechte Ganzzahl" +#: share/completions/telnet.fish:19 +#, fuzzy +msgid "Disables specified type of authentication" +msgstr "Deaktiviert Weiterleitung des Authentifizierungs-Agenten" -#: init/completions/test.fish:14 -msgid "Left integer less than or equal to right integer" -msgstr "Linke Ganzzahl ist kleiner oder gleich als rechte Ganzzahl" +#: share/completions/telnet.fish:20 +#, fuzzy +msgid "User login" +msgstr "Benutzer-Startverzeichnis" -#: init/completions/test.fish:15 -msgid "Left integer less than right integer" -msgstr "Linke Ganzzahl ist kleiner als rechte Ganzzahl" +#: share/completions/telnet.fish:21 +#, fuzzy +msgid "Log to tracefile" +msgstr "Log in Datei schreiben" -#: init/completions/test.fish:16 -msgid "Left integer not equal to right integer" -msgstr "linke Ganzzahl von rechter verschieden" +#: share/completions/telnet.fish:22 +#, fuzzy +msgid "Turn on encryption" +msgstr "Funktionsbeschreibung festlegen" -#: init/completions/test.fish:17 -msgid "Left file equal to right file" -msgstr "Linke Datei gleich der rechten Datei" +#: share/completions/telnet.fish:23 +msgid "User interface similar to rlogin" +msgstr "" -#: init/completions/test.fish:18 -msgid "Left file newer than right file" -msgstr "Linke Datei jünger als rechte Datei" +#: share/completions/telnet.fish:24 +msgid "Use Kerberos realm for authentication" +msgstr "" -#: init/completions/test.fish:19 -msgid "Left file older than right file" -msgstr "Linke Datei älter als rechte Datei" +#: share/completions/tmux.fish:1 +#, fuzzy +msgid "available sessions" +msgstr "Ausdruck auswerten" -#: init/completions/test.fish:20 -msgid "File is block device" -msgstr "Datei ist ein Block-Gerät" +#: share/completions/tmux.fish:5 +msgid "connected clients" +msgstr "" -#: init/completions/test.fish:21 -msgid "File is character device" -msgstr "Datei ist ein Zeichengerät" +#: share/completions/tmux.fish:9 +#, fuzzy +msgid "window panes" +msgstr "Änderung der Fenstergröße" -#: init/completions/test.fish:22 -msgid "File is directory" -msgstr "Datei ist ein Verzeichnis" +#: share/completions/totem.fish:18 +msgid "Tell any running totem instance: Add to playlist" +msgstr "" -#: init/completions/test.fish:23 -msgid "File exists" -msgstr "Datei ist vorhanden" +#: share/completions/totem.fish:19 +msgid "Tell any running totem instance: Play from playlist" +msgstr "" -#: init/completions/test.fish:24 -msgid "File is regular" -msgstr "reguläre Datei" - -#: init/completions/test.fish:25 -msgid "File is set-group-ID" -msgstr "Datei ist set-group-ID" - -#: init/completions/test.fish:26 init/completions/test.fish:29 -msgid "File is symlink" -msgstr "Datei ist symbolischer Link" - -#: init/completions/test.fish:27 -msgid "File owned by effective group ID" -msgstr "Datei gehört effektiver Gruppenkennung" - -#: init/completions/test.fish:28 -msgid "File has sticky bit set" -msgstr "Sticky-Bit der Datei ist gesetzt" - -#: init/completions/test.fish:30 -msgid "File owned by effective user ID" -msgstr "Datei gehört zu effektiver Benutzerkennung" - -#: init/completions/test.fish:31 -msgid "File is named pipe" -msgstr "Datei ist eine benannte Pipe" - -#: init/completions/test.fish:32 -msgid "File is readable" -msgstr "Datei ist lesbar" - -#: init/completions/test.fish:33 -msgid "File size is non-zero" -msgstr "Dateigröße ist nicht 0" - -#: init/completions/test.fish:34 -msgid "File is socket" -msgstr "Datei ist Socket" - -#: init/completions/test.fish:35 -msgid "FD is terminal" -msgstr "FD ist ein Terminal" - -#: init/completions/test.fish:36 -msgid "File set-user-ID bit is set" -msgstr "set-user-ID-Bit der Datei ist gesetzt" - -#: init/completions/test.fish:37 -msgid "File is writable" -msgstr "Datei ist schreibbar" - -#: init/completions/test.fish:38 -msgid "File is executable" -msgstr "Datei ist ausführbar" - -#: init/completions/top.fish:3 -msgid "Toggle command line/program name" -msgstr "Befehlszeile/Programmname umschalten" - -#: init/completions/top.fish:4 -msgid "Update interval" -msgstr "Aktualisierungs-Intervall" - -#: init/completions/top.fish:6 -msgid "Toggle idle processes" -msgstr "Anzeige wartender Prozesse umschalten" - -#: init/completions/top.fish:7 -msgid "Maximium iterations" -msgstr "Maximale Wiederholungen" - -#: init/completions/top.fish:8 -msgid "Monitor effective UID" -msgstr "tatsächliche UID beobachten" - -#: init/completions/top.fish:9 -msgid "Monitor user" -msgstr "Benutzer beobachten" - -#: init/completions/top.fish:10 -msgid "Monitor PID" -msgstr "PID beobachten" - -#: init/completions/top.fish:11 -msgid "Secure mode" -msgstr "Sicherer Modus" - -#: init/completions/top.fish:12 -msgid "Cumulative mode" -msgstr "Kumulativer Modus" - -#: init/completions/touch.fish:1 -msgid "Change access time" -msgstr "Zugriffszeit ändern" - -#: init/completions/touch.fish:2 +#: share/completions/touch.fish:2 msgid "Set date back" -msgstr "Datum zurücksetzen" +msgstr "Datum zurücksetzen" -#: init/completions/touch.fish:3 -msgid "Do not create file" -msgstr "Datei nicht erstellen" - -#: init/completions/touch.fish:4 init/completions/touch.fish:8 +#: share/completions/touch.fish:4 msgid "Set date" msgstr "Datum festlegen" -#: init/completions/touch.fish:5 +#: share/completions/touch.fish:5 msgid "Set date forward" msgstr "Datum in Zukunft festlegen" -#: init/completions/touch.fish:6 -msgid "Change modification time" -msgstr "Modifikationszeit ändern" +#: share/completions/touch.fish:9 +msgid "Set time" +msgstr "Zeit festlegen" -#: init/completions/touch.fish:7 -msgid "Use this files times" -msgstr "Diese Dateizeiten verwenden" +#: share/completions/unrar.fish:5 +#, fuzzy +msgid "Extract files to current directory" +msgstr "Dateien unter jedem Verzeichnis lesen" -#: init/completions/trap.fish:2 -msgid "Display names of all signals" -msgstr "Namen aller Signale anzeigen" +#: share/completions/unrar.fish:6 +msgid "List archive" +msgstr "Archiv auflisten" -#: init/completions/trap.fish:3 -msgid "Display all currently defined trap handlers" -msgstr "Alle derzeit definierten Trap-Handler anzeigen" +#: share/completions/unrar.fish:7 +#, fuzzy +msgid "List archive (technical)" +msgstr "Archiv auflisten" -#: init/completions/type.fish:3 -msgid "Print all possible definitions of the specified name" -msgstr "Alle möglichen Definitionen des angegebenen Namens ausgeben" +#: share/completions/unrar.fish:8 +#, fuzzy +msgid "List archive (bare)" +msgstr "Archiv auflisten" -#: init/completions/type.fish:4 -msgid "Supress function and builtin lookup" -msgstr "Unterdrücke Nachschlagen von Funktionen und eingebauten Befehlen" +#: share/completions/unrar.fish:9 +#, fuzzy +msgid "Print file to stdout" +msgstr "Zeit des letzten Neustarts anzeigen" -#: init/completions/type.fish:5 -msgid "Print command type" -msgstr "Befehlstyp ausgeben" +#: share/completions/unrar.fish:10 +#, fuzzy +msgid "Test archive files" +msgstr "Archiv-Datei" -#: init/completions/type.fish:6 -msgid "Print path to command, or nothing if name is not a command" -msgstr "Pfad zu Befehl ausgeben oder nichts, wenn es kein Befehl ist" +#: share/completions/unrar.fish:11 +#, fuzzy +msgid "Verbosely list archive" +msgstr "Archiv prüfen" -#: init/completions/type.fish:7 -msgid "Print path to command" -msgstr "Pfad zu Befehl ausgeben" - -#: init/completions/ulimit.fish:2 -msgid "Set or get all current limits" -msgstr "Festlegen/Anzeigen aller aktuellen Begrenzungen" - -#: init/completions/ulimit.fish:3 -msgid "Maximum size of core files created" -msgstr "Maximalgröße von erstellten core-Dateien" - -#: init/completions/ulimit.fish:4 -msgid "Maximum size of a process's data segment" -msgstr "Maximalgröße des Datensegmentes eines Prozesses" - -#: init/completions/ulimit.fish:5 -msgid "Maximum size of files created by the shell" -msgstr "Maximalgröße der von der Shell angelegten Dateien" - -#: init/completions/ulimit.fish:6 -msgid "Maximum size that may be locked into memory" -msgstr "Maximalgröße, die im Speicher gesperrt werden kann" - -#: init/completions/ulimit.fish:7 -msgid "Maximum resident set size" -msgstr "Maximale Größe des Programms im Arbeitsspeicher" - -#: init/completions/ulimit.fish:8 -msgid "Maximum number of open file descriptors" -msgstr "Maximale Zahl offener Datei-Deskriptoren" - -#: init/completions/ulimit.fish:9 -msgid "Maximum stack size" -msgstr "Maximale Stackgröße" - -#: init/completions/ulimit.fish:10 -msgid "Maximum amount of cpu time in seconds" -msgstr "Maximalanzahl CPU-Zeit in Sekunden" - -#: init/completions/ulimit.fish:11 -msgid "Maximum number of processes available to a single user" +#: share/completions/unrar.fish:12 +msgid "Verbosely list archive (technical)" 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" -msgstr "Maximaler virtueller Speicher, der der Shell zur Verfügung steht" - -#: init/completions/umount.fish:18 -msgid "Unmount without writing in /etc/mtab" -msgstr "Aushängen ohne Aktualisierung von /etc/mtab" - -#: init/completions/umount.fish:19 -msgid "In case unmounting fails, try to remount read-only" +#: share/completions/unrar.fish:13 +msgid "Verbosely list archive (bare)" msgstr "" -"Wenn das Aushängen fehlschläft, erneutes Einhängen im Nur-Lese-Modus versuchen" -#: init/completions/umount.fish:20 +#: share/completions/unrar.fish:14 +#, fuzzy +msgid "Extract files with full path" +msgstr "Datei aus Datei extrahieren" + +#: share/completions/update-eix-remote.fish:16 msgid "" -"In case the unmounted device was a loop device, also free this loop device" +"Fetch the eix-caches of some layman overlays into a temporary file resp. " +"into FILE and add them to the eix database" 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" +#: share/completions/update-eix-remote.fish:16 +msgid "Only fetch the overlays into FILE" 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" -msgstr "Alle in /etc/mtab definierten Dateisysteme aushängen" - -#: init/completions/umount.fish:23 -msgid "Actions should only be taken on file systems of the specified type" +#: share/completions/update-eix-remote.fish:16 +msgid "Only add the overlays from FILE to the eix database" 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" +#: share/completions/update-eix-remote.fish:16 +msgid "Remove all temporarily added virtual overlays from the eix database" 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)" +#: share/completions/vagrant.fish:3 +#, fuzzy +msgid "Test if vagrant has yet to be given the main command" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: 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." +#: share/completions/vagrant.fish:34 +#, fuzzy +msgid "Lists all available Vagrant boxes" +msgstr "Namen der verfügbaren Signale auflisten" -#: init/completions/uname.fish:1 -msgid "Print all information" -msgstr "Alle Informationen ausgeben" - -#: init/completions/uname.fish:2 -msgid "Print kernel name" -msgstr "Kernel-Name ausgeben" - -#: init/completions/uname.fish:3 -msgid "Print network node hostname" -msgstr "Rechnernamen des Netzwerkknotens ausgeben" - -#: init/completions/uname.fish:4 -msgid "Print kernel release" -msgstr "Kernel-Release ausgeben" - -#: init/completions/uname.fish:5 -msgid "Print kernel version" -msgstr "Kernel-Version ausgeben" - -#: init/completions/uname.fish:6 -msgid "Print machine name" -msgstr "Maschinenname ausgeben" - -#: init/completions/uname.fish:7 -msgid "Print processor" -msgstr "Prozessor ausgeben" - -#: init/completions/uname.fish:8 -msgid "Print harware platform" -msgstr "Hardware-Plattform ausgeben" - -#: init/completions/uname.fish:9 -msgid "Print operating system" -msgstr "Betriebssystem ausgeben" - -#: init/completions/uniq.fish:1 -msgid "Print number of occurences" -msgstr "Anzahl der Vorkommen ausgeben" - -#: init/completions/uniq.fish:2 -msgid "Only print duplicates" -msgstr "Nur doppelte Zeilen ausgeben" - -#: init/completions/uniq.fish:3 -msgid "Remove non-duplicate lines" -msgstr "Nicht doppelte Zeilen entfernen" - -#: init/completions/uniq.fish:8 -msgid "Avoid comparing first N fields" -msgstr "Erste N Felder nicht vergleichen" - -#: init/completions/uniq.fish:9 -msgid "Case insensitive" -msgstr "Groß-/Klein-Schreibung nicht unterscheiden" - -#: init/completions/uniq.fish:10 -msgid "Avoid comparing first N characters" -msgstr "Erste N Zeichen nicht vergleichen" - -#: init/completions/uniq.fish:11 -msgid "Only print unique lines" -msgstr "Nur einmalige Zeilen ausgeben" - -#: init/completions/uniq.fish:12 -msgid "Compare only specified number of characters" -msgstr "Nur angegebene Anzahl Zeichen vergleichen" - -#: init/completions/valgrind.fish:12 +#: share/completions/valgrind.fish:12 msgid "Skin" -msgstr "Oberfläche" +msgstr "Oberfläche" -#: init/completions/valgrind.fish:25 -msgid "Display help and debug options" -msgstr "Hilfe- und Debug-Optionen anzeigen" - -#: init/completions/valgrind.fish:29 -msgid "Valgrind-ise children" -msgstr "Kinder Valgrind-isieren" - -#: init/completions/valgrind.fish:30 -msgid "Track file descriptors" -msgstr "Datei-Deskriptoren beobachten" - -#: init/completions/valgrind.fish:31 -msgid "Log to file descriptor" -msgstr "Log auf Datei-Deskriptor ausgeben" - -#: init/completions/valgrind.fish:32 -msgid "Log to file" -msgstr "Log in Datei schreiben" - -#: init/completions/valgrind.fish:33 -msgid "Log to socket" -msgstr "Log auf Socket ausgeben" - -#: init/completions/valgrind.fish:35 -msgid "Callers in stack trace" -msgstr "Aufrufe in der Stackverfolgung" - -#: init/completions/valgrind.fish:36 -msgid "Stop showing errors if too many" -msgstr "Bei zu vielen Fehlern Anzeige beenden" - -#: init/completions/valgrind.fish:37 -msgid "Continue trace below main()" -msgstr "Trace unter main() fortsetzen" - -#: init/completions/valgrind.fish:38 -msgid "Supress errors from file" -msgstr "Fehler aus Datei unterdrücken" - -#: init/completions/valgrind.fish:39 -msgid "Print suppressions for detected errors" -msgstr "Unterdrückungen für entdeckte Fehler ausgeben" - -#: init/completions/valgrind.fish:40 -msgid "Start debugger on error" -msgstr "Bei Fehler Debugger starten" - -#: init/completions/valgrind.fish:41 -msgid "Debugger command" -msgstr "Debugger-Befehl" - -#: init/completions/valgrind.fish:42 -msgid "File descriptor for input" -msgstr "Datei-Deskriptor für Eingabe" - -#: init/completions/valgrind.fish:46 init/completions/valgrind.fish:55 -msgid "Check for memory leaks" -msgstr "Test auf Speicher-Lecks" - -#: init/completions/valgrind.fish:47 init/completions/valgrind.fish:56 -msgid "Show reachable leaked memory" -msgstr "Aufgetretenes Speicherleck anzeigen" - -#: init/completions/valgrind.fish:48 -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 "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" -msgstr "" -"Legt fest, wie bereitwillig Addrcheck verschiedene Ablaufverfolgungen als " -"gleich erachtet" - -#: init/completions/valgrind.fish:63 -msgid "Type of L1 instruction cache" -msgstr "Typ des L1-Anweisungs-Cache" - -#: init/completions/valgrind.fish:64 -msgid "Type of L1 data cache" -msgstr "Typ des L1-Daten-Cache" - -#: init/completions/valgrind.fish:65 -msgid "Type of L2 cache" -msgstr "Typ des L2-Cache" - -#: init/completions/valgrind.fish:69 -msgid "Specify a function that allocates memory" -msgstr "Eine Funktion angeben, die Speicher zuordnet" - -#: init/completions/valgrind.fish:71 +#: share/completions/valgrind.fish:78 msgid "The number of bytes of heap overhead per allocation" msgstr "Anzahl Bytes als Heap-Mehrverbrauch pro Zuordnung " -#: init/completions/valgrind.fish:72 +#: share/completions/valgrind.fish:79 msgid "Profile stack usage" msgstr "Profilstackauslastung" -#: init/completions/valgrind.fish:73 +#: share/completions/valgrind.fish:80 msgid "Depth of call chain" msgstr "Tiefe der Aufrufkette" -#: init/completions/valgrind.fish:74 +#: share/completions/valgrind.fish:81 msgid "Profiling output format" -msgstr "Ausgabeformat für Profilierung" +msgstr "Ausgabeformat für Profilierung" -#: init/completions/wc.fish:1 -msgid "Print byte counts" -msgstr "Anzahl Bytes ausgeben" +#: share/completions/vim-addons.fish:8 +#, fuzzy +msgid "Test if vim-addons has yet to be given the subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/wc.fish:2 -msgid "Print character counts" -msgstr "Anzahl Buchstaben ausgeben" +#: share/completions/w.fish:6 +msgid "Username" +msgstr "Benutzername" -#: init/completions/wc.fish:3 -msgid "Print newline counts" -msgstr "Anzahl Zeilenendzeichen ausgeben" +#: share/completions/wajig.fish:1 +#, fuzzy +msgid "Test if wajig has yet to be given the subcommand" +msgstr "Test, ob an apt noch ein Unterbefehl gegeben werden muss" -#: init/completions/wc.fish:4 -msgid "Print length of longest line" -msgstr "Länge der längsten Zeile ausgeben" - -#: init/completions/wc.fish:5 -msgid "Print word counts" -msgstr "Wortzählung ausgeben" - -#: init/completions/w.fish:1 -msgid "Dont print header" -msgstr "Kopfzeile nicht ausgeben" - -#: init/completions/w.fish:2 -msgid "Ignore username for time calculations" -msgstr "Benutzername für Zeitberechnungen ignorieren" - -#: init/completions/w.fish:3 -msgid "Short format" -msgstr "Kurzes Format" - -#: init/completions/w.fish:4 -msgid "Toggle printing of remote hostname" -msgstr "Anzeige des entfernten Rechners ein/ausschalten" - -#: init/completions/wget.fish:7 -msgid "Go to background immediately after startup" -msgstr "Direkt nach Start im Hintergrund arbeiten" - -#: init/completions/wget.fish:8 -msgid "Execute command as if part of .wgetrc" -msgstr "Befehl ausführen, als ob es Teil von .wgetrc wäre" - -#: init/completions/wget.fish:9 -msgid "Log all messages to logfile" -msgstr "Alle Nachrichten in Logdatei speichern" - -#: init/completions/wget.fish:10 -msgid "Append all messages to logfile" -msgstr "Alle Nachrichten an Logdatei anhängen" - -#: init/completions/wget.fish:11 -msgid "Turn on debug output" -msgstr "Debug-Ausgabe aktivieren" - -#: init/completions/wget.fish:14 init/completions/wget.fish:15 -msgid "Turn off verbose without being completely quiet" -msgstr "Ausführlichen Modus abschalten, jedoch nicht vollkommen ruhig" - -#: init/completions/wget.fish:16 -msgid "Read URLs from file" -msgstr "URLs aus Datei lesen" - -#: init/completions/wget.fish:17 -msgid "Force input to be treated as HTML" -msgstr "Erzwinge die Behandlung der Eingabe als HTML" - -#: init/completions/wget.fish:18 -msgid "Prepend string to relative links" -msgstr "Zeichenkette vor relative Links stellen" - -#: init/completions/wget.fish:19 -msgid "Bind address on local machine" -msgstr "Adresse an lokale Maschine binden" - -#: init/completions/wget.fish:20 -msgid "Set number of retries to number" -msgstr "Anzahl der Versuche auf Anzahl festlegen" - -#: init/completions/wget.fish:21 -msgid "Concatenate output to file" -msgstr "Ausgabe an Datei anfügen" - -#: init/completions/wget.fish:22 init/completions/wget.fish:23 -msgid "Never overwrite files with same name" -msgstr "Dateien gleichen Namens niemals überschreiben" - -#: init/completions/wget.fish:24 -msgid "Continue getting a partially-downloaded file" -msgstr "Herunterladen einer teilweise übertragenen Datei fortsetzen" - -#: init/completions/wget.fish:25 -msgid "Select progress meter type" -msgstr "Fortschrittsanzeigentyp auswählen" - -#: init/completions/wget.fish:32 -msgid "Turn on time-stamping" -msgstr "Zeitstempel aktivieren" - -#: init/completions/wget.fish:33 -msgid "Print the headers/responses sent by servers" -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 herunterladen, nur auf Verfügbarkeit testen" - -#: init/completions/wget.fish:35 -msgid "Set the network timeout" -msgstr "Zeitüberschreitung für Netzwerk festlegen" - -#: init/completions/wget.fish:36 -msgid "Set the DNS lookup timeout" -msgstr "Zeitüberschreitung für DNS-Abfragen festlegen" - -#: init/completions/wget.fish:37 -msgid "Set the connect timeout" -msgstr "Verbindungszeitüberschreitung festlegen" - -#: init/completions/wget.fish:38 -msgid "Set the read (and write) timeout" -msgstr "Lese- (und Schreib-)Zeitüberschreitung festlegen" - -#: init/completions/wget.fish:39 -msgid "Limit the download speed" -msgstr "Herunterladegeschwindigkeit begrenzen" - -#: init/completions/wget.fish:40 -msgid "Wait the specified number of seconds between the retrievals" -msgstr "angegebene Sekundenanzahl zwischen den Abrufen warten" - -#: init/completions/wget.fish:41 -msgid "Wait time between retries" -msgstr "Wartezeiten zwischen Abrufversuchen" - -#: init/completions/wget.fish:42 -msgid "Wait random amount of time between retrievals" -msgstr "Zufällige Zeitspanne zwischen Abrufen warten" - -#: init/completions/wget.fish:43 -msgid "Toggle proxy support" -msgstr "Proxy-Unterstützung ein/ausschalten" - -#: init/completions/wget.fish:44 -msgid "Specify download quota for automatic retrievals" -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" +#: share/completions/wajig.fish:10 +#, fuzzy +msgid "Test if wajig command should have packages as potential completion" msgstr "" -"Festlegung, welche Zeichen aus URLs in lokalen Dateinamen vorkommen dürfen" +"Testen, ob der apt-Befehl Pakete zur möglichen Fertigstellung haben sollte" -#: init/completions/wget.fish:53 init/completions/wget.fish:54 -msgid "Do not create a hierarchy of directories" -msgstr "Keine Verzeichnis-Hierarchie erstellen" +#: share/completions/wajig.fish:97 +#, fuzzy +msgid "Download package and any packages it depends on" +msgstr "Pakete auflisten, von denen dieses Paket abhängt" -#: init/completions/wget.fish:55 -msgid "Force creation of a hierarchy of directories" -msgstr "Erstellung einer Verzeichnis-Hierarchie erzwingen" - -#: init/completions/wget.fish:56 init/completions/wget.fish:57 -msgid "Disable generation of host-prefixed directories" -msgstr "Generierung von Verzeichnissen mit Host-Prefix deaktivieren" - -#: init/completions/wget.fish:58 -msgid "Use the protocol name as a directory component" -msgstr "Protokollname als Verzeichnisbestandteil benutzen" - -#: init/completions/wget.fish:59 -msgid "Ignore specified number of directory components" -msgstr "Angegebene Anzahl von Verzeichniskomponenten ignorieren" - -#: init/completions/wget.fish:60 -msgid "Set directory prefix" -msgstr "Verzeichnis-Präfix festlegen" - -#: init/completions/wget.fish:61 -msgid "Force html files to have html extension" -msgstr "html-Erweiterung für html-Dateien erzwingen" - -#: init/completions/wget.fish:62 -msgid "Specify the http username" -msgstr "http-Benutzername angeben" - -#: init/completions/wget.fish:63 -msgid "Specify the http password" -msgstr "http-Passwort angeben" - -#: init/completions/wget.fish:64 -msgid "Disable server-side cache" -msgstr "Server-seitigen Cache deaktivieren" - -#: init/completions/wget.fish:65 -msgid "Disable the use of cookies" -msgstr "Cookie-Benutzung deaktivieren" - -#: init/completions/wget.fish:66 -msgid "Load cookies from file" -msgstr "Cookies aus Datei laden" - -#: init/completions/wget.fish:67 -msgid "Save cookies to file" -msgstr "Cookies in Datei speichern" - -#: init/completions/wget.fish:68 -msgid "Save session cookies" -msgstr "Session-Cookies speichern" - -#: init/completions/wget.fish:69 -msgid "Ignore 'Content-Length' header" -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 Kopfzeilen definieren, die an HTTP-Server geschickt werden" - -#: init/completions/wget.fish:71 -msgid "Specify the proxy username" -msgstr "Proxy-Benutzername angeben" - -#: init/completions/wget.fish:72 -msgid "Specify the proxy password" -msgstr "Proxy-Passwort angeben" - -#: init/completions/wget.fish:73 -msgid "Set referer URL" -msgstr "Referer-URL festlegen" - -#: init/completions/wget.fish:74 -msgid "Save the headers sent by the HTTP server" -msgstr "Vom HTTP-Server gesendete Kopfzeilen speichern" - -#: init/completions/wget.fish:75 -msgid "Identify as agent-string" -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" +#: share/completions/wajig.fish:98 +msgid "Install package and associated recommended packages" 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" -msgstr "keep-alive-Option für http-Abrufe abschalten" - -#: init/completions/wget.fish:82 -msgid "Don't remove the temporary .listing files generated" -msgstr "Die temporären .listing-Dateien nicht entfernen" - -#: init/completions/wget.fish:83 -msgid "Turn off FTP globbing" -msgstr "FTP-Mustererkennung abschalten" - -#: init/completions/wget.fish:84 -msgid "Use the passive FTP retrieval scheme" -msgstr "Passiven FTP-Modus benutzen" - -#: init/completions/wget.fish:85 -msgid "Traverse symlinks and retrive pointed-to files" -msgstr "Symlinks folgen und die Dateien abrufen" - -#: init/completions/wget.fish:89 -msgid "Turn on recursive retrieving" -msgstr "Rekursiven Abruf aktivieren" - -#: init/completions/wget.fish:90 -msgid "Specify recursion maximum depth" -msgstr "Maximale Rekursionstiefe angeben" - -#: init/completions/wget.fish:91 -msgid "Delete every single file downloaded" -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" -msgstr "Links im Dokument für die lokale Anzeige konvertieren" - -#: init/completions/wget.fish:93 -msgid "Back up the original version" -msgstr "Sicherung der Original-Version" - -#: init/completions/wget.fish:94 -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" +#: share/completions/wajig.fish:99 +msgid "Reconfigure the named installed packages or run gkdebconf" msgstr "" -"Herunterladen aller zur korrekten Anzeige einer HTML-Seite erforderlichen " -"Dateien" -#: init/completions/wget.fish:96 -msgid "Turn on strict parsing of HTML comments" -msgstr "Strenge Auswertung von HTML-Kommentaren aktivieren" +#: share/completions/wajig.fish:100 +#, fuzzy +msgid "Reinstall each of the named packages" +msgstr "Ein oder mehrere Paket(e) installieren" -#: init/completions/wget.fish:100 -msgid "Comma-separated lists of file name suffixes or patterns to accept" +#: share/completions/wajig.fish:101 +msgid "Reload daemon configs, e.g., gdm, apache (see list-daemons)" 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" +#: share/completions/wajig.fish:102 +#, fuzzy +msgid "Remove one or more packages (see also purge)" +msgstr "Ein oder mehrere Paket(e) entfernen" + +#: share/completions/wajig.fish:103 +msgid "Remove package and its dependees not required by others" msgstr "" -"Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die " -"zurückgewiesen werden" -#: init/completions/wget.fish:102 -msgid "Set domains to be followed" -msgstr "Domain-Namen angeben, die beachtet werden" - -#: init/completions/wget.fish:103 -msgid "Specify the domains that are not to be followed" -msgstr "Domain-Namen angeben, die ignoriert werden sollen" - -#: init/completions/wget.fish:104 -msgid "Follow FTP links from HTML documents" -msgstr "FTP-Links in HTML-Dokumenten folgen" - -#: init/completions/wget.fish:105 -msgid "HTML tags to follow" -msgstr "zu beachtende HTML-Markierungen" - -#: init/completions/wget.fish:106 -msgid "HTML tags to ignore" -msgstr "zu ignorierenden HTML-Markierungen" - -#: init/completions/wget.fish:107 -msgid "Enable spanning across hosts" -msgstr "Spannung Host-übergreifend aktivieren" - -#: init/completions/wget.fish:108 -msgid "Follow relative links only" -msgstr "Nur relativen Links folgen" - -#: init/completions/wget.fish:109 -msgid "Specify a comma-separated list of directories you wish to follow" +#: share/completions/wajig.fish:104 +msgid "Remove orphaned libraries (not required by installed packages)" 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" +#: share/completions/wajig.fish:105 +#, fuzzy +msgid "Generate a .deb file for an installed package" +msgstr "Ein installiertes Paket neu erstellen und installieren" + +#: share/completions/wajig.fish:106 +msgid "Initialise or reset the JIG archive files" 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" -msgstr "Nie ins übergeordnete Verzeichnis wechseln" +#: share/completions/wajig.fish:107 +msgid "Stop then start a daemon, e.g., gdm, apache (see list-daemons)" +msgstr "" -#: init/completions/who.fish:1 -msgid "Same as -b -d --login -p -r -t -T -u" -msgstr "Entspricht -b -d --login -p -r -t -T -u" +#: share/completions/wajig.fish:108 +#, fuzzy +msgid "Install a RedHat .rpm package" +msgstr "Neues Paket installieren" -#: init/completions/who.fish:2 -msgid "Print time of last boot" -msgstr "Zeit des letzten Neustarts anzeigen" +#: share/completions/wajig.fish:109 +msgid "Convert a RedHat .rpm file to a Debian .deb file" +msgstr "" -#: init/completions/who.fish:3 -msgid "Print dead processes" -msgstr "Tote Prozesse ausgeben" +#: share/completions/wajig.fish:110 +#, fuzzy +msgid "Search for packages containing listed words" +msgstr "Paket entsprechend Muster suchen" -#: init/completions/who.fish:4 -msgid "Print line of headings" -msgstr "Überschrift ausgeben" +#: share/completions/wajig.fish:111 +msgid "Find local Debian archives suitable for sources.list" +msgstr "" -#: init/completions/who.fish:5 -msgid "Print idle time" -msgstr "Leerlaufzeit ausgeben" +#: share/completions/wajig.fish:112 +msgid "Configure the sources.list file which locates Debian archives" +msgstr "" -#: init/completions/who.fish:6 -msgid "Print login process" -msgstr "Anmeldeprozess ausgeben" +#: share/completions/wajig.fish:113 +msgid "Provide a detailed description of package [same as detail]" +msgstr "" -#: init/completions/who.fish:7 -msgid "Canonicalize hostnames via DNS" -msgstr "Rechnernamen per DNS auflösen" +#: share/completions/wajig.fish:114 +msgid "Trace the steps that a dist-upgrade would perform" +msgstr "" -#: init/completions/who.fish:8 -msgid "Print hostname and user for stdin" -msgstr "Hostname und Benutzer für Standardeingabe ausgeben" +#: share/completions/wajig.fish:115 +msgid "Trace the steps that an install would perform" +msgstr "" -#: init/completions/who.fish:9 -msgid "Print active processes spawned by init" -msgstr "Zeige von init gestartete aktive Prozesse" +#: share/completions/wajig.fish:116 +msgid "Trace the steps that a remove would perform" +msgstr "" -#: init/completions/who.fish:10 -msgid "Print all login names and number of users logged on" -msgstr "Alle Anmeldenamen und Anzahl der angemeldeter Benutzer ausgeben" +#: share/completions/wajig.fish:117 +msgid "Trace the steps that an upgrade would perform" +msgstr "" -#: init/completions/who.fish:11 -msgid "Print current runlevel" -msgstr "Zeige aktuelle Systemebene" +#: share/completions/wajig.fish:118 share/completions/wajig.fish:119 +msgid "Print out the size (in K) of all, or listed, installed packages" +msgstr "" -#: init/completions/who.fish:12 -msgid "Print name, line, and time" -msgstr "Zeige Name, Zeile und Zeit" +#: share/completions/wajig.fish:120 +msgid "Generates list of package=version for all installed packages" +msgstr "" -#: init/completions/who.fish:13 -msgid "Print last system clock change" -msgstr "Letzte Systemzeitumstellung ausgeben" +#: share/completions/wajig.fish:121 +#, fuzzy +msgid "Retrieve and unpack sources for the named packages" +msgstr "Umgekehrte Abhängigkeiten für das Paket auflisten" -#: 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 Benutzers als +, - oder ?" +#: share/completions/wajig.fish:122 +msgid "Start a daemon, e.g., gdm, apache (see list-daemons)" +msgstr "" -#: init/completions/who.fish:17 -msgid "List users logged in" -msgstr "Angemeldete Benutzer auflisten" +#: share/completions/wajig.fish:123 +#, fuzzy +msgid "Show the version and available version of packages" +msgstr "Volle Versionen der Pakete anzeigen" -#: init/completions/xprop.fish:3 -msgid "Display grammar and exit" -msgstr "Grammatik anzeigen und beenden" +#: share/completions/wajig.fish:124 share/completions/wajig.fish:125 +msgid "Show the version and available version of matching packages" +msgstr "" -#: init/completions/xprop.fish:4 +#: share/completions/wajig.fish:126 +msgid "Stop a daemon, e.g., gdm, apache (see list-daemons)" +msgstr "" + +#: share/completions/wajig.fish:127 +msgid "Install package and associated suggested packages" +msgstr "" + +#: share/completions/wajig.fish:128 +msgid "Run the Gnome task selector to install groups of packages" +msgstr "" + +#: share/completions/wajig.fish:129 +msgid "List packages with newer versions available for upgrading" +msgstr "" + +#: share/completions/wajig.fish:130 +msgid "Remove listed packages from hold so they are again upgraded" +msgstr "" + +#: share/completions/wajig.fish:131 +msgid "Search for an unofficial Debian package at apt-get.org" +msgstr "" + +#: share/completions/wajig.fish:132 +#, fuzzy +msgid "Update the list of down-loadable packages" +msgstr "Liste der Quellpakete aktualisieren" + +#: share/completions/wajig.fish:133 +msgid "Update default alternative for things like x-window-manager" +msgstr "" + +#: share/completions/wajig.fish:134 +msgid "Updates the local list of PCI ids from the internet master list" +msgstr "" + +#: share/completions/wajig.fish:135 +msgid "Updates the local list of USB ids from the internet master list" +msgstr "" + +#: share/completions/wajig.fish:136 +msgid "Upgrade all of the installed packages or just those listed" +msgstr "" + +#: share/completions/wajig.fish:137 +#, fuzzy +msgid "List version and distribution of (all) packages." +msgstr "Keine Attribute der Paketdateien prüfen" + +#: share/completions/wajig.fish:138 +#, fuzzy +msgid "A synonym for describe" +msgstr "Synonym für -i" + +#: share/completions/wajig.fish:139 +msgid "Find the package that supplies the given command or file" +msgstr "" + +#: share/completions/wpa_cli.fish:3 +msgid "get current WPA/EAPOL/EAP status" +msgstr "" + +#: share/completions/wpa_cli.fish:4 +msgid "get MIB variables (dot1x, dot11)" +msgstr "" + +#: share/completions/wpa_cli.fish:5 +msgid "show this usage help" +msgstr "" + +#: share/completions/wpa_cli.fish:6 +#, fuzzy +msgid "show interfaces/select interface" +msgstr "Schnittstelle auswählen" + +#: share/completions/wpa_cli.fish:7 +#, fuzzy +msgid "change debug level" +msgstr "Debug-Grad festlegen" + +#: share/completions/wpa_cli.fish:8 +msgid "show full wpa_cli license" +msgstr "" + +#: share/completions/wpa_cli.fish:9 +msgid "IEEE 802.1X EAPOL state machine logoff" +msgstr "" + +#: share/completions/wpa_cli.fish:10 +msgid "IEEE 802.1X EAPOL state machine logon" +msgstr "" + +#: share/completions/wpa_cli.fish:11 +#, fuzzy +msgid "set/list variables" +msgstr "Variable löschen" + +#: share/completions/wpa_cli.fish:12 +msgid "show PMKSA cache" +msgstr "" + +#: share/completions/wpa_cli.fish:13 +#, fuzzy +msgid "force reassociation" +msgstr "Simulation durchführen" + +#: share/completions/wpa_cli.fish:14 +msgid "force wpa_supplicant to re-read its config file" +msgstr "" + +#: share/completions/wpa_cli.fish:15 +#, fuzzy +msgid "force preauthentication" +msgstr "Pseudo-tty-Zuordnung erzwingen" + +#: share/completions/wpa_cli.fish:16 +msgid "configure identity for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:17 +msgid "configure password for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:18 +msgid "change password for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:19 +#, fuzzy +msgid "configure pin for an SSID" +msgstr "Konfiguration für das Erstellen auf BUILD" + +#: share/completions/wpa_cli.fish:20 +msgid "configure one-time-password for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:21 +msgid "configure private key passphrase for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:22 +msgid "set preferred BSSID for an SSID" +msgstr "" + +#: share/completions/wpa_cli.fish:23 +msgid "list configured networks" +msgstr "" + +#: share/completions/wpa_cli.fish:24 +msgid "select a network (disable others)" +msgstr "" + +#: share/completions/wpa_cli.fish:25 +#, fuzzy +msgid "enable a network" +msgstr "Depot aktivieren" + +#: share/completions/wpa_cli.fish:26 +#, fuzzy +msgid "disable a network" +msgstr "Depot deaktivieren" + +#: share/completions/wpa_cli.fish:27 +#, fuzzy +msgid "add a network" +msgstr "Neuen Schlüssel hinzufügen" + +#: share/completions/wpa_cli.fish:28 +#, fuzzy +msgid "remove a network" +msgstr "Schlüssel entfernen" + +#: share/completions/wpa_cli.fish:29 +msgid "set/list network variables" +msgstr "" + +#: share/completions/wpa_cli.fish:30 +#, fuzzy +msgid "get network variables" +msgstr "CVS-Benutzervariable festlegen" + +#: share/completions/wpa_cli.fish:31 +#, fuzzy +msgid "save the current configuration" +msgstr "Dienstkonfiguration neu laden" + +#: share/completions/wpa_cli.fish:32 +msgid "disconnect and wait for reassociate command before connecting" +msgstr "" + +#: share/completions/wpa_cli.fish:33 +msgid "request new BSS scan" +msgstr "" + +#: share/completions/wpa_cli.fish:34 +msgid "get latest scan results" +msgstr "" + +#: share/completions/wpa_cli.fish:35 +msgid "get capabilies" +msgstr "" + +#: share/completions/wpa_cli.fish:36 +msgid "request STAKey negotiation with " +msgstr "" + +#: share/completions/wpa_cli.fish:37 +msgid "set ap_scan parameter" +msgstr "" + +#: share/completions/wpa_cli.fish:38 +msgid "request STK negotiation with " +msgstr "" + +#: share/completions/wpa_cli.fish:39 +msgid "terminate wpa_supplicant" +msgstr "" + +#: share/completions/xprop.fish:4 msgid "Select window by id" -msgstr "Fenster über Kennung auswählen" +msgstr "Fenster über Kennung auswählen" -#: init/completions/xprop.fish:5 -msgid "Select window by name" -msgstr "Fenster über Name auswählen" - -#: init/completions/xprop.fish:6 +#: share/completions/xprop.fish:6 msgid "Display font properties" msgstr "Zeichensatzeigenschaften anzeigen" -#: init/completions/xprop.fish:7 -msgid "Select root window" -msgstr "Root-Fenster auswählen" - -#: init/completions/xprop.fish:8 -msgid "Specify X server" -msgstr "X-Server angeben" - -#: init/completions/xprop.fish:9 +#: share/completions/xprop.fish:9 msgid "Maximum display length" -msgstr "Maximale Anzeigelänge" +msgstr "Maximale Anzeigelänge" -#: init/completions/xprop.fish:10 -msgid "Do not show property type" -msgstr "Eigenschaftstyp nicht anzeigen" - -#: init/completions/xprop.fish:11 +#: share/completions/xprop.fish:11 msgid "Set format file" msgstr "Formatdatei festlegen" -#: init/completions/xprop.fish:12 -msgid "Select a window by clicking on its frame" -msgstr "Fenster durch Klicken auf den Rahmen auswählen" - -#: init/completions/xprop.fish:13 -msgid "Remove property" -msgstr "Eigenschaft entfernen" - -#: init/completions/xprop.fish:19 -msgid "Set property" -msgstr "Eigenschaft festlegen" - -#: init/completions/xprop.fish:25 -msgid "Examine property updates forever" -msgstr "Eigenschaftsaktualisierungen andauernd überprüfen" - -#: init/completions/xprop.fish:26 -msgid "Set format" -msgstr "Format festlegen" - -#: init/completions/xsel.fish:1 -msgid "Append input to selection" -msgstr "Eingabe an Auswahl anfügen" - -#: init/completions/xsel.fish:2 -msgid "Append to selection as input grows" -msgstr "Neue Eingabedaten an Auswahl anfügen" - -#: init/completions/xsel.fish:3 -msgid "Read into selection" -msgstr "In Auswahl einlesen" - -#: init/completions/xsel.fish:4 -msgid "Write selection" -msgstr "Auswahl schreiben" - -#: init/completions/xsel.fish:5 -msgid "Clear selection" -msgstr "Auswahl zurücksetzen" - -#: init/completions/xsel.fish:6 -msgid "Delete selection" -msgstr "Auswahl löschen" - -#: init/completions/xsel.fish:7 -msgid "Use primary selection" -msgstr "Primäre Auswahl verwenden" - -#: init/completions/xsel.fish:8 -msgid "Use secondary selection" -msgstr "Sekundäre Auswahl verwenden" - -#: init/completions/xsel.fish:9 -msgid "Use clipboard selection" -msgstr "Clipboard-Auswahl verwenden" - -#: init/completions/xsel.fish:10 -msgid "Make current selections persistent after program exit" -msgstr "Aktuelle Selektionen nach Programmende erhalten" - -#: init/completions/xsel.fish:11 -msgid "Exchange primary and secondary selections" -msgstr "Primäre und sekundäre Selektion tauschen" - -#: init/completions/xsel.fish:12 +#: share/completions/xsel.fish:12 msgid "X server display" msgstr "X Server-Anzeige" -#: init/completions/xsel.fish:13 -msgid "Timeout for retrieving selection" -msgstr "Zeitüberschreitung für Abruf der Auswahl" - -#: init/completions/xsel.fish:14 +#: share/completions/xsel.fish:14 msgid "Error log" msgstr "Fehler-Protokolldatei" -#: init/completions/xsel.fish:15 -msgid "Do not detach from the controlling terminal" -msgstr "Nicht vom steuernden Terminal trennen" +#: share/completions/xterm.fish:101 +msgid "Run program in xterm" +msgstr "" -#: init/completions/xsel.fish:17 -msgid "Print informative messages" -msgstr "Informative Nachrichten ausgeben" +#: share/completions/xterm.fish:103 +msgid "Blinking cursor will be off for that many milliseconds" +msgstr "" -#: init/completions/yum.fish:52 -msgid "Set debug level" -msgstr "Debug-Grad festlegen" +#: share/completions/xterm.fish:104 +msgid "Blinking cursor will be on for that many milliseconds" +msgstr "" -#: init/completions/yum.fish:53 -msgid "Set error level" -msgstr "Fehler-Grad festlegen" +#: share/completions/xterm.fish:105 +msgid "Override xterm resource class" +msgstr "" -#: init/completions/yum.fish:54 -msgid "Be tolerant of errors in commandline" -msgstr "Fehler in der Befehlszeile tolerieren" +#: share/completions/xterm.fish:106 +msgid "Color for the text cursor" +msgstr "" -#: init/completions/yum.fish:55 -msgid "Set maximum delay between commands" -msgstr "Maximale Verzögerung zwischen Befehlen festlegen" +#: share/completions/xterm.fish:107 +msgid "xterm encoding" +msgstr "" -#: init/completions/yum.fish:56 -msgid "Run commands from cache" -msgstr "Befehle aus dem Cache starten" +#: share/completions/xterm.fish:108 +msgid "Bold font" +msgstr "" -#: init/completions/yum.fish:58 -msgid "Specify installroot" -msgstr "installroot-Verzeichnis angeben" +#: share/completions/xterm.fish:109 +msgid "FreeType font pattern" +msgstr "" -#: init/completions/yum.fish:59 -msgid "Enable repository" -msgstr "Depot aktivieren" +#: share/completions/xterm.fish:110 +msgid "FreeType double-width font pattern" +msgstr "" -#: init/completions/yum.fish:60 -msgid "Disable repository" -msgstr "Depot deaktivieren" +#: share/completions/xterm.fish:111 +#, fuzzy +msgid "Font for active icons" +msgstr "Interaktiven Modus erzwingen" -#: init/completions/yum.fish:61 -msgid "Enables obsolets processing logic" -msgstr "Aktiviert veraltete Verarbeitungslogik" +#: share/completions/xterm.fish:112 +msgid "Font size for FreeType font" +msgstr "" -#: init/completions/yum.fish:62 -msgid "Output rss-data to file" -msgstr "rss-Data in Datei ausgeben" +#: share/completions/xterm.fish:113 +msgid "Font for displaying wide text" +msgstr "" -#: init/completions/yum.fish:63 -msgid "Exclude specified package from updates" -msgstr "Angegebenes Paket von Aktualisierung ausschliessen" +#: share/completions/xterm.fish:114 +msgid "Font for displaying bold wide text" +msgstr "" -#: init/completions/zip.fish:2 -msgid "Freshen: only changed files" -msgstr "Aktualisieren: nur geänderte Dateien" +#: share/completions/xterm.fish:115 +msgid "Font for the preedit string in \"OverTheSpot\"" +msgstr "" -#: init/completions/zip.fish:3 -msgid "Delete entries in zipfile" -msgstr "Einträge in Zip-Datei löschen" +#: share/completions/xterm.fish:116 +msgid "Color for highlighted text" +msgstr "" -#: init/completions/zip.fish:4 -msgid "Update: only changed or newer files" -msgstr "Aktualisierung: nur neuere oder geänderte Dateien" +#: share/completions/xterm.fish:117 +msgid "Embed xterm into window" +msgstr "" -#: init/completions/zip.fish:5 -msgid "Move into zipfile (delete files)" -msgstr "In Zip-Datei verschieben (Dateien löschen)" +#: share/completions/xterm.fish:118 +msgid "Set keyboard type" +msgstr "" -#: init/completions/zip.fish:7 -msgid "Do not store directory names" -msgstr "Verzeichnisnamen nicht speichern" +#: share/completions/xterm.fish:119 +msgid "File name for the encoding converter" +msgstr "" -#: init/completions/zip.fish:8 -msgid "Do not compress at all" -msgstr "Nicht komprimieren" +#: share/completions/xterm.fish:120 +#, fuzzy +msgid "Log filename" +msgstr "Log in Datei schreiben" -#: init/completions/zip.fish:9 -msgid "Convert LF to CR LF" -msgstr "LF nach LF/CR umwandeln" +#: share/completions/xterm.fish:121 +msgid "Maximum time in milliseconds between multi-click selections" +msgstr "" -#: init/completions/zip.fish:10 -msgid "Convert CR LF to LF" -msgstr "CR/LF nach LF umwandeln" +#: share/completions/xterm.fish:122 +msgid "Color for the pointer cursor" +msgstr "" -#: init/completions/zip.fish:11 -msgid "Compress faster" -msgstr "Schnellere Kompromierung" +#: share/completions/xterm.fish:123 +msgid "Distance from the right end for ringing the margin bell" +msgstr "" -#: init/completions/zip.fish:12 -msgid "Compress better" -msgstr "Bessere Komprimierung" +#: share/completions/xterm.fish:124 +#, fuzzy +msgid "Number of scrolled off lines" +msgstr "Alle Zeilen nummerieren" -#: init/completions/zip.fish:15 -msgid "Add one-line comments" -msgstr "Einzeilige Kommentare hinzufügen" +#: share/completions/xterm.fish:125 +#, fuzzy +msgid "Terminal identification" +msgstr "Alle Informationen ausgeben" -#: init/completions/zip.fish:16 -msgid "Add zipfile comments" -msgstr "Zip-Dateikommentar hinzufügen" +#: share/completions/xterm.fish:126 +#, sh-format +msgid "Terminal name for $TERM" +msgstr "" -#: init/completions/zip.fish:17 -msgid "Read names from stdin" -msgstr "Namen über Standardeingabe lesen" +#: share/completions/xterm.fish:127 +#, fuzzy +msgid "zIconBeep percentage" +msgstr "Prompt mit Prozentanzeige" -#: init/completions/zip.fish:18 -msgid "Make zipfile as old as the latest entry" -msgstr "Zip-Datei erhält Datum des jüngsten Eintrages" +#: share/completions/xterm.fish:129 +msgid "Size of the inner border" +msgstr "" -#: init/completions/zip.fish:19 +#: share/completions/yum.fish:53 +#, fuzzy +msgid "Delete cached package files" +msgstr "Veraltete Paketdateien löschen" + +#: share/completions/yum.fish:54 +#, fuzzy +msgid "Delete cached header files" +msgstr "Veraltete Paketdateien löschen" + +#: share/completions/yum.fish:55 +#, fuzzy +msgid "Delete all cache contents" +msgstr "Nach Fertigstellung Logdatei löschen" + +#: share/completions/zip.fish:19 msgid "Exclude the following names" msgstr "Folgende Namen ausschliessen" -#: init/completions/zip.fish:20 +#: share/completions/zip.fish:20 msgid "Include only the following names" msgstr "Nur die folgenden Namen einschliessen" -#: init/completions/zip.fish:21 -msgid "Fix zipfile" -msgstr "Zip-Datei korrigieren" - -#: init/completions/zip.fish:22 -msgid "Fix zipfile (try harder)" -msgstr "Zip-Datei korrigieren (intensiver)" - -#: init/completions/zip.fish:23 -msgid "Adjust offsets to suit self-extracting exe" -msgstr "Offsets für selbstextrahierende Programme anpassen" - -#: init/completions/zip.fish:24 -msgid "Strip prepended data" -msgstr "Vorangestellte Daten entfernen" - -#: init/completions/zip.fish:25 -msgid "Test zipfile integrity" -msgstr "Integrität der Zip-Datei testen" - -#: init/completions/zip.fish:26 -msgid "Exclude extra file attributes" -msgstr "Zusätzliche Dateiattribute ausschliessen" - -#: init/completions/zip.fish:27 -msgid "Store symbolic links as links" -msgstr "Symbolische Links als Links speichern" - -#: init/completions/zip.fish:28 -msgid "PKZIP recursion" -msgstr "PKZIP-Rekursion" - -#: init/completions/zip.fish:29 -msgid "Encrypt" -msgstr "Verschlüsseln" - -#: init/completions/zip.fish:30 +#: share/completions/zip.fish:30 msgid "Don't compress files with these suffixes" msgstr "Dateien mit diesen Endungen nicht komprimieren" +#: share/completions/zypper.fish:30 +#, fuzzy +msgid "Print help" +msgstr "URIs ausgeben" +#: share/completions/zypper.fish:31 +msgid "Accept multiple commands at once" +msgstr "" + +#: share/completions/zypper.fish:32 +#, fuzzy +msgid "List all defined repositories" +msgstr "Depot deaktivieren" + +#: share/completions/zypper.fish:33 +#, fuzzy +msgid "Add a new repository" +msgstr "Paketdepot aktualisieren" + +#: share/completions/zypper.fish:34 +#, fuzzy +msgid "Remove specified repository" +msgstr "Einen Eintrag aus dem Paketdepot entfernen" + +#: share/completions/zypper.fish:35 +#, fuzzy +msgid "Rename specified repository" +msgstr "Defektes Paketdepot reparieren" + +#: share/completions/zypper.fish:36 +#, fuzzy +msgid "Modify specified repository" +msgstr "Depot deaktivieren" + +#: share/completions/zypper.fish:37 +#, fuzzy +msgid "Refresh all repositories" +msgstr "Depot deaktivieren" + +#: share/completions/zypper.fish:38 +#, fuzzy +msgid "Clean local caches" +msgstr "Lokalen Zwischenspeicher und Pakete bereinigen" + +#: share/completions/zypper.fish:39 +msgid "List all defined services" +msgstr "" + +#: share/completions/zypper.fish:40 +#, fuzzy +msgid "Add a new service" +msgstr "Neuen Schlüssel hinzufügen" + +#: share/completions/zypper.fish:41 +#, fuzzy +msgid "Modify specified service" +msgstr "Angegebenen Schlüsselserver verwenden" + +#: share/completions/zypper.fish:42 +#, fuzzy +msgid "Remove specified service" +msgstr "Angegebenen Schlüsselserver verwenden" + +#: share/completions/zypper.fish:43 +msgid "Refresh all services" +msgstr "" + +#: share/completions/zypper.fish:44 +#, fuzzy +msgid "Install packages" +msgstr "Pakete erneut installieren" + +#: share/completions/zypper.fish:46 +#, fuzzy +msgid "Verify integrity of package dependencies" +msgstr "Pakete für Abhängigkeiten installieren/entfernen" + +#: share/completions/zypper.fish:47 +#, fuzzy +msgid "Install source packages and their build dependencies" +msgstr "Pakete für Abhängigkeiten installieren/entfernen" + +#: share/completions/zypper.fish:48 +#, fuzzy +msgid "Install newly added packages recommended by installed packages" +msgstr "" +"Installiere diese Pakete, selbst wenn sie Dateien aus anderen, bereits " +"installierten Paketen ersetzen" + +#: share/completions/zypper.fish:49 +#, fuzzy +msgid "Update installed packages with newer versions" +msgstr "Alle Quellpakete mit Version ausgeben" + +#: share/completions/zypper.fish:50 +#, fuzzy +msgid "List available updates" +msgstr "Verfügbare Liste ausgeben" + +#: share/completions/zypper.fish:51 +#, fuzzy +msgid "Install needed patches" +msgstr "Neues Paket installieren" + +#: share/completions/zypper.fish:52 +msgid "List needed patches" +msgstr "" + +#: share/completions/zypper.fish:53 +#, fuzzy +msgid "Perform a distribution upgrade" +msgstr "Simulation durchführen" + +#: share/completions/zypper.fish:54 +#, fuzzy +msgid "Check for patches" +msgstr "Komprimierte Patche erstellen" + +#: share/completions/zypper.fish:55 +#, fuzzy +msgid "Search for packages matching a pattern" +msgstr "Paket entsprechend Muster suchen" + +#: share/completions/zypper.fish:56 +#, fuzzy +msgid "Show full information for specified packages" +msgstr "Volle Versionen der Pakete anzeigen" + +#: share/completions/zypper.fish:57 +#, fuzzy +msgid "Show full information for specified patches" +msgstr "Profilierungsinformation in angegebene Datei ausgeben" + +#: share/completions/zypper.fish:58 +#, fuzzy +msgid "Show full information for specified patterns" +msgstr "Profilierungsinformation in angegebene Datei ausgeben" + +#: share/completions/zypper.fish:59 +#, fuzzy +msgid "Show full information for specified products" +msgstr "Profilierungsinformation in angegebene Datei ausgeben" + +#: share/completions/zypper.fish:60 +#, fuzzy +msgid "List all available patches" +msgstr "Namen der verfügbaren Signale auflisten" + +#: share/completions/zypper.fish:61 +#, fuzzy +msgid "List all available packages" +msgstr "Pakete erneut installieren" + +#: share/completions/zypper.fish:62 +#, fuzzy +msgid "List all available patterns" +msgstr "Namen der verfügbaren Signale auflisten" + +#: share/completions/zypper.fish:63 +#, fuzzy +msgid "List all available products" +msgstr "Namen der verfügbaren Signale auflisten" + +#: share/completions/zypper.fish:64 +#, fuzzy +msgid "List packages providing specified capability" +msgstr "Alle Pakete abfragen, die die angegebene Eigenschaft bereitstellen" + +#: share/completions/zypper.fish:65 +#, fuzzy +msgid "Add a package lock" +msgstr "Ein Paket neu erstellen" + +#: share/completions/zypper.fish:66 +#, fuzzy +msgid "Remove a package lock" +msgstr "Pakete entfernen" + +#: share/completions/zypper.fish:67 +#, fuzzy +msgid "List current package locks" +msgstr "Fehler aus Paketen auflisten" + +#: share/completions/zypper.fish:68 +#, fuzzy +msgid "Remove unused locks" +msgstr "Quellpakete entfernen" + +#: share/completions/zypper.fish:69 +msgid "Compare two version strings" +msgstr "" + +#: share/completions/zypper.fish:70 +#, fuzzy +msgid "Print the target operating system ID string" +msgstr "Betriebssystem ausgeben" + +#: share/completions/zypper.fish:71 +msgid "Print report about licenses and EULAs of installed packages" +msgstr "" + +#: share/completions/zypper.fish:72 +msgid "Download source rpms for all installed packages to a local directory" +msgstr "" + +#: share/functions/N_.fish:3 +msgid "No-op" +msgstr "" + +#: share/functions/_.fish:8 share/functions/_.fish:12 +#, fuzzy +msgid "Alias for the gettext command" +msgstr "Hilfe für den Befehl '%s'" + +#: share/functions/_.fish:9 +msgid "fish" +msgstr "fish" + +#: share/functions/__fish_complete_abook_formats.fish:1 +msgid "Complete abook formats" +msgstr "" + +#: share/functions/__fish_complete_atool.fish:1 +msgid "Complete atool" +msgstr "" + +#: share/functions/__fish_complete_atool_archive_contents.fish:1 +#, fuzzy +msgid "List archive contents" +msgstr "Archiv auflisten" + +#: share/functions/__fish_complete_bittorrent.fish:9 +msgid "IP to report to the tracker" +msgstr "An den Tracker zu sendende IP-Adresse" + +#: share/functions/__fish_complete_bittorrent.fish:10 +msgid "Minimum port to listen to" +msgstr "Niedrigster Port, an dem gelauscht wird" + +#: share/functions/__fish_complete_bittorrent.fish:11 +msgid "Maximum port to listen to" +msgstr "Höchster Port, an dem gelauscht wird" + +#: share/functions/__fish_complete_command.fish:1 +msgid "Complete using all available commands" +msgstr "" + +#: share/functions/__fish_complete_convert_options.fish:1 +#, fuzzy +msgid "Complete Convert options" +msgstr "Saloppe Einhäng-Optionen tolerieren" + +#: share/functions/__fish_complete_diff.fish:3 +msgid "Ignore case differences" +msgstr "Unterschiede bei Groß-/Kleinschreibung ignorieren" + +#: share/functions/__fish_complete_diff.fish:4 +msgid "Ignore case when comparing file names" +msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich ignorieren" + +#: share/functions/__fish_complete_diff.fish:5 +msgid "Consider case when comparing file names" +msgstr "Groß-/Kleinschreibung beim Dateinamenvergleich beachten" + +#: share/functions/__fish_complete_diff.fish:6 +msgid "Ignore changes due to tab expansion" +msgstr "Änderungen aufgrund von Tabulatorausweitung ignorieren" + +#: share/functions/__fish_complete_diff.fish:7 +msgid "Ignore changes in the amount of white space" +msgstr "Änderung in der Anzahl von Worttrennern ignorieren" + +#: share/functions/__fish_complete_diff.fish:8 +msgid "Ignore all white space" +msgstr "white space (Worttrenner) ignorieren" + +#: share/functions/__fish_complete_diff.fish:9 +msgid "Ignore changes whose lines are all blank" +msgstr "Änderungen ignorieren, deren Zeilen alle leer sind" + +#: share/functions/__fish_complete_diff.fish:11 +msgid "Treat all files as text" +msgstr "Alle Dateien als Text behandeln" + +#: share/functions/__fish_complete_diff.fish:12 +msgid "Recursively compare subdirectories" +msgstr "Unterverzeichnisse rekursiv vergleichen" + +#: share/functions/__fish_complete_diff.fish:13 +msgid "Treat absent files as empty" +msgstr "Nicht vorhandene Dateien als leer behandeln" + +#: share/functions/__fish_complete_diff.fish:15 +msgid "Output 3 lines of copied context" +msgstr "3 Zeilen des kopierten Kontextes ausgeben" + +#: share/functions/__fish_complete_diff.fish:17 +msgid "Output 3 lines of unified context" +msgstr "3 Zeilen des vereinheitlichten Kontextes ausgeben" + +#: share/functions/__fish_complete_diff.fish:18 +msgid "Output only whether the files differ" +msgstr "Nur Unterschiede der Dateien ausgeben" + +#: share/functions/__fish_complete_diff.fish:19 +msgid "Output a normal diff" +msgstr "Normalen Diff ausgeben" + +#: share/functions/__fish_complete_diff.fish:20 +msgid "Output in two columns" +msgstr "Ausgabe in zwei Spalten" + +#: share/functions/__fish_complete_diff.fish:22 +msgid "Try to find a smaller set of changes" +msgstr "Versuche, eine kleinere Menge Änderungen zu finden" + +#: share/functions/__fish_complete_diff.fish:25 +msgid "Pass the output through 'pr'" +msgstr "Ausgabe durch 'pr' schicken" + +#: share/functions/__fish_complete_grep.fish:2 +msgid "Print NUM lines of trailing context" +msgstr "NUM folgende Kontext-Zeilen ausgeben" + +#: share/functions/__fish_complete_grep.fish:3 +msgid "Process binary file as text" +msgstr "Binärdateien als Text behandeln" + +#: share/functions/__fish_complete_grep.fish:4 +msgid "Print NUM lines of leading context" +msgstr "NUM führende Kontext-Zeilen ausgeben" + +#: share/functions/__fish_complete_grep.fish:5 +msgid "Print NUM lines of context" +msgstr "NUM Kontext-Zeilen ausgeben" + +#: share/functions/__fish_complete_grep.fish:6 +msgid "Print byte offset of matches" +msgstr "Byte-Offset von Treffern ausgeben" + +#: share/functions/__fish_complete_grep.fish:7 +msgid "Assume data type for binary files" +msgstr "Datentyp für Binärdateien unterstellen" + +#: share/functions/__fish_complete_grep.fish:10 +msgid "Only print number of matches" +msgstr "Nur Anzahl von Treffern ausgeben" + +#: share/functions/__fish_complete_grep.fish:13 +msgid "Pattern is extended regexp" +msgstr "Muster ist ein erweiterter regulärer Ausdruck" + +#: share/functions/__fish_complete_grep.fish:14 +msgid "Pattern is a regexp" +msgstr "Muster ist ein regulärer Ausdruck" + +#: share/functions/__fish_complete_grep.fish:15 +msgid "Read pattern list from file. Skip files whose base name matches list" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:16 +#, fuzzy +msgid "Exclude matching directories from recursive searches" +msgstr "Verzeichnisse nach Quelle durchsuchen" + +#: share/functions/__fish_complete_grep.fish:17 +msgid "Pattern is a fixed string" +msgstr "Muster ist eine feststehende Zeichenkette" + +#: share/functions/__fish_complete_grep.fish:19 +msgid "Pattern is basic regex" +msgstr "Muster ist ein einfacher regulärer Ausdruck" + +#: share/functions/__fish_complete_grep.fish:20 +msgid "Print filename" +msgstr "Dateiname ausgeben" + +#: share/functions/__fish_complete_grep.fish:21 +#, fuzzy +msgid "Suppress printing filename" +msgstr "Dateinamenausgabe unterdrücken" + +#: share/functions/__fish_complete_grep.fish:23 +msgid "Skip binary files" +msgstr "Binärdateien überspringen" + +#: share/functions/__fish_complete_grep.fish:24 +msgid "Ignore case" +msgstr "Gross-/Kleinschreibung ignorieren" + +#: share/functions/__fish_complete_grep.fish:25 +msgid "Print first non-matching file" +msgstr "Erste nicht zutreffende Datei ausgeben" + +#: share/functions/__fish_complete_grep.fish:26 +msgid "Print first matching file" +msgstr "Erste zutreffende Datei ausgeben" + +#: share/functions/__fish_complete_grep.fish:27 +msgid "Stop reading after NUM matches" +msgstr "Lesen nach NUM Treffern beenden" + +#: share/functions/__fish_complete_grep.fish:28 +msgid "Use the mmap system call to read input" +msgstr "mmap-Systemaufruf zum Lesen der Eingabe nutzen" + +#: share/functions/__fish_complete_grep.fish:29 +#, fuzzy +msgid "Print line number" +msgstr "Zeilennummer ausgeben" + +#: share/functions/__fish_complete_grep.fish:30 +msgid "Show only matching part" +msgstr "Nur zutreffenden Teil anzeigen" + +#: share/functions/__fish_complete_grep.fish:31 +msgid "Rename stdin" +msgstr "Standardeingabe umbenennen" + +#: share/functions/__fish_complete_grep.fish:32 +msgid "Use line buffering" +msgstr "Zeilenpufferung benutzen" + +#: share/functions/__fish_complete_grep.fish:33 +#, fuzzy +msgid "Pattern is a Perl regexp (PCRE) string" +msgstr "Muster ist ein regulärer Ausdruck" + +#: share/functions/__fish_complete_grep.fish:34 +#: share/functions/__fish_complete_grep.fish:35 +msgid "Do not write anything" +msgstr "Nichts schreiben" + +#: share/functions/__fish_complete_grep.fish:36 +#: share/functions/__fish_complete_grep.fish:37 +#, fuzzy +msgid "Read files under each directory, recursively" +msgstr "Dateien unter jedem Verzeichnis lesen" + +#: share/functions/__fish_complete_grep.fish:38 +#, fuzzy +msgid "Search only files matching PATTERN" +msgstr "Rekursiv, Dateien gemäß MUSTER suchen" + +#: share/functions/__fish_complete_grep.fish:39 +#, fuzzy +msgid "Skip files matching PATTERN" +msgstr "Rekursiv, dem MUSTER entsprechende Dateien überspringen" + +#: share/functions/__fish_complete_grep.fish:40 +msgid "Suppress error messages" +msgstr "Fehlermeldungen unterdrücken" + +#: share/functions/__fish_complete_grep.fish:41 +msgid "Ensure first character of actual line content lies on a tab stop" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:42 +msgid "Treat files as binary" +msgstr "Dateien als binär behandeln" + +#: share/functions/__fish_complete_grep.fish:43 +msgid "Report Unix-style byte offsets" +msgstr "Byte-Offset im Unix-Format angeben" + +#: share/functions/__fish_complete_grep.fish:45 +msgid "Invert the sense of matching" +msgstr "Bedeutung der Treffer umkehren" + +#: share/functions/__fish_complete_grep.fish:46 +msgid "Only whole matching words" +msgstr "Nur vollständig übereinstimmende Worte" + +#: share/functions/__fish_complete_grep.fish:47 +msgid "Only whole matching lines" +msgstr "Nur vollständig übereinstimmende Zeilen" + +#: share/functions/__fish_complete_grep.fish:48 +#, fuzzy +msgid "Obsolete synonym for -i" +msgstr "Synonym für -i" + +#: share/functions/__fish_complete_grep.fish:49 +msgid "treat input as a set of lines each terminated by a zero byte" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:50 +msgid "Output a zero byte after filename" +msgstr "Ein Null-Byte nach dem Dateinamen ausgeben" + +#: share/functions/__fish_complete_groups.fish:2 +msgid "Print a list of local groups, with group members as the description" +msgstr "" + +#: share/functions/__fish_complete_lpr_option.fish:1 +#, fuzzy +msgid "Complete lpr option" +msgstr "Saloppe Einhäng-Optionen tolerieren" + +#: share/functions/__fish_complete_ls.fish:16 +msgid "Show hidden" +msgstr "Zeige versteckte Dateien" + +#: share/functions/__fish_complete_ls.fish:17 +msgid "Show hidden except . and .." +msgstr "Zeige versteckte Dateien ausser . und .." + +#: share/functions/__fish_complete_ls.fish:18 +#: share/functions/__fish_complete_ls.fish:27 +msgid "Append filetype indicator" +msgstr "Dateityp-Anzeige anhängen" + +#: share/functions/__fish_complete_ls.fish:19 +#: share/functions/__fish_complete_ls.fish:20 +msgid "Follow symlinks" +msgstr "Symbolischen Links folgen" + +#: share/functions/__fish_complete_ls.fish:21 +msgid "List subdirectory recursively" +msgstr "Unterverzeichnisse rekursiv auflisten" + +#: share/functions/__fish_complete_ls.fish:22 +#: share/functions/__fish_complete_ls.fish:102 +msgid "Octal escapes for non graphic characters" +msgstr "Oktaldarstellung für nichtgrafische Zeichen" + +#: share/functions/__fish_complete_ls.fish:23 +msgid "List directories, not their content" +msgstr "Verzeichnisse, aber nicht deren Inhalt auflisten" + +#: share/functions/__fish_complete_ls.fish:24 +msgid "Human readable sizes" +msgstr "Lesbare Grössen" + +#: share/functions/__fish_complete_ls.fish:25 +msgid "Print inode number of files" +msgstr "Inode-Nummer der Dateien ausgeben" + +#: share/functions/__fish_complete_ls.fish:26 +msgid "Long format, numeric IDs" +msgstr "Langformat, numerische IDs" + +#: share/functions/__fish_complete_ls.fish:28 +msgid "Replace non-graphic characters with '?'" +msgstr "Nicht darstellbare Zeichen durch '?' ersetzen" + +#: share/functions/__fish_complete_ls.fish:29 +msgid "Reverse sort order" +msgstr "Sortierreihenfolge umkehren" + +#: share/functions/__fish_complete_ls.fish:30 +msgid "Print size of files" +msgstr "Größe der Dateien ausgeben" + +#: share/functions/__fish_complete_ls.fish:32 +msgid "List by columns" +msgstr "Nach Spalten auflisten" + +#: share/functions/__fish_complete_ls.fish:33 +msgid "Sort by size" +msgstr "Nach Größe sortieren" + +#: share/functions/__fish_complete_ls.fish:34 +msgid "Show and sort by ctime" +msgstr "Nach ctime sortieren und anzeigen" + +#: share/functions/__fish_complete_ls.fish:35 +msgid "Don't sort" +msgstr "Nicht sortieren" + +#: share/functions/__fish_complete_ls.fish:36 +msgid "Long format without owner" +msgstr "Langformat ohne Eigentümer" + +#: share/functions/__fish_complete_ls.fish:37 +msgid "Set blocksize to 1kB" +msgstr "Blockgröße auf 1kB festlegen" + +#: share/functions/__fish_complete_ls.fish:38 +msgid "Long format" +msgstr "Langformat" + +#: share/functions/__fish_complete_ls.fish:39 +msgid "Comma separated format" +msgstr "Komma-getrenntes Format" + +#: share/functions/__fish_complete_ls.fish:40 +msgid "Sort by modification time" +msgstr "Nach Veränderungsdatum sortieren" + +#: share/functions/__fish_complete_ls.fish:41 +msgid "Show access time" +msgstr "Zugriffszeit anzeigen" + +#: share/functions/__fish_complete_ls.fish:42 +msgid "List entries by lines" +msgstr "Einträge auflisten" + +#: share/functions/__fish_complete_ls.fish:43 +msgid "List one file per line" +msgstr "Eine Datei pro Zeile auflisten" + +#: share/functions/__fish_complete_ls.fish:49 +#, fuzzy +msgid "Do not list implied entries matching specified shell pattern" +msgstr "Dem Muster entsprechende Einträge übergehen" + +#: share/functions/__fish_complete_ls.fish:50 +#, fuzzy +msgid "Display security context" +msgstr "Version anzeigen und beenden" + +#: share/functions/__fish_complete_ls.fish:51 +msgid "Display security context so it fits on most displays" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:52 +msgid "Display only security context and file name" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:54 +msgid "Print author" +msgstr "Autor ausgeben" + +#: share/functions/__fish_complete_ls.fish:56 +msgid "Ignore files ending with ~" +msgstr "Dateien ignorieren, die mit ~ enden" + +#: share/functions/__fish_complete_ls.fish:58 +msgid "Generate dired output" +msgstr "dired-Ausgabe erzeugen" + +#: share/functions/__fish_complete_ls.fish:60 +msgid "Long format, full-iso time" +msgstr "Langformat, volle ISO-Zeit" + +#: share/functions/__fish_complete_ls.fish:61 +msgid "Don't print group information" +msgstr "Keine Gruppeninformation ausgeben" + +#: share/functions/__fish_complete_ls.fish:62 +msgid "Human readable sizes, powers of 1000" +msgstr "Lesbare Grössen, vielfaches von 1000" + +#: share/functions/__fish_complete_ls.fish:66 +#: share/functions/__fish_complete_ls.fish:110 +msgid "Print raw entry names" +msgstr "Roheinträge ausgeben" + +#: share/functions/__fish_complete_ls.fish:67 +msgid "Long format without groups" +msgstr "Langformat ohne Gruppen" + +#: share/functions/__fish_complete_ls.fish:68 +msgid "Non graphic as-is" +msgstr "Nicht darstellbare Zeichen unverändert lassen" + +#: share/functions/__fish_complete_ls.fish:69 +msgid "Enclose entry in quotes" +msgstr "Eintrag in Markierungen einschliessen" + +#: share/functions/__fish_complete_ls.fish:91 +msgid "Do not sort" +msgstr "Nicht sortieren" + +#: share/functions/__fish_complete_ls.fish:92 +msgid "Sort by version" +msgstr "Sortierung nach Version" + +#: share/functions/__fish_complete_ls.fish:94 +msgid "Sort by extension" +msgstr "Sortierung nach Erweiterung" + +#: share/functions/__fish_complete_ls.fish:103 +msgid "Use colors" +msgstr "Farben benutzen" + +#: share/functions/__fish_complete_ls.fish:104 +msgid "Prevent -A from being automatically set for root" +msgstr "Für root nicht automatisch -A festlegen" + +#: share/functions/__fish_complete_ls.fish:105 +msgid "Don't follow symlinks" +msgstr "Symbolischen Links nicht folgen" + +#: share/functions/__fish_complete_ls.fish:106 +msgid "Show modification time" +msgstr "Änderungsdatum anzeigen" + +#: share/functions/__fish_complete_ls.fish:107 +msgid "Show whiteouts when scanning directories" +msgstr "Ãœberblendungen beim Scannen von Verzeichnissen anzeigen" + +#: share/functions/__fish_complete_ls.fish:108 +msgid "Display each file's MAC label" +msgstr "MAC-Markierung jeder Datei anzeigen" + +#: share/functions/__fish_complete_ls.fish:109 +msgid "Include the file flags in a long (-l) output" +msgstr "Datei-Kennungen in langer (-l) Ausgabe einfügen" + +#: share/functions/__fish_complete_ppp_peer.fish:1 +msgid "Complete isp name for pon/poff" +msgstr "" + +#: share/functions/__fish_complete_proc.fish:1 +#, fuzzy +msgid "Complete by list of running processes" +msgstr "Liste laufender screen-Sitzungen ausgeben" + +#: share/functions/__fish_complete_python.fish:2 +#: share/functions/__fish_complete_python.fish:28 +#: share/functions/__fish_complete_vi.fish:54 +msgid "Don\\t" +msgstr "" + +#: share/functions/__fish_complete_python.fish:12 +msgid "Disable import of site module" +msgstr "Import des Seitenmoduls deaktivieren" + +#: share/functions/__fish_complete_python.fish:13 +msgid "Unbuffered input and output" +msgstr "ungepufferte Ein-/Ausgabe" + +#: share/functions/__fish_complete_python.fish:24 +msgid "Warn on mixed tabs and spaces" +msgstr "Warnung bei gemischten Tabulator- und Leerzeichen" + +#: share/functions/__fish_complete_setxkbmap.fish:1 +#, fuzzy +msgid "Complete setxkb options" +msgstr "Saloppe Einhäng-Optionen tolerieren" + +#: share/functions/__fish_complete_ssh.fish:4 +#, fuzzy +msgid "Protocol version 1 only" +msgstr "Nur Protokoll-Version 1" + +#: share/functions/__fish_complete_ssh.fish:5 +#, fuzzy +msgid "Protocol version 2 only" +msgstr "Nur Protokoll-Version 2" + +#: share/functions/__fish_complete_ssh.fish:6 +msgid "IPv4 addresses only" +msgstr "Nur IPv4-Adressen" + +#: share/functions/__fish_complete_ssh.fish:7 +msgid "IPv6 addresses only" +msgstr "Nur IPv6-Adressen" + +#: share/functions/__fish_complete_ssh.fish:8 +msgid "Compress all data" +msgstr "Alle Daten komprimieren" + +#: share/functions/__fish_complete_ssh.fish:9 +msgid "Encryption algorithm" +msgstr "Verschlüsselungs-Algorithmus" + +#: share/functions/__fish_complete_ssh.fish:10 +msgid "Configuration file" +msgstr "Konfigurationsdatei" + +#: share/functions/__fish_complete_ssh.fish:11 +msgid "Identity file" +msgstr "Datei identifizieren" + +#: share/functions/__fish_complete_ssh.fish:12 +msgid "Options" +msgstr "Optionen" + +#: share/functions/__fish_complete_svn.fish:48 +msgid "" +"Put files and directories under version control, scheduling them for " +"addition to repository. They will be added in next commit." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:49 +#: share/functions/__fish_complete_svn.fish:51 +msgid "" +"Output the content of specified files or URLs with revision and author " +"information in-line." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:50 +#, fuzzy +msgid "Output the content of specified files or URLs." +msgstr "Profilierungsinformation in angegebene Datei ausgeben" + +#: share/functions/__fish_complete_svn.fish:52 +#, fuzzy +msgid "Check out a working copy from a repository." +msgstr "Eine lokale Kopie eines weiteren Paketdepots erstellen" + +#: share/functions/__fish_complete_svn.fish:53 +msgid "" +"Recursively clean up the working copy, removing locks, resuming unfinished " +"operations, etc." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:54 +#, fuzzy +msgid "Send changes from your working copy to the repository." +msgstr "Änderungen der Arbeitskopie als Patch zum Paketdepot sichern" + +#: share/functions/__fish_complete_svn.fish:55 +msgid "Duplicate something in working copy or repository, remembering history." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:56 +#, fuzzy +msgid "Display the differences between two revisions or paths." +msgstr "Unterschiede zwischen Revisionen anzeigen" + +#: share/functions/__fish_complete_svn.fish:57 +msgid "Create an unversioned copy of a tree." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:58 +msgid "Describe the usage of this program or its subcommands." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:59 +#, fuzzy +msgid "Commit an unversioned file or tree into the repository." +msgstr "Neue/s Datei/Verzeichnis zum Paketdepot hinzufügen" + +#: share/functions/__fish_complete_svn.fish:60 +#, fuzzy +msgid "Display information about a local or remote item." +msgstr "Statusinformationen zu ausgecheckten Dateien anzeigen" + +#: share/functions/__fish_complete_svn.fish:61 +#, fuzzy +msgid "List directory entries in the repository." +msgstr "Dateien in das Paketdepot übertragen" + +#: share/functions/__fish_complete_svn.fish:62 +msgid "" +"Lock working copy paths or URLs in the repository, so that no other user can " +"commit changes to them." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:63 +msgid "Show the log messages for a set of revision(s) and/or file(s)." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:64 +msgid "Apply the differences between two sources to a working copy path." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:65 +#, fuzzy +msgid "Display information related to merges" +msgstr "Statusinformationen zu ausgecheckten Dateien anzeigen" + +#: share/functions/__fish_complete_svn.fish:66 +msgid "Create a new directory under version control." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:67 +#, fuzzy +msgid "Move and/or rename something in working copy or repository." +msgstr "Änderungen der Arbeitskopie als Patch zum Paketdepot sichern" + +#: share/functions/__fish_complete_svn.fish:68 +#, fuzzy +msgid "Apply a unidiff patch to the working copy" +msgstr "Nicht aufgezeichnete Änderungen in der Arbeitskopie anzeigen" + +#: share/functions/__fish_complete_svn.fish:69 +msgid "Remove a property from files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:70 +msgid "Edit a property with an external editor." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:71 +msgid "Print the value of a property on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:72 +msgid "List all properties on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:73 +msgid "Set the value of a property on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:74 +msgid "Rewrite working copy url metadata" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:75 +#, fuzzy +msgid "Remove files and directories from version control." +msgstr "Ein oder mehrere Dateien/Verzeichnisse aus dem Paketdepot entfernen" + +#: share/functions/__fish_complete_svn.fish:76 +#, fuzzy +msgid "Remove conflicts on working copy files or directories." +msgstr "Eine/mehrere Datei/en oder Verzeichnis/se verschieben/umbenennen" + +#: share/functions/__fish_complete_svn.fish:77 +#, fuzzy +msgid "Remove \\conflicted state on working copy files or directories." +msgstr "Eine/mehrere Datei/en oder Verzeichnis/se verschieben/umbenennen" + +#: share/functions/__fish_complete_svn.fish:78 +msgid "Restore pristine working copy file (undo most local edits)." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:79 +msgid "Print the status of working copy files and directories." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:80 +msgid "Update the working copy to a different URL." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:81 +msgid "Unlock working copy paths or URLs." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:82 +#, fuzzy +msgid "Bring changes from the repository into the working copy." +msgstr "Patches von einem anderen Paketdepot auf dieses kopieren und anwenden" + +#: share/functions/__fish_complete_svn.fish:83 +msgid "Upgrade the metadata storage format for a working copy." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:90 +#, fuzzy +msgid "Do not cache authentication tokens" +msgstr "Ãœberprüfungsstatus von Schlüsselsignaturen nicht zwischenspeichern" + +#: share/functions/__fish_complete_svn.fish:91 +#, fuzzy +msgid "Do no interactive prompting" +msgstr "Ausführung im interaktiven Modus" + +#: share/functions/__fish_complete_svn.fish:92 +msgid "" +"Accept SSL server certificates from unknown authorities (ony with --non-" +"interactive)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:103 +#, fuzzy +msgid "Specify log message" +msgstr "E-Mail-Adresse angeben" + +#: share/functions/__fish_complete_svn.fish:105 +#, fuzzy +msgid "Read log message from file" +msgstr "Paket aus Datei lesen" + +#: share/functions/__fish_complete_svn.fish:106 +msgid "Force validity of log message source" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:118 +#, fuzzy +msgid "Print nothing, or only summary information" +msgstr "Verlaufsinformationen für Dateien ausgeben" + +#: share/functions/__fish_complete_svn.fish:122 +#, fuzzy +msgid "Force operation to run" +msgstr "Löschung erzwingen" + +#: share/functions/__fish_complete_svn.fish:126 +msgid "Process contents of file ARG as additional args" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:130 +msgid "Operate only on members of changelist" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:134 +#, fuzzy +msgid "Output in xml" +msgstr "Ausgabedatei" + +#: share/functions/__fish_complete_svn.fish:138 +#, fuzzy +msgid "Retrieve revision property" +msgstr "Eigenschaft entfernen" + +#: share/functions/__fish_complete_svn.fish:150 +#, fuzzy +msgid "Ignore externals definitions" +msgstr "Sämtliche Versions-Informationen ignorieren" + +#: share/functions/__fish_complete_svn.fish:154 +#, fuzzy +msgid "Print extra information" +msgstr "Alle Informationen ausgeben" + +#: share/functions/__fish_complete_svn.fish:158 +msgid "Operate on a revision property (use with -r)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:162 +msgid "Add intermediate parents" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:189 +#, fuzzy +msgid "Try operation but make no changes" +msgstr "Versuche, eine kleinere Menge Änderungen zu finden" + +#: share/functions/__fish_complete_svn.fish:193 +#, fuzzy +msgid "Ignore ancestry when calculating merges" +msgstr "Benutzername für Zeitberechnungen ignorieren" + +#: share/functions/__fish_complete_svn.fish:197 +msgid "Override diff-cmd specified in config file" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:198 +#, fuzzy +msgid "Use external diff command" +msgstr "Bearbeiten-Befehl rückgängig machen" + +#: share/functions/__fish_complete_svn.fish:202 +#, fuzzy +msgid "Disable automatic properties" +msgstr "Zeichensatzeigenschaften anzeigen" + +#: share/functions/__fish_complete_svn.fish:206 +msgid "Set new working copy depth" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:230 +msgid "don\\t" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:241 +msgid "Use ARG as the older target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:242 +msgid "Use ARG as the newer target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:243 +#, fuzzy +msgid "Do not print differences for deleted files" +msgstr "Zeilen nicht ohne Begrenzer ausgeben" + +#: share/functions/__fish_complete_svn.fish:244 +msgid "Notice ancestry when calculating differences" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:245 +msgid "Show a summary of the results" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:257 +msgid "Do not cross copies while traversing history" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:259 +#, fuzzy +msgid "Produce diff output" +msgstr "Audio-Ausgabe" + +#: share/functions/__fish_complete_svn.fish:279 +#, fuzzy +msgid "Use strict semantics" +msgstr "Einstellung für Schnelligkeit verwenden" + +#: share/functions/__fish_complete_svn.fish:306 +msgid "Relocate via URL-rewriting" +msgstr "" + +#: share/functions/__fish_complete_svn_diff.fish:1 +msgid "Complete \"svn diff\" arguments" +msgstr "" + +#: share/functions/__fish_complete_tar.fish:14 +#: share/functions/__fish_complete_tar.fish:21 +#: share/functions/__fish_complete_tar.fish:28 +#: share/functions/__fish_complete_unrar.fish:14 +#, fuzzy +msgid "%s\\tArchived file\\n" +msgstr "Archiv-Datei" + +#: share/functions/__fish_complete_users.fish:2 +msgid "Print a list of local users, with the real user name as a description" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:37 +#, fuzzy +msgid "Start in Arabic mode" +msgstr "Schnittstelle starten" + +#: share/functions/__fish_complete_vi.fish:38 +#, fuzzy +msgid "Start in binary mode" +msgstr "Standardmodus" + +#: share/functions/__fish_complete_vi.fish:39 +msgid "Behave mostly like vi" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:40 +#, fuzzy +msgid "Start in diff mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:41 +#, fuzzy +msgid "Debugging mode" +msgstr "Debug-Modus" + +#: share/functions/__fish_complete_vi.fish:42 +#, fuzzy +msgid "Start in Ex mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:43 +#, fuzzy +msgid "Start in improved Ex mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:44 +#: share/functions/__fish_complete_vi.fish:67 +#, fuzzy +msgid "Start in foreground mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:45 +#, fuzzy +msgid "Start in Farsi mode" +msgstr "Standardmodus" + +#: share/functions/__fish_complete_vi.fish:46 +#, fuzzy +msgid "Start in GUI mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:69 +#, fuzzy +msgid "Print help message and exit" +msgstr "Hilfe anzeigen und beenden" + +#: share/functions/__fish_complete_vi.fish:48 +#, fuzzy +msgid "Start in Hebrew mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:49 +msgid "List swap files" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:50 +#, fuzzy +msgid "Start in lisp mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:51 +#, fuzzy +msgid "Disable file modification" +msgstr "Nicht auf die Veränderungszeiten der Dateien vertrauen" + +#: share/functions/__fish_complete_vi.fish:52 +#, fuzzy +msgid "Disallow file modification" +msgstr "Änderungsdatum anzeigen" + +#: share/functions/__fish_complete_vi.fish:53 +msgid "Reset compatibility mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:62 +#, fuzzy +msgid "Start in easy mode" +msgstr "Im Ordner-Index starten" + +#: share/functions/__fish_complete_vi.fish:63 +#, fuzzy +msgid "Start in restricted mode" +msgstr "Beschränkter Modus" + +#: share/functions/__fish_complete_vi.fish:65 +msgid "Become an editor server for NetBeans" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:68 +msgid "Echo the Window ID on stdout (GTK GUI only)" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:70 +#, fuzzy +msgid "Do not expand wildcards" +msgstr "Erweitern Sie das Muster nicht" + +#: share/functions/__fish_complete_vi.fish:71 +msgid "Skip loading plugins" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:72 +#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:77 +#, fuzzy +msgid "Edit files on Vim server" +msgstr "Originaldateien editieren" + +#: share/functions/__fish_complete_vi.fish:73 +#, fuzzy +msgid "Evaluate expr on Vim server" +msgstr "Ausdruck auswerten" + +#: share/functions/__fish_complete_vi.fish:74 +#, fuzzy +msgid "Send keys to Vim server" +msgstr "Mail an Benutzer senden" + +#: share/functions/__fish_complete_vi.fish:78 +msgid "List all Vim servers that can be found" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:79 +#, fuzzy +msgid "Set server name" +msgstr "Dienstname" + +#: share/functions/__fish_complete_vi.fish:80 +#, fuzzy +msgid "Print version information and exit" +msgstr "Sämtliche Versions-Informationen ignorieren" + +#: share/functions/__fish_complete_vi.fish:91 +msgid "Suppress all interactive user feedback" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:92 +#: share/functions/__fish_complete_vi.fish:99 +msgid "Encrypt/decrypt text" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:93 +msgid "Set up for editing LISP programs" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:94 +msgid "List saved file names after crash" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:95 +#, fuzzy +msgid "Read-only mode" +msgstr "Nur lesen" + +#: share/functions/__fish_complete_vi.fish:96 +msgid "Use linear search for tags if tag file not sorted" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:97 +msgid "Start in display editing state" +msgstr "" + +#: share/functions/__fish_complete_wvdial_peers.fish:1 +msgid "Complete wvdial peers" +msgstr "" + +#: share/functions/__fish_complete_xsum.fish:1 +msgid "Complete md5sum sha1 etc" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:65 +#, sh-format +msgid "" +"\\nWARNING\\n\\nThe location for fish configuration files has changed to %s." +"\\nYour old files have been moved to this location.\\nYou can change to a " +"different location by changing the value of the variable $XDG_CONFIG_HOME.\\n" +"\\n" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:82 +msgid "Welcome to fish, the friendly interactive shell" +msgstr "Willkommen zu fish, der freundlichen interaktiven Shell" + +#: share/functions/__fish_config_interactive.fish:83 +msgid "Type %shelp%s for instructions on how to use fish" +msgstr "Anweisungen zur fish-Benutzung erhalten Sie über %shelp%s" + +#: share/functions/__fish_config_interactive.fish:173 +msgid "Event handler, repaints the prompt when fish_color_cwd changes" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:180 +msgid "Event handler, repaints the prompt when fish_color_cwd_root changes" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:192 +msgid "Start service" +msgstr "Dienst starten" + +#: share/functions/__fish_config_interactive.fish:193 +msgid "Stop service" +msgstr "Dienst anhalten" + +#: share/functions/__fish_config_interactive.fish:194 +#, fuzzy +msgid "Print service status" +msgstr "Dienststatus ausgeben" + +#: share/functions/__fish_config_interactive.fish:195 +msgid "Stop and then start service" +msgstr "Stoppe und starte Dienst" + +#: share/functions/__fish_config_interactive.fish:196 +msgid "Reload service configuration" +msgstr "Dienstkonfiguration neu laden" + +#: share/functions/__fish_config_interactive.fish:228 +#, sh-format +msgid "Notify VTE of change to $PWD" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:173 +msgid "Helper function for __fish_git_prompt" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:244 +msgid "svn_upstream" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:348 +#, fuzzy +msgid "Prompt function for Git" +msgstr "Aktuelle Funktionen sind: " + +#: share/functions/__fish_git_prompt.fish:458 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has staged " +"files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:471 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has " +"tracked, modified files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:526 +msgid "__fish_git_prompt helper, returns the current Git operation and branch" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:639 +msgid "__fish_git_prompt helper, checks char variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:690 +msgid "__fish_git_prompt helper, checks color variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:730 +msgid "Event handler, repaints prompt when functionality changes" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:748 +msgid "Event handler, repaints prompt when any color changes" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:768 +msgid "Event handler, repaints prompt when any char changes" +msgstr "" + +#: share/functions/__fish_is_token_n.fish:1 +msgid "Test if current token is on Nth place" +msgstr "" + +#: share/functions/__fish_make_completion_signals.fish:1 +msgid "Make list of kill signals for completion" +msgstr "" + +#: share/functions/__fish_move_last.fish:9 +msgid "Hit end of history...\\n" +msgstr "Ende des Befehlsverlaufs errreicht ...\\n" + +#: share/functions/__fish_print_abook_emails.fish:1 +#, fuzzy +msgid "Print email addresses (abook)" +msgstr "Tote Prozesse ausgeben" + +#: share/functions/__fish_print_addresses.fish:1 +#, fuzzy +msgid "Print a list of known network addresses" +msgstr "Liste laufender screen-Sitzungen ausgeben" + +#: share/functions/__fish_print_arch_daemons.fish:1 +#, fuzzy +msgid "Print arch daemons" +msgstr "Alle Namen ausgeben" + +#: share/functions/__fish_print_commands.fish:1 +#, fuzzy +msgid "Print a list of documented fish commands" +msgstr "Liste laufender screen-Sitzungen ausgeben" + +#: share/functions/__fish_print_debian_services.fish:1 +#, fuzzy +msgid "Prints services installed" +msgstr "Dienststatus ausgeben" + +#: share/functions/__fish_print_help.fish:2 +msgid "Print help message for the specified fish function or builtin" +msgstr "" + +#: share/functions/__fish_print_interfaces.fish:1 +#, fuzzy +msgid "Print a list of known network interfaces" +msgstr "Liste laufender screen-Sitzungen ausgeben" + +#: share/functions/__fish_print_lpr_options.fish:1 +#, fuzzy +msgid "Print lpr options" +msgstr "Alle Versionen ausgeben" + +#: share/functions/__fish_print_lpr_printers.fish:1 +#, fuzzy +msgid "Print lpr printers" +msgstr "Vollständige Datensätze ausgeben" + +#: share/functions/__fish_print_lsblk_columns.fish:1 +#, fuzzy +msgid "Print available lsblk columns" +msgstr "Verfügbare Liste ausgeben" + +#: share/functions/__fish_print_mounted.fish:1 +#, fuzzy +msgid "Print mounted devices" +msgstr "Wichtige Abhängigkeiten ausgeben" + +#: share/functions/__fish_print_svn_rev.fish:1 +#, fuzzy +msgid "Print svn revisions" +msgstr "PKG-Versionen ausgeben" + +#: share/functions/__fish_print_users.fish:2 +#, fuzzy +msgid "Print a list of local users" +msgstr "Liste laufender screen-Sitzungen ausgeben" + +#: share/functions/__fish_print_xdg_mimeapps.fish:1 +msgid "Print xdg mime applications" +msgstr "" + +#: share/functions/__fish_print_xdg_mimetypes.fish:1 +#, fuzzy +msgid "Print XDG mime types" +msgstr "Befehlstyp ausgeben" + +#: share/functions/__fish_print_xrandr_modes.fish:1 +#, fuzzy +msgid "Print xrandr modes" +msgstr "Roheinträge ausgeben" + +#: share/functions/__fish_print_xrandr_outputs.fish:1 +#, fuzzy +msgid "Print xrandr outputs" +msgstr "Wortzählung ausgeben" + +#: share/functions/__fish_print_xwindows.fish:1 +#, fuzzy +msgid "Print X windows" +msgstr "APM-Informationen ausgeben" + +#: share/functions/__fish_pwd.fish:3 share/functions/__fish_pwd.fish:7 +#, fuzzy +msgid "Show current path" +msgstr "Quellpaket anzeigen" + +#: share/functions/__fish_test_arg.fish:2 +msgid "Test if the token under the cursor matches the specified wildcard" +msgstr "" + +#: share/functions/__fish_urlencode.fish:1 +#, fuzzy +msgid "URL-encode stdin" +msgstr "Standardeingabe umbenennen" + +#: share/functions/__terlar_git_prompt.fish:23 +#, fuzzy +msgid "Write out the git prompt" +msgstr "Prompt ausgeben" + +#: share/functions/alias.fish:2 +msgid "" +"Legacy function for creating shellscript functions using an alias-like syntax" +msgstr "" + +#: share/functions/alias.fish:34 +#, fuzzy +msgid "%s: Expected one or two arguments, got %d\\n" +msgstr "%ls: Erwartete ein Argument, erhielt %d\n" + +#: share/functions/contains_seq.fish:1 +msgid "Return true if array contains a sequence" +msgstr "" + +#: share/functions/dirh.fish:2 +msgid "Print the current directory history (the back- and fwd- lists)" +msgstr "" + +#: share/functions/dirs.fish:1 +#, fuzzy +msgid "Print directory stack" +msgstr "Verzeichnisnamen ausgeben" + +#: share/functions/fish_config.fish:1 +msgid "Launch fish's web based configuration" +msgstr "" + +#: share/functions/fish_indent.fish:1 +msgid "Indenter and prettifier for fish code" +msgstr "" + +#: share/functions/fish_prompt.fish:5 +msgid "Write out the prompt" +msgstr "Prompt ausgeben" + +#: share/functions/fish_update_completions.fish:1 +#, fuzzy +msgid "Update man-page based completions" +msgstr "Befehlsspezifische Erweiterungen bearbeiten" + +#: share/functions/funced.fish:1 +#, fuzzy +msgid "Edit function definition" +msgstr "Funktionsdefinitonsblock" + +#: share/functions/funced.fish:24 share/functions/nextd.fish:22 +#: share/functions/prevd.fish:22 share/functions/vared.fish:15 +#, fuzzy +msgid "%s: Unknown option %s\\n" +msgstr "%ls: Unbekannte Option '%ls'\n" + +#: share/functions/funced.fish:36 +#, fuzzy +msgid "funced: You must specify one function name\n" +msgstr "%ls: Erwartete genau einen Funktionsnamen\n" + +#: share/functions/funcsave.fish:2 +msgid "Save the current definition of all specified functions to file" +msgstr "" + +#: share/functions/funcsave.fish:11 +#, fuzzy +msgid "%s: Expected function name\\n" +msgstr "%ls: Erwartete genau einen Funktionsnamen\n" + +#: share/functions/funcsave.fish:26 +#, fuzzy +msgid "%s: Could not create configuration directory\\n" +msgstr "%ls: Konnte Startverzeichnis nicht finden\n" + +#: share/functions/funcsave.fish:37 +#, fuzzy +msgid "%s: Unknown function '%s'\\n" +msgstr "Unbekannte Funktion '%ls'" + +#: share/functions/help.fish:1 +msgid "Show help for the fish shell" +msgstr "" + +#: share/functions/help.fish:76 +msgid "%s: Could not find a web browser.\\n" +msgstr "Konnte keinen Webbrowser finden.\\n" + +#: share/functions/help.fish:77 +#, fuzzy, sh-format +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 festund " +"versuchen Sie es erneut\\n\\n" + +#: share/functions/help.fish:129 +msgid "help: Help is being displayed in your default browser.\\n" +msgstr "" + +#: share/functions/help.fish:132 +msgid "help: Help is being displayed in %s.\\n" +msgstr "" + +#: share/functions/history.fish:5 +#, fuzzy +msgid "Deletes an item from history" +msgstr "Einen Eintrag aus dem Paketdepot entfernen" + +#: share/functions/hostname.fish:7 +msgid "Show or set the system's host name\r" +msgstr "" + +#: share/functions/la.fish:4 +msgid "" +"List contents of directory, including hidden files in directory using long " +"format" +msgstr "" + +#: share/functions/ll.fish:4 +msgid "List contents of directory using long format" +msgstr "" + +#: share/functions/ls.fish:7 share/functions/ls.fish:24 +#, fuzzy +msgid "List contents of directory" +msgstr "Startverzeichnis festlegen" + +#: share/functions/man.fish:1 +msgid "Format and display the on-line manual pages" +msgstr "" + +#: share/functions/math.fish:2 +#, fuzzy +msgid "Perform math calculations in bc" +msgstr "Simulation durchführen" + +#: share/functions/mimedb.fish:8 +msgid "Look up file information via the mimedb database" +msgstr "" + +#: share/functions/nextd.fish:2 +#, fuzzy +msgid "Move forward in the directory history" +msgstr "Auch Verzeichnisverlauf ausgeben" + +#: share/functions/nextd.fish:28 +#, fuzzy +msgid "%s: The number of positions to skip must be a non-negative integer\\n" +msgstr "" +"Anzahl zu überspringender Positionen muss eine positive Ganzzahl sein\\n" + +#: share/functions/open.fish:8 +msgid "Open file in default application" +msgstr "" + +#: share/functions/popd.fish:2 +msgid "Pop dir from stack" +msgstr "" + +#: share/functions/popd.fish:14 +msgid "%s: Directory stack is empty...\\n" +msgstr "" + +#: share/functions/prevd.fish:2 +#, fuzzy +msgid "Move back in the directory history" +msgstr "Auch Verzeichnisverlauf ausgeben" + +#: share/functions/prevd.fish:28 +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" + +#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:7 +#: share/functions/prompt_pwd.fish:11 +msgid "Print the current working directory, shortened to fit the prompt" +msgstr "" + +#: share/functions/psub.fish:3 +msgid "" +"Read from stdin into a file and output the filename. Remove the file when " +"the command that called psub exits." +msgstr "" + +#: share/functions/pushd.fish:3 +#, fuzzy +msgid "Push directory to stack" +msgstr "Verzeichnis nach makefile durchsuchen" + +#: share/functions/seq.fish:7 +#, fuzzy +msgid "Print sequences of numbers" +msgstr "Name statt Nummer ausgeben" + +#: share/functions/seq.fish:11 +msgid "Fallback implementation of the seq command" +msgstr "" + +#: share/functions/seq.fish:31 +#, fuzzy +msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" +msgstr "%ls: Erwartete ein Argument, erhielt %d\n" + +#: share/functions/seq.fish:38 +#, fuzzy +msgid "%s: '%s' is not a number\\n" +msgstr "%ls: '%ls' ist kein Job\n" + +#: share/functions/setenv.fish:2 +msgid "Set global variable. Alias for set -g, made for csh compatibility" +msgstr "" + +#: share/functions/type.fish:2 +#, fuzzy +msgid "Print the type of a command" +msgstr "Pfad zu Befehl ausgeben" + +#: share/functions/type.fish:84 +msgid "%s is a function with definition\\n" +msgstr "%s ist eine Funktion mit der Definition\\n" + +#: share/functions/type.fish:88 +msgid "function" +msgstr "Funktion" + +#: share/functions/type.fish:105 +msgid "%s is a builtin\\n" +msgstr "%s ist ein eingebauter Befehl\\n" + +#: share/functions/type.fish:108 +#, fuzzy +msgid "builtin" +msgstr "eingebauter Befehl\\n" + +#: share/functions/type.fish:132 +msgid "%s is %s\\n" +msgstr "%s ist %s\\n" + +#: share/functions/type.fish:135 +msgid "file" +msgstr "Datei" + +#: share/functions/type.fish:147 +#, fuzzy +msgid "%s: Could not find '%s'\\n" +msgstr "%s: Konnte '%s' nicht finden" + +#: share/functions/umask.fish:11 share/functions/umask.fish:69 +#: share/functions/umask.fish:76 +msgid "%s: Invalid mask '%s'\\n" +msgstr "%s: Ungültige Maske '%s'\\n" + +#: share/functions/umask.fish:137 +#, fuzzy +msgid "Set default file permission mask" +msgstr "Alle Rechte extrahieren" + +#: share/functions/umask.fish:212 +msgid "%s: Too many arguments\\n" +msgstr "%s: Zu viele Argumente\\n" + +#: share/functions/vared.fish:6 +#, fuzzy +msgid "Edit variable value" +msgstr "Verfügbare Liste ausgeben" + +#: share/functions/vared.fish:41 +#, fuzzy +msgid "" +"%s: %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" + +#: share/functions/vared.fish:45 +#, fuzzy +msgid "" +"%s: 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 "" +#~ "Current function definitions are:\n" +#~ "\n" +#~ msgstr "" +#~ "Aktuelle Funktionsdefinitionen:\n" +#~ "\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" + +#~ msgid "Evaluate parameters as a command" +#~ msgstr "Parameter als Befehl auswerten" + +#~ msgid "Function" +#~ msgstr "Funktion" + +#~ msgid "Builtin" +#~ msgstr "eingebauter Befehl" + +#~ msgid "No history item at index %d\n" +#~ msgstr "Kein Eintrag im Befehlsverlauf bei Index %d\n" + +#~ msgid "Could not create child process - exiting" +#~ msgstr "Konnte Kindprozess nicht starten - Abbruch" + +#~ msgid "Failed to execute process '%ls'" +#~ msgstr "Konnte Prozess '%ls' nicht ausführen" + +#~ msgid "Could not send process %d from group %d to group %d" +#~ msgstr "Konnte Prozess %d nicht von Gruppe %d an Gruppe %d senden" + +#~ 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 "Subshell '%ls' returned illegal string, discarded one entry" +#~ msgstr "" +#~ "Subshell '%ls' gab ungültige Zeichenkette zurück, ein Eintrag verworfen" + +#~ msgid "Invalid Control sequence" +#~ msgstr "Ungültige Kontrollsequenz" + +#~ msgid "Invalid sequence - no dash after control\n" +#~ msgstr "Ungültige Sequenz - kein Bindestrich nach Steuerung\n" + +#~ msgid "Invalid sequence - Control-nothing?\n" +#~ msgstr "Ungültige Sequenz - Steuerung-Nichts?\n" + +#~ msgid "Invalid sequence - no dash after meta\n" +#~ msgstr "Ungültige Sequenz - kein Bindestrich nach Alt\n" + +#~ msgid "Invalid sequence - Meta-nothing?" +#~ msgstr "Ungültige Sequenz - Alt-Nichts?" + +#~ msgid "Invalid sequence - '%ls' expanded to zero characters" +#~ msgstr "Ungültige Sequenz - '%ls' wurde zu null Zeichen erweitert" + +#~ msgid "Mismatched $endif in inputrc file" +#~ msgstr "Unpassendes $endif in der Datei inputrc" + +#~ msgid "Expected a ':'" +#~ msgstr "Erwartete ein ':'" + +#~ msgid "I don't know what '%ls' means" +#~ msgstr "Ich weiß nicht, was '%ls' bedeutet" + +#~ msgid "Expected end of line, got '%ls'" +#~ msgstr "Zeilenende erwartet, erhielt '%ls'" + +#~ msgid "Syntax: set KEY VALUE" +#~ msgstr "Syntax: set SCHLÃœSSEL WERT" + +#~ msgid "Unable to parse key binding" +#~ msgstr "Konnte Tastenkürzel nicht analysieren" + +#~ msgid "I don't know what %ls means" +#~ msgstr "Ich weiß nicht, was '%ls' bedeutet" + +#~ msgid "Error while reading input information from file '%ls'" +#~ msgstr "Fehler beim Lesen der Eingabeinformationen aus Datei '%ls'" + +#~ 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." + +#~ msgid "Short circut command requires additional command" +#~ msgstr "Ein kurzer Kreisbefehl erfordert einen zusätzlichen Befehl" + +#~ msgid "Maximum recursion depth reached. Accidental infinite loop?" +#~ msgstr "Maximale Rekursionstiefe erreicht. Zufällige Endlosschleife?" + +#~ msgid "Maximum number of nested blocks reached." +#~ msgstr "Maximalanzahl geschachtelter Blöcke erreicht." + +#~ 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." + +#~ msgid "Tried to evaluate null pointer." +#~ msgstr "Versuchte, einen Nullzeiger auszuwerten." + +#~ msgid "Unknown command '%ls'" +#~ msgstr "Unbekannter Befehl '%ls'" + +#~ msgid "Job command" +#~ msgstr "Jobbefehl" + +#~ msgid "Job list pointer" +#~ msgstr "Zeiger auf Jobliste" + +#~ msgid "Process command" +#~ msgstr "Prozessbefehl" + +#~ msgid "Could not set exit function" +#~ msgstr "Konnte Ende-Funktion nicht festlegen" + +#~ msgid "There are stopped jobs\n" +#~ msgstr "Es sind gestoppte Jobs vorhanden\n" + +#~ msgid "Could not convert input. Read %d bytes." +#~ msgstr "Konnte Eingabe nicht konvertieren. %d Bytes gelesen." + +#~ msgid "Could not read input stream" +#~ msgstr "Konnte Eingabestrom nicht lesen" + +#~ msgid "Parenthesis mismatch" +#~ msgstr "Nicht passende Klammern" + +#~ msgid "Invalid input" +#~ msgstr "Ungültige Eingabe" + +#~ msgid "-d" +#~ msgstr "-d" + +#~ msgid "Commands to execute when fish exits" +#~ msgstr "Beim Ende von fish auszuführende Befehle" + +#~ msgid "Good bye\\n" +#~ msgstr "Auf Wiedersehen\\n" + +#~ msgid "%s: Unknown argument '%s'\\n" +#~ msgstr "%s: Unbekanntes Argument '%s'\\n" + +#~ msgid "whatis entry" +#~ msgstr "whatis-Eintrag" + +#~ msgid "Use to build" +#~ msgstr "Benutze zur Erstellung" + +#~ msgid "Prefix to strip on patch" +#~ msgstr "Präfix zum Entfernen des Patch" + +#~ msgid "Use purge instead of remove" +#~ msgstr "purge anstelle von remove verwenden" + +#~ msgid "Do not run update" +#~ msgstr "Aktualisierung nicht durchführen" + +#~ msgid "Search full package name" +#~ msgstr "Vollständigen Paketnamen suchen" + +#~ msgid "Access config file from shell" +#~ msgstr "Ãœber die Shell auf Konfigurationsdatei zugreifen" + +#~ msgid "Use cdrom-mount-point" +#~ msgstr "CDROM-Einhängepunkt benutzen" + +#~ msgid "Use source override" +#~ msgstr "Quell-Override verwenden" + +#~ msgid "Download Only" +#~ msgstr "Nur herunterladen" + +#~ msgid "Correct broken dependencies" +#~ msgstr "Zerstörte Abhängigkeiten korrigieren" + +#~ msgid "Ignore missing packages" +#~ msgstr "Fehlende Pakete ignorieren" + +#~ msgid "Disable downloading packages" +#~ msgstr "Herunterladen von Paketen deaktivieren" + +#~ msgid "Automatic yes to prompts" +#~ msgstr "Automatisch Ja für Abfragen verwenden" + +#~ msgid "Compile source packages" +#~ msgstr "Quellpakete kompilieren" + +#~ msgid "Ignore package Holds" +#~ msgstr "Gehaltene Pakete ignorieren" + +#~ msgid "Do not upgrade packages" +#~ msgstr "Pakete nicht aktualisieren" + +#~ msgid "Force yes" +#~ msgstr "Ja erzwingen" + +#~ msgid "Erase obsolete files" +#~ msgstr "Veraltete Dateien löschen" + +#~ msgid "Control default input to the policy engine" +#~ msgstr "Standardeingabe zur Regelverwaltung leiten" + +#~ msgid "Only perform operations that are trivial" +#~ msgstr "Nur einfache Operationen durchführen" + +#~ msgid "Abort if any packages are to be removed" +#~ msgstr "Abbruch, falls irgendwelche Pakete entfernt würden" + +#~ msgid "Only accept source packages" +#~ msgstr "Nur Quellpakete akzeptieren" + +#~ msgid "Download only diff file" +#~ msgstr "Nur diff-Datei herunterladen" + +#~ msgid "Download only tar file" +#~ msgstr "Nur tar-Datei herunterladen" + +#~ msgid "Only process arch-dependant build-dependencies" +#~ msgstr "Nur Architektur-abhängige Erstellungsabhängigkeiten verarbeiten" + +#~ msgid "Ignore non-authenticated packages" +#~ msgstr "Nicht authentifizierte Pakete ignorieren" + +#~ msgid "Specify apt config file" +#~ msgstr "apt-Konfigurationsdatei angeben" + +#~ msgid "List bugs in rss format" +#~ msgstr "Fehler im rss-Format auflisten" + +#~ msgid "Read filenames from pipe" +#~ msgstr "Dateinamen über Pipe lesen" + +#~ msgid "Alias for 'get'" +#~ msgstr "Alias für 'get'" + +#~ msgid "Use specific conffile" +#~ msgstr "Angegebene Konfigurationsdatei benutzen" + +#~ msgid "Comma-separated list of dependancy types to follow recursively" +#~ msgstr "" +#~ "Komma-getrennte Liste der Abhängigkeitstypen, die rekursiv abgearbeitet " +#~ "werden" + +#~ msgid "Comma-separated list of dependancy types to show" +#~ msgstr "Komma-getrennte Liste anzuzeigender Abhängigkeitstypen" + +#~ msgid "" +#~ "Comma-separated list of package installation states to follow recursively" +#~ msgstr "" +#~ "Komma-getrennte Liste vom Paketinstallationsstatus, die rekursiv " +#~ "verarbeitet werden" + +#~ msgid "Comma-separated list of package installation states to show" +#~ msgstr "" +#~ "Komma-getrennte Liste vom Paketinstallationsstatus, die angezeigt werden " +#~ "sollen" + +#~ msgid "Probe a CD" +#~ msgstr "Eine CD testen" + +#~ msgid "Run in noninteractive mode" +#~ msgstr "Im nicht interaktiven Modus ausführen" + +#~ msgid "Conf file" +#~ msgstr "Konfigurationsdatei" + +#~ msgid "File as input" +#~ msgstr "Datei als Eingabe" + +#~ msgid "Mirror-list file" +#~ msgstr "Datei mit Spiegelliste" + +#~ msgid "Output sources.list file" +#~ msgstr "sources.list-Datei ausgeben" + +#~ msgid "Write top servers to file" +#~ msgstr "Top-Server in Datei schreiben" + +#~ msgid "Run on current dir" +#~ msgstr "Im aktuellen Verzeichnis starten" + +#~ msgid "Removable medium" +#~ msgstr "Wechselbares Medium" + +#~ msgid "Specify a non-mountpoint dir" +#~ msgstr "Verzeichnis angeben, das kein Einhängeverzeichnis ist" + +#~ msgid "Select a method" +#~ msgstr "Eine Methode auswählen" + +#~ msgid "Accept protocols" +#~ msgstr "Zu akzeptierende Protokolle" + +#~ msgid "Reject protocols" +#~ msgstr "Abzulehnende Protokolle" + +#~ msgid "Numerical address" +#~ msgstr "Numerische Adresse" + +#~ msgid "Use hardware address" +#~ msgstr "Hardwareadresse verwenden" + +#~ msgid "Define math library" +#~ msgstr "Mathematikbibliothek definieren" + +#~ msgid "Give warnings for extensions to POSIX bc" +#~ msgstr "Bei Erweiterungen zu POSIX bc Warnungen ausgeben" + +#~ msgid "Process exactly POSIX bc" +#~ msgstr "POSIX bc genau verarbeiten" + +#~ msgid "Do not print the GNU welcome" +#~ msgstr "GNU welcome-Meldung nicht ausgeben" + +#~ msgid "Maximum uploads at once" +#~ msgstr "Maximale gleichzeitige Ãœbertragungen" + +#~ msgid "Number of seconds between keepalives" +#~ msgstr "" +#~ "Anzahl Sekunden zwischen Meldungen zur Aufrechterhaltung der Verbindung" + +#~ msgid "Bytes per request" +#~ msgstr "Bytes per Anforderung" + +#~ msgid "Requests per pipe" +#~ msgstr "Anforderungen per Pipe" + +#~ msgid "Maximum length prefix encoding" +#~ msgstr "Maximallänge der Präfix-Kodierung" + +#~ msgid "File for server response" +#~ msgstr "Datei für Serverantworten" + +#~ msgid "URL to get file from" +#~ msgstr "URL zum Dateiabruf" + +#~ msgid "Local file target" +#~ msgstr "Target für lokale Datei" + +#~ msgid "Time to close inactive socket" +#~ msgstr "Zeit zum Schließen inaktiver Sockets" + +#~ msgid "Time between checking timeouts" +#~ msgstr "Zeit zwischen der Prüfung von Zeitüberschreitungen" + +#~ msgid "Maximum outgoing slice length" +#~ msgstr "Maximale ausgehende Slice-Länge" + +#~ msgid "Maximum time to guess rate" +#~ msgstr "Höchstdauer für die Ratequote" + +#~ msgid "IP to bind to locally" +#~ msgstr "Lokal zu bindende IP-Adresse" + +#~ msgid "Time between screen updates" +#~ msgstr "Zeit zwischen Bildschirmaktualisierungen" + +#~ msgid "Time to wait between requesting more peers" +#~ msgstr "Wartezeit zwischen den Anfragen weiterer Peers" + +#~ msgid "Minimum number of peers to not do requesting" +#~ msgstr "Mindestanzahl an Peers, um keine Anfragen zu stellen" + +#~ msgid "Number of seconds before assuming http timeout" +#~ msgstr "Anzahl Sekunden, bevor eine http-Zeitüberschreitung vermutet wird" + +#~ msgid "Number of peers at which to stop initiating new connections" +#~ msgstr "" +#~ "Anzahl an Peers bei denen die Initiierung von neuen Verbindungen gestoppt " +#~ "wird" + +#~ msgid "Maximum number of connections to allow" +#~ msgstr "erlaubte Anzahl maximaler Verbindungen" + +#~ msgid "Whether to check hashes on disk" +#~ msgstr "Hashes auf der Platte prüfen" + +#~ msgid "Maximum kB/s to upload at" +#~ msgstr "Maximale Hochladegeschwindigkeit in kB/s" + +#~ 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" + +#~ msgid "Whether to display diagnostic info" +#~ msgstr "Sollen diagnostische Informationen angezeigt werden" + +#~ 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" + +#~ msgid "Number of uploads to fill out to with optimistic unchokes" +#~ msgstr "Anzahl der Hochladevorgänge mit besonders optimistischen Unchokes" + +#~ msgid "Whether to inform the user that hash failures occur" +#~ msgstr "Sollen die Benutzer informiert werden, wenn Hash-Fehler auftreten" + +#~ msgid "Decompress to stdout" +#~ msgstr "Auf Standardausgabe dekomprimieren" + +#~ msgid "Overwrite" +#~ msgstr "Ãœberschreiben" + +#~ msgid "Do not overwrite" +#~ msgstr "Nicht überschreiben" + +#~ msgid "Reduce memory usage" +#~ msgstr "Speicherbedarf reduzieren" + +#~ msgid "Print compression ratios" +#~ msgstr "Kompressionsraten ausgeben" + +#~ msgid "Print license" +#~ msgstr "Lizenz ausgeben" + +#~ msgid "Compress to stdout" +#~ msgstr "Auf Standardausgabe komprimieren" + +#~ msgid "Compress file" +#~ msgstr "Datei komprimieren" + +#~ msgid "Check integrity" +#~ msgstr "Integrität prüfen" + +#~ msgid "Supress errors" +#~ msgstr "Fehler unterdrücken" + +#~ msgid "Small block size" +#~ msgstr "Kleine Blockgrösse" + +#~ msgid "Large block size" +#~ msgstr "Grosse Blockgrösse" + +#~ msgid "Escape all non-printing characters" +#~ msgstr "Alle nicht druckbaren Zeichen maskieren" + +#~ msgid "Number nonblank lines" +#~ msgstr "Nicht-leere Zeilen nummerieren" + +#~ msgid "Escape non-printing characters except tab" +#~ msgstr "Nicht druckbare Zeichen außer Tabulator maskieren" + +#~ msgid "Display $ at end of line" +#~ msgstr "$ am Zeilenende anzeigen" + +#~ msgid "Never more than single blank line" +#~ msgstr "Nicht mehr als eine leere Zeile" + +#~ msgid "Escape non-printing characters except newline" +#~ msgstr "Nicht druckbare Zeichen außer Neuer-Zeile maskieren" + +#~ msgid "Escape tab" +#~ msgstr "Tabulator maskieren" + +#~ msgid "Escape non-printing except newline and tab" +#~ msgstr "Nicht druckbare Zeichen außer Neuer-Zeile und Tabulator maskieren" + +#~ msgid "Output diagnostic for changed files" +#~ msgstr "Informationen über geänderte Dateien ausgeben" + +#~ msgid "Dereferense symbolic links" +#~ msgstr "Symbolische Verweise dereferenzieren" + +#~ msgid "Do not dereference symbolic links" +#~ msgstr "Symbolische Verweise nicht dereferenzieren" + +#~ msgid "Change from owner/group" +#~ msgstr "Von Eigner/Gruppe wechseln" + +#~ msgid "Use same owner/group as file" +#~ msgstr "Eigner/Gruppe wie Datei verwenden" + +#~ msgid "Operate recursively" +#~ msgstr "Rekursiv arbeiten" + +#~ msgid "Output diagnostic for every file" +#~ msgstr "Informationen zu jeder Datei ausgeben" + +#~ msgid "Add text to the end of the selected area" +#~ msgstr "Text am Ende des selektierten Bereichs anfügen" + +#~ msgid "Add text at cursor" +#~ msgstr "Text an Cursorposition hinzufügen" + +#~ msgid "Replace selected part" +#~ msgstr "Selektierten Bereich ersetzen" + +#~ msgid "Select job under cursor" +#~ msgstr "Job unter Curser selektieren" + +#~ msgid "Select process under cursor" +#~ msgstr "Prozess unter Cursor selektieren" + +#~ msgid "Select token under cursor" +#~ msgstr "Token unter dem Cursor selektieren" + +#~ msgid "Select entire command line (default)" +#~ msgstr "Vollständige Befehlszeile selektieren (Standard)" + +#~ msgid "Only return that part of the command line before the cursor" +#~ msgstr "Nur Teil der Befehlszeile vor dem Curser zurückgeben" + +#~ msgid "Inject readline functions to reader" +#~ msgstr "readline-Funktion zum reader injizieren" + +#~ msgid "Path to add completion to" +#~ msgstr "Pfad, bei dem Vervollständigung berücksichtigt werden soll" + +#~ msgid "Posix-style option to complete" +#~ msgstr "zu vervollständigende Option im Posix-Format" + +#~ msgid "GNU-style option to complete" +#~ msgstr "zu vervollständigende Option im GNU-Format" + +#~ msgid "Old style long option to complete" +#~ msgstr "zu vervollständigende lange Option im alten Format" + +#~ msgid "Do not use file completion" +#~ msgstr "Keine Dateinamenvervollständigung benutzen" + +#~ msgid "Require parameter" +#~ msgstr "Parameter anfordern" + +#~ msgid "Require parameter and do not use file completion" +#~ msgstr "Parameter anfordern und keine Dateivervollständigung verwenden" + +#~ msgid "A list of possible arguments" +#~ msgstr "Eine Liste möglicher Argumente" + +#~ msgid "Description of this completions" +#~ msgstr "Beschreibung dieser Vervollständigung" + +#~ msgid "Option list is not complete" +#~ msgstr "Optionsliste ist nicht vollständig" + +#~ msgid "Remove completion" +#~ msgstr "Vervollständigung entfernen" + +#~ msgid "Cache test results in file config.cache" +#~ msgstr "Testergebnisse in Datei config.cache zwischenspeichern" + +#~ msgid "Do not create output files" +#~ msgstr "Keine Ausgabedateien erstellen" + +#~ msgid "Set source directory" +#~ msgstr "Quellverzeichnis eintragen" + +#~ msgid "Architecture-independent install directory" +#~ msgstr "Architekturunabhängiges Installationsverzeichnis" + +#~ msgid "Architecture-dependent install directory" +#~ msgstr "Architekturabhängiges Installationsverzeichnis" + +#~ msgid "Cross-compile to build programs to run on HOST" +#~ msgstr "Cross-Kompilierung zur Programmerstellung auf RECHNER" + +#~ msgid "Configure for building compilers for TARGET" +#~ msgstr "Konfiguration zur Kompilererstellung für ZIEL" + +#~ msgid "Select output delimiter" +#~ msgstr "Ausgabebegrenzer festlegen" + +#~ msgid "Kerberos server mode" +#~ msgstr "Kerberos-Servermodus" + +#~ msgid "Prompt for password for authenticating server" +#~ msgstr "Abfrage des Passworts für den Authentifizierungsserver" + +#~ msgid "Password server mode" +#~ msgstr "Passwort für Server-Modus" + +#~ msgid "Show last revision where each line of module was modified" +#~ msgstr "Zeige letzte Revision, bei der jede Modulzeile verändert wurde" + +#~ msgid "Create patch format diffs between releases" +#~ msgstr "Erstelle Diffs zwischen Veröffentlichungen im Patch-Format" + +#~ msgid "Indicate that a Module is no longer in use" +#~ msgstr "Anzeigen, das ein Modul nicht mehr benutzt wird" + +#~ msgid "Print out history information for a module" +#~ msgstr "Verlaufsinformationen für ein Modul ausgeben" + +#~ msgid "Add a symbolic tag to a module" +#~ msgstr "Einem Modul eine symbolische Markierung hinzufügen" + +#~ msgid "Server mode" +#~ msgstr "Server-Modus" + +#~ msgid "Add a symbolic tag to checked out version of files" +#~ msgstr "" +#~ "Der Version von ausgecheckten Dateien eine symbolische Markierung " +#~ "hinzufügen" + +#~ msgid "Bring work tree in sync with repository" +#~ msgstr "Arbeitsbaum mit Paketdepot synchronisieren" + +#~ msgid "Set watches" +#~ msgstr "Dateibeobachtungen festlegen" + +#~ msgid "See who is watching a file" +#~ msgstr "Anzeigen, wer eine Datei beobachtet" + +#~ msgid "Cause CVS to be really quiet" +#~ msgstr "Veranlasst CVS, wirklich still zu sein" + +#~ msgid "Cause CVS to be somewhat quiet" +#~ msgstr "Veranlasst CVS, etwas stiller zu sein" + +#~ msgid "Make checked-out files read-only" +#~ msgstr "Ausgecheckte Dateien mit Schreibschutz versehen" + +#~ msgid "Make checked-out files read-write (default)" +#~ msgstr "Ausgecheckte Dateien beschreibbar machen (Standard)" + +#~ msgid "Do not execute anything that will change the disk" +#~ msgstr "Nichts ausführen, was Änderungen auf die Platte schreibt" + +#~ msgid "Show trace of program execution -- try with -n" +#~ msgstr "Programmablauf anzeigen -- versuchen Sie -n" + +#~ msgid "Do not use the ~/.cvsrc file" +#~ msgstr "~/.cvsrc-Datei nicht benutzen" + +#~ msgid "Encrypt all net traffic" +#~ msgstr "Sämtlichen Netzverkehr verschlüsseln" + +#~ msgid "Authenticate all net traffic" +#~ msgstr "Sämtlichen Netzverkehr authentifizieren" + +#~ msgid "Create new project" +#~ msgstr "Neues Projekt erstellen" + +#~ msgid "Replace a token with a new value for that token" +#~ msgstr "Merkmal mit einem neuen Wert für dieses Merkmal ersetzen" + +#~ msgid "Apply patches (from an email bundle) to the repository" +#~ msgstr "Patches (aus einem E-Mail-Paket) auf das Paketdepot anwenden" + +#~ msgid "Gives a changelog style summary of the repo history" +#~ msgstr "Gibt eine Zusammenfassung des Depotverlaufs ähnlich einem Changelog" + +#~ msgid "Replace a recorded patch with a better version" +#~ msgstr "Einen aufgezeichneten Patch mit einer besseren Version ersetzen" + +#~ msgid "Revert to the recorded version (safe the first time only)" +#~ msgstr "Zur aufgezeichneten Version zurück (nur beim ersten Mal sicher)" + +#~ 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" + +#~ msgid "Record an inverse patch without changing the working copy" +#~ msgstr "Einen inversen Patch ohne Änderung der Arbeitskopie aufzeichnen" + +#~ msgid "Tag the contents of the repository with a version name" +#~ msgstr "Inhalte des Paketdepots mit einem Versionsnamen markieren" + +#~ msgid "Optimize the repository" +#~ msgstr "Paketdepot optimieren" + +#~ msgid "Check the repository for consistency" +#~ msgstr "Paketdepot auf Konsistenz prüfen" + +#~ msgid "Shows brief description of command and its arguments" +#~ msgstr "Kurze Beschreibung des Befehls und seiner Argumente anzeigen" + +#~ msgid "Give patch name and comment in file" +#~ msgstr "Patch-Name und Kommentar in Datei angeben" + +#~ msgid "Answer yes to all patches" +#~ msgstr "Alle Patches mit ja beantworten" + +#~ 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" + +#~ msgid "Don't run the test script" +#~ msgstr "Das test-Skript nicht ausführen" + +#~ msgid "Run the test script" +#~ msgstr "Das test-Skript ausführen" + +#~ msgid "Don't remove the test directory" +#~ msgstr "Das test-Verzeichnis nicht entfernen" + +#~ msgid "Remove the test directory" +#~ msgstr "Das test-Verzeichnis entfernen" + +#~ msgid "Don't create compressed patches" +#~ msgstr "Keine komprimierten Patche erstellen" + +#~ msgid "Expect to receive input from a pipe" +#~ msgstr "Die Eingabe aus einer Pipe erwarten" + +#~ msgid "Prompt user interactively" +#~ msgstr "Benutzer interaktiv fragen" + +#~ msgid "Ask for extra dependencies" +#~ msgstr "Nach zusätzlichen Abhängigkeiten fragen" + +#~ msgid "Don't ask for extra dependencies" +#~ msgstr "Nicht nach zusätzlichen Abhängigkeiten fragen" + +#~ msgid "Edit the long comment by default" +#~ msgstr "Standardmäßig den langen Kommentar editieren" + +#~ msgid "Don't give a long comment" +#~ msgstr "Keinen langen Kommentar eingeben" + +#~ msgid "Prompt for whether to edit the long comment" +#~ msgstr "Abfragen, ob der lange Kommentar editiert werden soll" + +#~ 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 "Summarize changes" +#~ msgstr "Änderungen zusammenfassen" + +#~ msgid "Suppress informational output" +#~ msgstr "Informationelle Ausgabe unterdrücken" + +#~ msgid "Don't actually take the action" +#~ msgstr "Aktion nicht tatsächlich ausführen" + +#~ msgid "Don't summarize changes" +#~ msgstr "Änderungen nicht zusammenfassen" + +#~ msgid "Neither verbose nor quiet output" +#~ msgstr "Ausgabe weder ausführlich noch schweigsam" + +#~ msgid "Set default repository [DEFAULT]" +#~ msgstr "Standardpaketdepot [STANDARD] festlegen" + +#~ msgid "Don't set default repository" +#~ msgstr "Standardpaketdepot nicht festlegen" + +#~ msgid "Make scripts executable" +#~ msgstr "Skripte ausführbar machen" + +#~ msgid "Verify that the patch was signed by a key in PUBRING" +#~ msgstr "" +#~ "Ãœberprüfen, das der Patch mit einem Schlüssel aus PUBRING signiert wurde" + +#~ msgid "Verify using openSSL with authorized keys from file 'KEYS'" +#~ msgstr "" +#~ "Mittels openSSL und autorisierten Schlüsseln aus der Datei 'KEYS' " +#~ "überprüfen" + +#~ msgid "Don't verify patch signature" +#~ msgstr "Patch-Signatur nicht überprüfen" + +#~ msgid "Mark conflicts" +#~ msgstr "Konflikte markieren" + +#~ msgid "Allow conflicts, but don't mark them" +#~ msgstr "Konflikte zulassen, sie aber nicht markieren" + +#~ msgid "Fail on patches that create conflicts [DEFAULT]" +#~ msgstr "Abbruch bei Patchen, die Konflikte erzeugen (Standard)" + +#~ msgid "Forward unsigned messages without extra header" +#~ msgstr "Unsignierte Nachrichten ohne zusätzliche Kopfzeile weiterleiten" + +#~ msgid "Check the entire repository" +#~ msgstr "Das ganze Paketdepot prüfen" + +#~ msgid "Check patches since latest checkpoint" +#~ msgstr "Patches seit letztem Prüfpunkt prüfen" + +#~ msgid "Don't refuse to add files differing only in case" +#~ msgstr "" +#~ "Hinzufügen von Dateien, die sich nur in Groß-/Kleinschreibung " +#~ "unterscheiden, nicht verweigern" + +#~ msgid "Output patch in a darcs-specific format similar to diff -u" +#~ msgstr "" +#~ "Patch in einem darcs-spezifischen Format ausgeben, das diff -u entspricht" + +#~ msgid "Sign the patch with your gpg key" +#~ msgstr "Patch mit Ihrem gpg-Schlüssel signieren" + +#~ msgid "Do not sign the patch" +#~ msgstr "Patch nicht signieren" + +#~ msgid "Use a plain pristine tree [DEFAULT]" +#~ msgstr "Benutze einen unberührten Baum [Standard]" + +#~ msgid "Use no pristine tree" +#~ msgstr "Keinen unberührten Baum verwenden" + +#~ msgid "Display date described by string" +#~ msgstr "Datum gemäß Zeichenkette anzeigen" + +#~ msgid "Display date for each line in file" +#~ msgstr "Für jede Zeile der Datei Datum anzeigen" + +#~ msgid "Output in ISO 8601 format" +#~ msgstr "Ausgabe im ISO 8601-Format" + +#~ msgid "Output RFC-2822 compliant date string" +#~ msgstr "Datumszeichenkette gemäß RFC-2822 ausgeben" + +#~ msgid "Print or set Coordinated Universal Time" +#~ msgstr "Koordinierte Universalzeit (CUT) ausgeben oder festlegen" + +#~ msgid "List inode information" +#~ msgstr "Inode-Information auflisten" + +#~ msgid "Use 1kB block size" +#~ msgstr "Blockgrösse von 1kB verwenden" + +#~ msgid "List only local filesystems" +#~ msgstr "Nur lokale Dateisysteme auflisten" + +#~ msgid "Use Posix format" +#~ msgstr "Posix-Format verwenden" + +#~ msgid "Include empty filesystems" +#~ msgstr "Leere Dateisysteme einschliessen" + +#~ msgid "Do not sync before getting usage info" +#~ msgstr "Vor Belegungsabruf keinen sync ausführen" + +#~ msgid "Sync before getting usage info" +#~ msgstr "Vor Belegungsabruf sync ausführen" + +#~ msgid "Print filesystem type" +#~ msgstr "Dateisystemtyp ausgeben" + +#~ msgid "Excluded filesystem type" +#~ msgstr "Dateisystemtyp ausschliessen" + +#~ msgid "Show all filesystems" +#~ msgstr "Alle Dateisysteme anzeigen" + +#~ msgid "Show sizes in gigabytes" +#~ msgstr "Größe in Gigabyte anzeigen" + +#~ msgid "Show sizes in megabytes" +#~ msgstr "Größe in Megabyte anzeigen" + +#~ msgid "Print out the previously obtained statistics from the file systems" +#~ msgstr "Bisher erhaltene Statistiken über die Dateisysteme ausgeben" + +#~ msgid "Output NUM lines of copied context" +#~ msgstr "NUM Zeilen des kopierten Kontextes ausgeben" + +#~ msgid "Output NUM lines of unified context" +#~ msgstr "NUM Zeilen des vereinheitlichten Kontextes ausgeben" + +#~ msgid "Output at most NUM print columns" +#~ msgstr "Gebe maximale NUM Druckspalten aus" + +#~ msgid "Compare FILE2 to all operands" +#~ msgstr "Vergleiche FILE2 mit allen Operanden" + +#~ msgid "Write size for all files" +#~ msgstr "Größe für alle Dateien anzeigen" + +#~ msgid "Print file size, not disk usage" +#~ msgstr "Dateigröße statt Plattenbelegung ausgeben" + +#~ msgid "Use 1B block size" +#~ msgstr "1B-Blockgröße verwenden" + +#~ msgid "Produce grand total" +#~ msgstr "Gesamtsumme erstellen" + +#~ msgid "Dereference file symlinks" +#~ msgstr "Symbolische Links für Datei dereferenzieren" + +#~ msgid "Count hard links multiple times" +#~ msgstr "Harte Links mehrfach zählen" + +#~ msgid "Dereference all symlinks" +#~ msgstr "Alle symbolischen Links dereferenzieren" + +#~ msgid "Do not include subdirectory size" +#~ msgstr "Unterverzeichnisgrösse nicht einschliessen" + +#~ msgid "Display only a total for each argument" +#~ msgstr "Nur eine Gesamtsumme für jedes Argument anzeigen" + +#~ msgid "Skip other filesystems" +#~ msgstr "Andere Dateisysteme überspringen" + +#~ msgid "No newline" +#~ msgstr "Kein Neue-Zeile-Zeichen" + +#~ msgid "Use backslash escaped characters" +#~ msgstr "Benutze per 'backslash (\\)'maskierte Zeichen " + +#~ msgid "Do not use backslash escaped characters" +#~ msgstr "Keine per 'backslash (\\)'maskierte Zeichen verwenden" + +#~ msgid "Do not load init files" +#~ msgstr "Keine Init-Dateien laden" + +#~ msgid "Load users init file" +#~ msgstr "Init-Datei des Benutzers laden" + +#~ msgid "Use file as terminal" +#~ msgstr "Datei als Terminal benutzen" + +#~ msgid "Execute Lisp function" +#~ msgstr "Lisp-Funktion ausführen" + +#~ msgid "Load Lisp code from file" +#~ msgstr "Lisp-Code aus Datei laden" + +#~ msgid "Do not use X interface" +#~ msgstr "X-Schnittstelle nicht verwenden" + +#~ msgid "Run fish with this command" +#~ msgstr "fish mit diesem Befehl ausführen" + +#~ msgid "Make the function a job exit event handler" +#~ msgstr "Funktion zur Ereignisbehandlung bei Jobende verwenden" + +#~ msgid "Make the function a process exit event handler" +#~ msgstr "Funktion zur Ereignisbehandlung bei Prozessende verwenden" + +#~ msgid "Make the function a signal event handler" +#~ msgstr "Funktion zur Signalereignisbehandlung verwenden" + +#~ msgid "Make the function a variable update event handler" +#~ msgstr "" +#~ "Funktion zur Ereignisbehandlung bei Variablenaktualisierung verwenden" + +#~ msgid "Erase function" +#~ msgstr "Funktion löschen" + +#~ msgid "Show hidden functions" +#~ msgstr "Versteckte Funktionen anzeigen" + +#~ msgid "Language" +#~ msgstr "Sprache" + +#~ msgid "Pass program exit codes" +#~ msgstr "Rückkehrcodes des Programms weiterreichen" + +#~ msgid "Stop after assembler" +#~ msgstr "Nach Assemblierung anhalten" + +#~ msgid "Stop after compile" +#~ msgstr "Nach Kompilierung anhalten" + +#~ msgid "Stop after preprocesswor" +#~ msgstr "Nach Präprozessordurchlauf anhalten" + +#~ msgid "Print commands to stderr" +#~ msgstr "Befehle auf Standardfehlerausgabe ausgeben" + +#~ msgid "Print quoted commands to stderr, do not run" +#~ msgstr "" +#~ "Maskierte Befehle auf Standardfehlerausgabe ausgeben, nicht ausführen" + +#~ msgid "Use pipes" +#~ msgstr "Pipes benutzen" + +#~ msgid "Use ansi mode" +#~ msgstr "Ansi-Modus benutzen" + +#~ msgid "Do not recognize asm, inline or typeof keywords" +#~ msgstr "Schlüsselworte asm, inline oder typeof nicht erkennen" + +#~ msgid "Do not use builtin functions" +#~ msgstr "Keine eingebauten Funktionen verwenden" + +#~ msgid "Assert hosted environment" +#~ msgstr "Gehostete Umgebung bestätigen" + +#~ msgid "Assert freestanding environment" +#~ msgstr "Freistehende Umgebung bestätigen" + +#~ msgid "Use Microsoft extensions" +#~ msgstr "Microsoft-Erweiterungen verwenden" + +#~ msgid "Use ANSI trigraphs" +#~ msgstr "ANSI-Trigraphen verwenden" + +#~ msgid "Do not use integrated preprocessor" +#~ msgstr "Integrierten Präprozessor nicht verwenden" + +#~ msgid "char is unsigned" +#~ msgstr "char ist nicht vorzeichenbehaftet" + +#~ msgid "char is signed" +#~ msgstr "char ist vorzeichenbehaftet" + +#~ msgid "bitfield is unsigned" +#~ msgstr "Bitfeld ist nicht vorzeichenbehaftet" + +#~ msgid "bitfield is signed" +#~ msgstr "Bitfeld ist vorzeichenbehaftet" + +#~ msgid "All bitfields are signed" +#~ msgstr "Alle Bitfielder sind vorzeichenbehaftet" + +#~ msgid "All bitfields are unsigned" +#~ msgstr "Alle Bitfielder sind nicht vorzeichenbehaftet" + +#~ msgid "String constants are not const" +#~ msgstr "Zeichenkettenkonstanten sind nicht const" + +#~ msgid "C++ ABI version" +#~ msgstr "C++ ABI-Version" + +#~ msgid "Turn off access checking" +#~ msgstr "Zugriffsprüfung abschalten" + +#~ msgid "Check pointer returned by new" +#~ msgstr "Durch new zurückgegebenen Zeiger prüfen" + +#~ msgid "Put globals in the common segment" +#~ msgstr "Globalwerte im Common-Segment einfügen" + +#~ msgid "Accept $ in identifiers" +#~ msgstr "In Bezeichnern $ akzeptieren" + +#~ msgid "Reject $ in identifiers" +#~ msgstr "In Bezeichnern $ nicht akzeptieren" + +#~ msgid "Do not omit unneeded temporarys" +#~ msgstr "Temporäre Dateien nicht auslassen" + +#~ msgid "Allow exception violations" +#~ msgstr "Erlaube Ausnahmeverletzungen" + +#~ msgid "Do not extend for-loop scope" +#~ msgstr "Bereich für for-Schleife nicht erweitern" + +#~ msgid "Extend for-loop scope" +#~ msgstr "Bereich für for-Schleife erweitern" + +#~ msgid "Do not recognize typeof as keyword" +#~ msgstr "typeof nicht als Schlüsselwort erkennen" + +#~ msgid "Do not emit code for implicit templates" +#~ msgstr "Keinen Code für implizite Vorlagen abgeben" + +#~ msgid "Do not emit code for implicit inline templates" +#~ msgstr "Keinen Code für implizite 'inline'-Vorlagen abgeben" + +#~ msgid "Do not emit out-of-line code for inline functions" +#~ msgstr "Keinen Code für abweichende 'inline'-Funktionen abgeben" + +#~ msgid "Disable some built-in functions" +#~ msgstr "Einige eingebaute Funktionen deaktivieren" + +#~ msgid "Disable operator keywords" +#~ msgstr "Operater-Schlüsselworte deaktivieren" + +#~ msgid "Disable optional diagnostics" +#~ msgstr "Optionale Diagnostikmeldungen deaktivieren" + +#~ msgid "Downgrade some errors to warnings" +#~ msgstr "Einge Fehler zu Warnungen herabstufen" + +#~ msgid "Enable automatic template instantiation at link time" +#~ msgstr "Automatische Vorlageninstanziierung zur Linkzeit aktivieren" + +#~ msgid "Disable generation of C++ runtime type information" +#~ msgstr "Generierung von C++-Laufzeit-Typinformationen deaktivieren" + +#~ msgid "Do not emit code for thread-safe initialization of local statics" +#~ msgstr "" +#~ "Keinen Code für die threadsichere Initialisierung lokaler statischer " +#~ "Objekte abgeben" + +#~ msgid "Use __cxa_atexit for destructors" +#~ msgstr "Benutze __cxa_atexit für Destruktoren" + +#~ msgid "Hides inline methods from export table" +#~ msgstr "Versteckt 'inline'-Methoden aus der Exporttabelle" + +#~ msgid "Do not use weak symbol support" +#~ msgstr "Unterstützung für schwache Symbole nich verwenden" + +#~ msgid "Make a signature" +#~ msgstr "Signatur erstellen" + +#~ msgid "Make a clear text signature" +#~ msgstr "Klartextsignatur erstellen" + +#~ msgid "Make a detached signature" +#~ msgstr "Abgehängte Signatur erstellen" + +#~ msgid "Encrypt data" +#~ msgstr "Daten verschlüsseln" + +#~ msgid "Encrypt with a symmetric cipher using a passphrase" +#~ msgstr "" +#~ "Verschlüsseln mit einem symmetrischen Verschlüsselungsverfahren mittels " +#~ "eines Passwortsatzes" + +#~ msgid "Store only (make a simple RFC1991 packet)" +#~ msgstr "Nur speichern (einfaches RFC1991-Paket erzeugen)" + +#~ 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" + +#~ 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" + +#~ msgid "Identical to '--multifile --verify'" +#~ msgstr "Entspricht '--multifile --verify'" + +#~ msgid "Identical to '--multifile --encrypt'" +#~ msgstr "Entspricht '--multifile --encrypt'" + +#~ msgid "Identical to --multifile --decrypt" +#~ msgstr "Entspricht '--multifile --decrypt'" + +#~ 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" + +#~ 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" + +#~ msgid "Same as --list-keys, but the signatures are listed too" +#~ msgstr "Entspricht --list-keys, aber auch die Signaturen werden angezeigt" + +#~ msgid "Same as --list-keys, but the signatures are listed and verified" +#~ msgstr "" +#~ "Entspricht --list-keys, die Signaturen werden aber angezeigt und überprüft" + +#~ msgid "List all keys with their fingerprints" +#~ msgstr "Alle Schlüssel mit ihren Fingerabdrücken ausgeben" + +#~ msgid "Generate a new key pair" +#~ msgstr "Ein neues Schlüsselpaar erstellen" + +#~ msgid "Present a menu which enables you to do all key related tasks" +#~ msgstr "" +#~ "Bietet ein Menü, das Ihnen die Durchführung aller Schlüssel-relevanten " +#~ "Aufgaben ermöglicht" + +#~ msgid "Sign a public key with your secret key" +#~ msgstr "Einen öffentlichen Schlüssel mit Ihrem geheimen Schlüssel signieren" + +#~ 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" + +#~ msgid "Remove key from the public keyring" +#~ msgstr "Entferne Schlüssel vom öffentlichen Schlüsselring" + +#~ msgid "Remove key from the secret and public keyring" +#~ msgstr "Entferne Schlüssel vom geheimen und öffentlichen Schlüsselring" + +#~ 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" + +#~ msgid "Generate a revocation certificate for the complete key" +#~ msgstr "Generiere ein Widerrufszertifikat für den ganzen Schlüssel" + +#~ msgid "Generate a designated revocation certificate for a key" +#~ msgstr "Generiere ein vorgesehenes Widerrufszertifikat für einen Schlüssel" + +#~ msgid "Export all or the given keys from all keyrings" +#~ msgstr "" +#~ "Alle oder angegebene Schlüssel aus allen Schlüsselringen exportieren" + +#~ msgid "Same as --export but sends the keys to a keyserver" +#~ msgstr "" +#~ "Entspricht --export, aber sendet die Schlüssel an einen Schlüsselserver" + +#~ msgid "Same as --export, but exports the secret keys instead" +#~ msgstr "" +#~ "Entspricht --export, aber exportiert stattdessen die geheimen Schlüssel" + +#~ msgid "Import/merge keys" +#~ msgstr "Schlüssel importieren/mischen" + +#~ msgid "Import the keys with the given key IDs from a keyserver" +#~ msgstr "" +#~ "Schlüssel mit den angegebenen Schlüsselkennungen von einem " +#~ "Schlüsselserver importieren" + +#~ 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" + +#~ msgid "Search the keyserver for the given names" +#~ msgstr "Schlüsselserver nach den angegebenen Namen durchsuchen" + +#~ msgid "Do trust database maintenance" +#~ msgstr "Wartung der Vertrauensdatenbank durchführen" + +#~ msgid "Do trust database maintenance without user interaction" +#~ msgstr "" +#~ "Wartung der Vertrauensdatenbank ohne Benutzerbeteiligung durchführen" + +#~ msgid "Send the ownertrust values to stdout" +#~ msgstr "Eigentümervertrauenswerte auf Standardausgabe schicken" + +#~ 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" + +#~ msgid "Create signature caches in the keyring" +#~ msgstr "Signaturcache im Schlüsselring erstellen" + +#~ 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" + +#~ msgid "Print message digest of all algorithms for all given files or stdin" +#~ msgstr "" +#~ "Nachrichtenextrakt aller Algorithmen für alle angegebenen Dateien oder " +#~ "Standardeingabe ausgeben" + +#~ msgid "Emit specified number of random bytes of the given quality level" +#~ msgstr "" +#~ "Angegebene Anzahl zufälliger Bytes des gegebenen Qualitätsgrades ausgeben" + +#~ msgid "Display version and supported algorithms, and exit" +#~ msgstr "Version und unterstützte Algorithmen anzeigen und beenden" + +#~ msgid "Display warranty and exit" +#~ msgstr "Gewährleistung anzeigen und beenden" + +#~ msgid "Create ASCII armored output" +#~ msgstr "Erstelle ASCII-bewehrte Ausgabe" + +#~ 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 "Use specified key as the key to sign with" +#~ msgstr "Angegebenen Schlüssel als Schlüssel zum Signieren verwenden" + +#~ msgid "Use specified key as the default key to sign with" +#~ msgstr "Angegebenen Schlüssel als Standardschlüssel zum Signieren verwenden" + +#~ msgid "Encrypt for specified user id" +#~ msgstr "Für angegebene Benutzerkennung verschlüsseln" + +#~ msgid "Encrypt for specified user id, but hide the keyid of the key" +#~ msgstr "" +#~ "Für angegebene Benutzerkennung verschlüsseln, aberdie Schlüsselkennung " +#~ "des Schlüssels verbergen" + +#~ msgid "Use specified user id as default recipient" +#~ msgstr "Angegebene Benutzerkennung als Standardempfänger benutzen" + +#~ msgid "Use the default key as default recipient" +#~ msgstr "Standardschlüssel als Standardempfänger benutzen" + +#~ msgid "Reset --default-recipient and --default-recipient-self" +#~ msgstr "--default-recipient und --default-recipient-self zurücksetzen" + +#~ msgid "Give more information during processing" +#~ msgstr "Während der Verarbeitung zusätzliche Informationen ausgeben" + +#~ msgid "Compression level" +#~ msgstr "Komprimierungsgrad" + +#~ msgid "Use a different decompression method for BZIP2 compressed files" +#~ msgstr "" +#~ "Eine andere Dekomprimierungsmethode für BZIP2-komprimierte Dateien " +#~ "verwenden" + +#~ 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" + +#~ 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" + +#~ msgid "Don't make any changes (this is not completely implemented)" +#~ msgstr "" +#~ "Keine Änderungen vornehmen (dies ist nicht vollständig implementiert)" + +#~ msgid "Prompt before overwrite" +#~ msgstr "Vor Ãœberschreiben nachfragen" + +#~ msgid "Batch mode" +#~ msgstr "Stapelverarbeitungsmodus" + +#~ msgid "Don't use batch mode" +#~ msgstr "Stapelverarbeitungsmodus nicht verwenden" + +#~ msgid "Never write output to terminal" +#~ msgstr "Niemals Ausgaben aufs Terminal schreiben" + +#~ msgid "Assume yes on most questions" +#~ msgstr "Ja als Standardantwort annehmen" + +#~ msgid "Assume no on most questions" +#~ msgstr "Nein als Standardantwort annehmen" + +#~ msgid "Prompt for a certification level when making a key signature" +#~ msgstr "" +#~ "Nach einem Zertifizierungsgrad fragen, wenn eine Schlüsselsignatur " +#~ "erstellt wird" + +#~ msgid "Don't prompt for a certification level when making a key signature" +#~ msgstr "" +#~ "Nicht nach einem Zertifizierungsgrad fragen, wenn eine Schlüsselsignatur " +#~ "erstellt wird" + +#~ 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" + +#~ 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" + +#~ 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 "Select how to display key IDs" +#~ msgstr "Wählen Sie aus, wie Schlüsselkennungen angezeigt werden sollen" + +#~ msgid "Options for the keyserver" +#~ msgstr "Optionen für den Schlüsselserver" + +#~ msgid "Options for importing keys" +#~ msgstr "Optionen zum Importieren von Schlüsseln" + +#~ msgid "Options for exporting keys" +#~ msgstr "Optionen zum Exportieren von Schlüsseln" + +#~ msgid "Options for listing keys and signatures" +#~ msgstr "Optionen zum Auflisten von Schlüsseln und Signaturen" + +#~ msgid "Options for verifying signatures" +#~ msgstr "Optionen zum Ãœberprüfen von Signaturen" + +#~ 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" + +#~ msgid "Set the native character set" +#~ msgstr "Standardzeichensatz festlegen" + +#~ msgid "Assume that following command line arguments are given in UTF8" +#~ msgstr "" +#~ "Annehmen, das die folgenden Befehlszeilenargumente in UTF8 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" + +#~ msgid "Shortcut for '--options /dev/null'" +#~ msgstr "Abkürzung für '--options /dev/null'" + +#~ msgid "Write attribute subpackets to the specified file descriptor" +#~ msgstr "Attribut-Unterpakete auf angegebenen Dateideskriptor schreiben" + +#~ msgid "Include secret key comment packets when exporting secret keys" +#~ msgstr "" +#~ "Kommentarpakete aus geheimen Schlüsseln bei deren Export mit einschließen" + +#~ msgid "Don't include secret key comment packets when exporting secret keys" +#~ msgstr "" +#~ "Kommentarpakete aus geheimen Schlüsseln bei deren Export nicht mit " +#~ "einschließen" + +#~ msgid "Don't use a comment string" +#~ msgstr "Keinen Kommentar verwenden" + +#~ msgid "Include the version string in ASCII armored output" +#~ msgstr "Version in ASCII-bewehrte Ausgabe einfügen" + +#~ msgid "Don't include the version string in ASCII armored output" +#~ msgstr "Version nicht in ASCII-bewehrter Ausgabe einfügen" + +#~ msgid "Set the 'for your eyes only' flag in the message" +#~ msgstr "Die 'for your eyes only'-Markierung in der Nachricht setzen" + +#~ msgid "Clear the 'for your eyes only' flag in the message" +#~ msgstr "Die 'for your eyes only'-Markierung in der Nachricht löschen" + +#~ msgid "Create file with name as given in data" +#~ msgstr "Datei mit in den Daten enthaltenem Namen erstellen" + +#~ msgid "Don't create file with name as given in data" +#~ msgstr "Datei nicht mit in den Daten enthaltenem Namen erstellen" + +#~ msgid "Use specified cipher algorithm" +#~ msgstr "Benutze angegebenen Verschlüsselungsalgorithmus" + +#~ msgid "Use specified message digest algorithm" +#~ msgstr "Angegebenen Message-Digest-Algorithmus verwenden" + +#~ msgid "Use specified compression algorithm" +#~ msgstr "Benutze angegebenen Kompressionsalgorithmus" + +#~ msgid "Use specified message digest algorithm when signing a key" +#~ msgstr "" +#~ "Benutze angegebenen Message-Digest-Algorithmus zum Signieren eines " +#~ "Schlüssels" + +#~ msgid "Use specified cipher algorithm to protect secret keys" +#~ msgstr "" +#~ "Benutze angegebenen Verschlüsselungsalgorithmus zum Schutz geheimer " +#~ "Schlüssel" + +#~ msgid "Use specified digest algorithm to mangle the passphrases" +#~ msgstr "" +#~ "Benutze angegebenen Digest-Algorithmus zum Verstümmeln der Passwortsätze" + +#~ msgid "Selects how passphrases are mangled" +#~ msgstr "Auswahl, wie Passwortsätze verstümmelt werden" + +#~ msgid "Integrity protect secret keys by using a SHA-1 checksum" +#~ msgstr "Integrität geheimer Schlüssel mittels SHA-1-Prüfsumme schützen" + +#~ msgid "Never allow the use of specified cipher algorithm" +#~ msgstr "" +#~ "Niemals die Benutzung des angegebenen Verschlüsselungsalgorithmus zulassen" + +#~ msgid "Never allow the use of specified public key algorithm" +#~ msgstr "" +#~ "Niemals die Benutzung des angegebenen Algorithmus für öffentliche " +#~ "Schlüssel zulassen" + +#~ msgid "Do not verify each signature right after creation" +#~ msgstr "Nicht jede Signatur direkt nach der Erstellung verifizieren" + +#~ msgid "Automatically run the --check-trustdb command internally when needed" +#~ msgstr "" +#~ "Den Befehl --check-trustdb automatisch intern starten, falls erforderlich" + +#~ msgid "Never automatically run the --check-trustdb" +#~ msgstr "--check-trustdb niemals automatisch ausführen" + +#~ msgid "Do not put the recipient keyid into encrypted packets" +#~ msgstr "Empfänger-Schlüsselkennung nicht in verschlüsselte Pakete einfügen" + +#~ msgid "Put the recipient keyid into encrypted packets" +#~ msgstr "Empfänger-Schlüsselkennung in verschlüsselte Pakete einfügen" + +#~ 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" + +#~ msgid "Mangle From-field of email headers (default)" +#~ msgstr "From-Feld aus E-Mail-Kopfzeilen verstümmeln (Standard)" + +#~ msgid "Do not mangle From-field of email headers" +#~ msgstr "From-Feld aus E-Mail-Kopfzeilen nicht verstümmeln" + +#~ msgid "Try to use the GnuPG-Agent" +#~ msgstr "Versuche, den GnuPG-Agenten zu nutzen" + +#~ msgid "Do not try to use the GnuPG-Agent" +#~ msgstr "Nicht versuchen, den GnuPG-Agenten zu nutzen" + +#~ msgid "Force v3 signatures for signatures on data" +#~ msgstr "v3-Signaturen für Datensignaturen erzwingen" + +#~ msgid "Do not force v3 signatures for signatures on data" +#~ msgstr "Keine v3-Signaturen für Datensignaturen erzwingen" + +#~ msgid "Always use v4 key signatures even on v3 keys" +#~ msgstr "Stets v4-Schlüsselsignaturen verwenden (auch bei v3-Schlüsseln)" + +#~ msgid "Don't use v4 key signatures on v3 keys" +#~ msgstr "Keine v4-Schlüsselsignaturen mit v3-Schlüsseln verwenden" + +#~ msgid "Force the use of encryption with a modification detection code" +#~ msgstr "" +#~ "Benutzung der Verschlüsselung mit einem Veränderungserkennungscode " +#~ "erzwingen" + +#~ msgid "Disable the use of the modification detection code" +#~ msgstr "Benutzung des Veränderungserkennungscodes deaktivieren" + +#~ 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" + +#~ 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" + +#~ 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" + +#~ msgid "Do not fail if signature is older than key" +#~ msgstr "Nicht abbrechen, wenn die Signatur älter als der Schlüssel ist" + +#~ msgid "Allow subkeys that have a timestamp from the future" +#~ msgstr "Unterschlüssel erlauben, deren Zeitstempel in der Zukunft liegt" + +#~ msgid "Ignore CRC errors" +#~ msgstr "CRC-Fehler ignorieren" + +#~ msgid "Do not fail on MDC integrity protection failiure" +#~ msgstr "Kein Abbruch beim Versagen des MDC-Integritätsschutzes" + +#~ 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 "Release the locks every time a lock is no longer needed" +#~ msgstr "Sperren freigeben, sobald eine Sperre nicht mehr benötigt wird" + +#~ 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 "Suppress the initial copyright message" +#~ msgstr "Copyright-Meldung beim Start unterdrücken" + +#~ msgid "Suppress the warning about 'using insecure memory'" +#~ msgstr "Warnung über die Verwendung unsicheren Speichers unterdrücken" + +#~ 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 missing MDC integrity protection" +#~ msgstr "Warnung über fehlenden MDC-Integritätsschutz unterdrücken" + +#~ msgid "Refuse to run if GnuPG cannot get secure memory" +#~ msgstr "Nicht starten, wenn GnuPG keinen sicheren Speicher benutzen kann" + +#~ msgid "Do not refuse to run if GnuPG cannot get secure memory (default)" +#~ msgstr "" +#~ "Starten, obwohl GnuPG nicht im sicheren Speicher laufen kann (Standard)" + +#~ msgid "Assume the input data is not in ASCII armored format" +#~ msgstr "" +#~ "Voraussetzen, das die Eingabedaten nicht im ASCII-bewehrten Format " +#~ "vorliegen" + +#~ msgid "Do not add the default keyrings to the list of keyrings" +#~ msgstr "Standardschlüsselringe nicht der Schlüsselringliste hinzufügen" + +#~ msgid "Skip the signature verification step" +#~ msgstr "Verifizierung der Signatur überspringen" + +#~ msgid "Print key listings delimited by colons" +#~ msgstr "Schlüsselauflistungen mit Doppelpunkt getrennt ausgeben" + +#~ 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 "" +#~ "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 "Changes the output of the list commands to work faster" +#~ msgstr "Ändert die Ausgabe der List-Befehle für schnellere Abarbeitung" + +#~ 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" + +#~ 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 "Prompt for an expiration time" +#~ msgstr "Nach Ablaufzeit fragen" + +#~ msgid "Do not prompt for an expiration time" +#~ msgstr "Nicht nach einer Ablaufzeit fragen" + +#~ 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" + +#~ 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" + +#~ msgid "Remove a given entry from the --group list" +#~ msgstr "Angegebenen Eintrag aus der --group-Liste entfernen" + +#~ msgid "Remove all entries from the --group list" +#~ msgstr "Alle Einträge aus der --group-Liste entfernen" + +#~ 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 "Print annotated source" +#~ msgstr "Kommentierte Quelle ausgeben" + +#~ msgid "Do not print explanations" +#~ msgstr "Keine Erklärungen ausgeben" + +#~ msgid "Print tally" +#~ msgstr "Zähler ausgeben" + +#~ msgid "Display summary" +#~ msgstr "Zusammenfassung anzeigen" + +#~ msgid "No annotated source" +#~ msgstr "Keine kommentierte Quelle" + +#~ msgid "Print flat profile" +#~ msgstr "Flaches Profil ausgeben" + +#~ msgid "No flat profile" +#~ msgstr "Kein flaches Profil" + +#~ msgid "Print call graph" +#~ msgstr "Aufrufgraph ausgeben" + +#~ msgid "No call graph" +#~ msgstr "Kein Aufrufgraph" + +#~ msgid "Annotate to file" +#~ msgstr "Kommentare in Datei" + +#~ msgid "No tally" +#~ msgstr "Keine Zählung" + +#~ msgid "Suggest function ordering" +#~ msgstr "Funktionssortierung vorschlagen" + +#~ msgid "Suggest file ordering" +#~ msgstr "Dateisortierung vorschlagen" + +#~ msgid "Traditional mode" +#~ msgstr "Traditioneller Modus" + +#~ msgid "Set width of output" +#~ msgstr "Ausgabebreite festlegen" + +#~ msgid "Anotate every line" +#~ msgstr "Kommentiere jede Zeile" + +#~ msgid "Set demangling style" +#~ msgstr "Format für Entfernen der Zusatzinformation festlegen" + +#~ msgid "Supress static functions" +#~ msgstr "Unterdrücke statische Funktionen" + +#~ msgid "Ignore symbols not known to be functions" +#~ msgstr "Ignoriere nicht als Funktionen bekannte Symbole" + +#~ msgid "Line by line profiling" +#~ msgstr "Zeilenweise Profilieren" + +#~ msgid "Only propagate times for matching symbols" +#~ msgstr "Zeiten nur für passende Symbole propagieren" + +#~ msgid "Do not propagate times for matching symbols" +#~ msgstr "Zeiten für passende Symbole nicht propagieren" + +#~ msgid "Mention unused functions in flat profile" +#~ msgstr "Unbenutzte Funktionen im pauschalen Profil erwähnen" + +#~ msgid "Specify debugging options" +#~ msgstr "Debug-Optionen angeben" + +#~ msgid "Print summary" +#~ msgstr "Zusammenfassung ausgeben" + +#~ msgid "Action for devices" +#~ msgstr "Aktion für Gerätedateien" + +#~ msgid "Action for directories" +#~ msgstr "Aktion für Verzeichnisse" + +#~ msgid "Use pattern from file" +#~ msgstr "Muster aus Datei nutzen" + +#~ msgid "List compression information" +#~ msgstr "Komprimierungsinformation auflisten" + +#~ msgid "Do not save/restore filename" +#~ msgstr "Dateiname nciht (zurück)sichern" + +#~ msgid "Save/restore filename" +#~ msgstr "Dateiname (zurück)sichern" + +#~ msgid "Recurse directories" +#~ msgstr "Verzeichnisse rekursiv durchlaufen" + +#~ msgid "Display compression ratios" +#~ msgstr "Kompressionsrate anzeigen" + +#~ msgid "Use high compression setting" +#~ msgstr "Einstellung für hohe Kompression verwenden" + +#~ msgid "Help for the '%s' builtin" +#~ msgstr "Hilfe zur eingebauten Funktion '%s'" + +#~ msgid "A short summary of all builtin commands" +#~ msgstr "Kurze Zusammenfassung aller eingebauten Befehle" + +#~ msgid "Print effective group id" +#~ msgstr "Effektive Gruppenkennung ausgeben" + +#~ msgid "Print all group ids" +#~ msgstr "Alle Gruppenkennungen ausgeben" + +#~ msgid "Print real ID, not effective" +#~ msgstr "Reale, nicht effektive Kennung ausgeben" + +#~ msgid "Print effective user ID" +#~ msgstr "Effektive Benutzerkennung ausgeben" + +#~ msgid "Show group id of job" +#~ msgstr "Gruppenkennung des Jobs anzeigen" + +#~ msgid "Show commandname of each job" +#~ msgstr "Befehlsnamen eines jeden Jobs anzeigen" + +#~ msgid "Only show status for last job to be started" +#~ msgstr "Nur Status für zuletzt gestarteten Job anzeigen" + +#~ msgid "Search after end of screen" +#~ msgstr "Ãœber Bildschirmende hinaus suchen" + +#~ msgid "Disable automtic buffer allocation" +#~ msgstr "Automatische Pufferzuordnung deaktivieren" + +#~ msgid "Repaint from top" +#~ msgstr "von oben neu anzeigen" + +#~ msgid "Clear and repaint from top" +#~ msgstr "Löschen und von oben neu anzeigen" + +#~ msgid "Supress error for lacking terminal capability" +#~ msgstr "Fehler für fehlende Terminaleigenschaft unterdrücken" + +#~ msgid "Exit on second EOF" +#~ msgstr "Ende bei zweitem EOF" + +#~ msgid "Exit on EOF" +#~ msgstr "Bei Dateiende beenden" + +#~ msgid "Open non-regular files" +#~ msgstr "Nicht-reguläre Dateien öffnen" + +#~ msgid "Quit if file shorter than one screen" +#~ msgstr "Beenden, wenn die Datei kürzer als eine Bildschirmseite ist" + +#~ msgid "Hilight one search target" +#~ msgstr "Ein Suchziel hervorheben" + +#~ msgid "No search highlighting" +#~ msgstr "Keine Hervorhebung bei Suche" + +#~ msgid "Maximum backward scroll" +#~ msgstr "Maximum für Rückwärtsblättern" + +#~ msgid "Search ignores lowercase case" +#~ msgstr "Suche ignoriert Kleinschreibung" + +#~ msgid "Search ignores all case" +#~ msgstr "Suche ignoriert Gross-/Kleinschreibung " + +#~ msgid "Target line" +#~ msgstr "Zielzeile" + +#~ msgid "Display status column" +#~ msgstr "Statusspalte anzeigen" + +#~ msgid "Specify key bindings file" +#~ msgstr "Datei mit Tastaturbindungen angeben" + +#~ msgid "Verbose prompt" +#~ msgstr "Ausführlicher Prompt" + +#~ msgid "Display line number" +#~ msgstr "Zeilennummer anzeigen" + +#~ msgid "Display line number for each line" +#~ msgstr "Zeilennummer für jede Zeile anzeigen" + +#~ msgid "Log input to file" +#~ msgstr "Eingabe in Datei protokollieren" + +#~ msgid "Log to file, overwrite" +#~ msgstr "Protokoll in Datei, überschreiben" + +#~ msgid "Start at first occorance of pattern" +#~ msgstr "Start beim ersten Vorkommen des Musters" + +#~ msgid "Prompt string" +#~ msgstr "Prompt-Anzeige" + +#~ msgid "Silent mode" +#~ msgstr "Ruhiger Modus" + +#~ msgid "Completly silent mode" +#~ msgstr "Vollständig ruhiger Modus" + +#~ msgid "Display control chars" +#~ msgstr "Steuerzeichen anzeigen" + +#~ msgid "Display control chars, guess screen appearance" +#~ msgstr "Steuerzeichen anzeigen, Bildschirmdarstellung erraten" + +#~ msgid "Multiple blank lines sqeezed" +#~ msgstr "Mehrere Leerzeilen zusammengefasst" + +#~ msgid "Do not fold long lines" +#~ msgstr "Lange Zeilen nicht umbrechen" + +#~ msgid "Edit tag" +#~ msgstr "Kennzeichnung bearbeiten" + +#~ msgid "Set tag file" +#~ msgstr "Kennzeichnungsdatei festlegen" + +#~ msgid "Allow backspace and carriage return" +#~ msgstr "Rückschritt und Zeilenschaltung zulassen" + +#~ msgid "Allow backspace, tab and carriage return" +#~ msgstr "Rückschritt, Tab und Zeilenschaltung zulassen" + +#~ msgid "Highlight first unread line on new page" +#~ msgstr "Erste ungelesene Zeile auf neuer Seite hervorheben" + +#~ msgid "Highlight first unread line on any movement" +#~ msgstr "Erste ungelesene Zeile bei Verschiebung hervorheben" + +#~ msgid "Set tab stops" +#~ msgstr "Tab-Stopps festlegen" + +#~ msgid "No termcap init" +#~ msgstr "Keine termcap-Initialisierung" + +#~ msgid "No keypad init" +#~ msgstr "Keine Ziffernblock-Initialisierung" + +#~ msgid "Maximum forward scroll" +#~ msgstr "Maximum für Vorwärtsblättern" + +#~ msgid "Max scroll window" +#~ msgstr "Maximale Fenstergrösse für Blättern" + +#~ msgid "Set quote char" +#~ msgstr "Markierungszeichen festlegen" + +#~ msgid "Lines after EOF are blank" +#~ msgstr "Zeilen nach EOF sind leer" + +#~ msgid "Characters to scroll on left/right arrows" +#~ msgstr "Anzahl zu blätternde Zeichen bei Links-/Rechts-Pfeilen" + +#~ msgid "Set block size" +#~ msgstr "Blockgröße festlegen" + +#~ msgid "Select quoting style" +#~ msgstr "Markierungsstil auswählen" + +#~ msgid "Sort criteria" +#~ msgstr "Sortier-Kriterien" + +#~ msgid "Show time type" +#~ msgstr "Zeittyp anzeigen" + +#~ msgid "Select time style" +#~ msgstr "Zeitformat auswählen" + +#~ msgid "Assume tab stops at each COLS" +#~ msgstr "Tab-Stopp bei jeder COLS annehmen" + +#~ msgid "Assume screen width" +#~ msgstr "Angenommene Bildschirmbreite" + +#~ msgid "Warn about multiple inclusion" +#~ msgstr "bei mehrmaligen Einschluss warnen" + +#~ msgid "Environment before makefile" +#~ msgstr "Umgebung vor makefile" + +#~ msgid "Ignore errors" +#~ msgstr "Fehler ignorieren" + +#~ msgid "Continue after an error" +#~ msgstr "Fortsetzung nach Fehler" + +#~ msgid "Start when load drops" +#~ msgstr "Start, wenn die Systemlast sinkt" + +#~ msgid "Do not execute commands" +#~ msgstr "Keine Befehle ausführen" + +#~ msgid "Print database" +#~ msgstr "Datenbank ausgeben" + +#~ msgid "Question mode" +#~ msgstr "Fragemodus" + +#~ msgid "Eliminate implicit rules" +#~ msgstr "implizite Regeln beseitigen" + +#~ msgid "Don't continue after an error" +#~ msgstr "Keine Fortsetzung bei Fehlern" + +#~ msgid "Touch files, don't run commands" +#~ msgstr "Dateien ändern, keine Befehle ausführen" + +#~ msgid "Program section" +#~ msgstr "Programm-Sektion" + +#~ msgid "Syscall section" +#~ msgstr "Sektion zu Systemaufrufen" + +#~ msgid "Library section" +#~ msgstr "Bibliotheks-Sektion" + +#~ msgid "Device section" +#~ msgstr "Geräte-Sektion" + +#~ msgid "Games section" +#~ msgstr "Spiele-Sektion" + +#~ msgid "Misc section" +#~ msgstr "Sektion für sonstiges" + +#~ msgid "Admin section" +#~ msgstr "Adminstrations-Sektion" + +#~ msgid "Kernel section" +#~ msgstr "Kernel-Sektion" + +#~ msgid "Tcl section" +#~ msgstr "Tcl-Sektion" + +#~ msgid "New section" +#~ msgstr "Neue Sektion" + +#~ msgid "Local section" +#~ msgstr "Lokale Sektion" + +#~ msgid "Old section" +#~ msgstr "Alte Sektion" + +#~ msgid "Manpath" +#~ msgstr "Pfad für Handbuchseiten" + +#~ msgid "Pager" +#~ msgstr "Anzeigeprogramm" + +#~ msgid "Manual sections" +#~ msgstr "Handbuch-Sektionen" + +#~ msgid "Always reformat" +#~ msgstr "immer neuformatieren" + +#~ msgid "Debug" +#~ msgstr "Debug" + +#~ msgid "Debug and run" +#~ msgstr "Debug und Ausführung" + +#~ msgid "Show whatis information" +#~ msgstr "whatis-Information anzeigen" + +#~ msgid "Format only" +#~ msgstr "Nur Format" + +#~ msgid "Show apropos information" +#~ msgstr "apropos-Information anzeigen" + +#~ msgid "Search in all man pages" +#~ msgstr "In allen Handbuchseiten suchen" + +#~ msgid "Set system" +#~ msgstr "System festlegen" + +#~ msgid "Format for printing" +#~ msgstr "Druckformat" + +#~ msgid "Only print locations" +#~ msgstr "Nur Lokationen ausgeben" + +#~ msgid "Input is a file, use name and contents to determine mimetype" +#~ msgstr "" +#~ "Eingabe ist eine Datei, Namen und Inhalt zur mime-Typbestimmung benutzen" + +#~ msgid "Input is a file, use name to determine mimetype" +#~ msgstr "Eingabe ist eine Datei, Namen zur mime-Typbestimmung benutzen" + +#~ msgid "Input is a mimetype" +#~ msgstr "Eingabe ist ein mime-Typ" + +#~ msgid "Output mimetype" +#~ msgstr "mime-Typ ausgeben" + +#~ msgid "Output default action for mimetype" +#~ msgstr "Standardaktion für mime-Typ ausgeben" + +#~ msgid "Launch default action for each file" +#~ msgstr "Starte Standardakion für jede Datei" + +#~ msgid "Print messages about what the program is doing" +#~ msgstr "Nachrichten über den Programmablauf ausgeben" + +#~ msgid "Dump configuration file" +#~ msgstr "Konfigurationsdatei ausgeben" + +#~ msgid "Do not actually insert/remove module" +#~ msgstr "Modul nicht wirklich laden/entfernen" + +#~ msgid "Ignore install and remove commands in configuration file" +#~ msgstr "Installations- und Löschbefehle der Konfigurationsdatei ignorieren" + +#~ msgid "Ignore bogus module names" +#~ msgstr "gefälschte Modulnamen ignorieren" + +#~ msgid "Remove modules" +#~ msgstr "Module entfernen" + +#~ msgid "Ignore module interface version" +#~ msgstr "Modulschnittstellenversion ignorieren" + +#~ msgid "Restrict wildcards to specified directory" +#~ msgstr "Jokerzeichen auf angegebenes Verzeichnis beschränken" + +#~ msgid "Send error messages through syslog" +#~ msgstr "Fehlermeldungen per syslog senden" + +#~ msgid "List dependencies of module" +#~ msgstr "Modulabhängigkeiten auflisten" + +#~ msgid "Rename module" +#~ msgstr "Modul umbenennen" + +#~ msgid "Fail if inserting already loaded module" +#~ msgstr "Abbruch, wenn bereits geladenes Modul eingefügt werden soll" + +#~ msgid "Mount filesystems in fstab" +#~ msgstr "Dateisystems aus fstab einhängen" + +#~ msgid "Fork process for each mount" +#~ msgstr "Für jedes Einhängen neuen Prozess erzeugen" + +#~ msgid "Fake mounting" +#~ msgstr "Einhängen vortäuschen" + +#~ msgid "Add label to output" +#~ msgstr "Ausgabe mit Markierung versehen" + +#~ msgid "Do not write mtab" +#~ msgstr "keine mtab schreiben" + +#~ msgid "Read/Write mode" +#~ msgstr "Lese-/Schreib-Modus" + +#~ msgid "Dynamically change postprocessing" +#~ msgstr "Nachverarbeitung dynamisch ändern" + +#~ msgid "Skip frames to maintain A/V sync" +#~ msgstr "Rahmen überspringen, um A/V-Synchronisation zu erhalten" + +#~ msgid "Play in random order" +#~ msgstr "in zufälliger Reihenfolge spielen" + +#~ msgid "Full screen" +#~ msgstr "Vollbildschirm" + +#~ msgid "Set playlist" +#~ msgstr "Abspielliste einrichten" + +#~ msgid "Audio language" +#~ msgstr "Audio-Sprache" + +#~ msgid "Play audio from file" +#~ msgstr "Audio aus Datei spielen" + +#~ msgid "Set default CD-ROM drive" +#~ msgstr "Standard-CD-ROM-Gerät festlegen" + +#~ msgid "Set number of audio channels" +#~ msgstr "Anzahl der Audiokanäle festlegen" + +#~ msgid "Set start chapter" +#~ msgstr "Startkapitel festlegen" + +#~ msgid "Set default DVD-ROM drive" +#~ msgstr "Standard DVD-ROM-Gerät festlegen" + +#~ msgid "Set dvd viewing angle" +#~ msgstr "DVD-Betrachtungswinkel festlegen" + +#~ msgid "Force rebuilding index" +#~ msgstr "Index-Neuerstellung erzwingen" + +#~ msgid "Override framerate" +#~ msgstr "Frame-Rate überschreiben" + +#~ msgid "Build index if unavailable" +#~ msgstr "Index erstellen, wenn nicht vorhanden" + +#~ msgid "Load index from file" +#~ msgstr "Index aus Datei laden" + +#~ msgid "Force non-interleaved AVI parser" +#~ msgstr "Nicht verschachtelten AVI-Parser" + +#~ msgid "Rebuild index and save to file" +#~ msgstr "Index neu erstellen und in Datei speichern" + +#~ msgid "Seek to give time position" +#~ msgstr "Zeitposition suchen" + +#~ msgid "TV capture mode" +#~ msgstr "Tv-Capture-Modus" + +#~ msgid "Subtitle language" +#~ msgstr "Untertitel-Sprache" + +#~ msgid "Subtitle file" +#~ msgstr "Untertitel-Datei" + +#~ msgid "Handle subtitlefile as unicode" +#~ msgstr "Untertitel-Datei als Unicode behandeln" + +#~ msgid "Handle subtitlefile as utf8" +#~ msgstr "Untertitel-Datei als utf8 behandeln" + +#~ msgid "Make backup of each existing destination file" +#~ msgstr "Sicherung jeder existierenden Zieldatei erstellen" + +#~ msgid "Do not prompt before overwriting" +#~ msgstr "Keine Abfrage vor Ãœberschreiben" + +#~ msgid "Remove trailing slashes from source" +#~ msgstr "Angehängte / von der Quelle entfernen" + +#~ msgid "Target directory" +#~ msgstr "Zielverzeichnis" + +#~ msgid "Do not overwrite newer files" +#~ msgstr "Neuere Dateien nicht überschreiben" + +#~ msgid "Increment priority by specified number first" +#~ msgstr "Priorität zunächst um angegebene Zahl erhöhen" + +#~ msgid "Debug option" +#~ msgstr "Debug-Option" + +#~ msgid "Set regexp used to split input" +#~ msgstr "Zur Eingabetrennung benutzten regulären Ausdruck festlegen" + +#~ msgid "Edit files in-place" +#~ msgstr "Original-Dateien editieren" + +#~ msgid "Include path" +#~ msgstr "Include-Pfad" + +#~ msgid "Invoke CPP" +#~ msgstr "CPP aufrufen" + +#~ msgid "Open folder" +#~ msgstr "Ordner öffnen" + +#~ msgid "Open file" +#~ msgstr "Datei öffnen" + +#~ msgid "Initial set of keystrokes" +#~ msgstr "Startmenge der Tastendrücke" + +#~ msgid "Use function keys for commands" +#~ msgstr "Funktionstasten für Befehle nutzen" + +#~ msgid "Expand collections in FOLDER LIST display" +#~ msgstr "Sammlungen bei der Anzeige der VERZEICHNISLISTE erweitern" + +#~ msgid "Start with specified current message number" +#~ msgstr "Mit angegebener aktueller Nachrichtennummer starten" + +#~ msgid "Open folder read-only" +#~ msgstr "Ordner nur zum Lesen öffnen" + +#~ msgid "Set global configuration file" +#~ msgstr "Globale Konfigurationsdatei festlegen" + +#~ msgid "Enable suspention support" +#~ msgstr "Unterstützung für Suspension aktivieren" + +#~ msgid "Produce a sample global configuration file" +#~ msgstr "Ein Beispiel für eine globale Konfigurationsdatei erstellen" + +#~ msgid "Produce sample configuration file" +#~ msgstr "Beispiel-Konfigurationsdatei erstellen" + +#~ msgid "Set mail sort order" +#~ msgstr "Mail-Sortierordnung festlegen" + +#~ msgid "Config option" +#~ msgstr "Konfigurations-Option" + +#~ msgid "Audible ping" +#~ msgstr "Hörbares ping" + +#~ msgid "Adaptive ping" +#~ msgstr "Anpassendes ping" + +#~ msgid "Allow pinging a broadcast address" +#~ msgstr "Ping an eine Broadcast-Adresse erlauben" + +#~ msgid "Do not allow ping to change source address of probes" +#~ msgstr "Verbiete ping das Ändern der Quell-Adresse der Proben" + +#~ msgid "Stop after specified number of ECHO_REQUEST packets" +#~ msgstr "Stoppe nach der angegebenen Anzahl von ECHO_REQUEST-Paketen" + +#~ msgid "Set the SO_DEBUG option on the socket being used" +#~ msgstr "Die Option SO_DEBUG für den benutzten Socket festlegen" + +#~ msgid "Allocate and set 20 bit flow label on ECHO_REQUEST packets" +#~ msgstr "" +#~ "20-Bit-Fluss-Markierung für ECHO_REQUEST-Pakete zuweisen und festlegen" + +#~ msgid "Flood ping" +#~ msgstr "Ping-Flood" + +#~ msgid "Wait specified interval of seconds between sending each packet" +#~ msgstr "Warte angegebenes Sekundenintervall zwischen dem Senden der Pakete" + +#~ msgid "Set source address to specified interface address" +#~ msgstr "Quelladresse auf angegebene Schnittstellenadresse festlegen" + +#~ msgid "Send the specified number of packets without waiting for reply" +#~ msgstr "Angegebene Zahl von Paketen, ohne auf Antwort zu warten" + +#~ msgid "Suppress loopback of multicast packets" +#~ msgstr "Schleife bei Multicast-Paketen unterdrücken" + +#~ msgid "Numeric output only" +#~ msgstr "nur numerische Ausgabe" + +#~ msgid "Pad packet with empty bytes" +#~ msgstr "Packet mit leeren Bytes auffüllen" + +#~ msgid "Set Quality of Service -related bits in ICMP datagrams" +#~ msgstr "" +#~ "Auf 'Quality of Service'-bezogene Bits in ICMP-Datagrammen festlegen" + +#~ msgid "Record route" +#~ msgstr "Route aufzeichnen" + +#~ 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 "Specifies the number of data bytes to be sent" +#~ msgstr "Gibt die Anzahl zu sendender Bytes an" + +#~ msgid "Set socket buffer size" +#~ msgstr "Socketpuffergröße festlegen" + +#~ msgid "Set the IP Time to Live" +#~ msgstr "IP-Lebensdauer (TTL) festlegen" + +#~ msgid "Set special IP timestamp options" +#~ msgstr "Spezielle IP-Zeitstempeloptionen festlegen" + +#~ msgid "Select Path MTU Discovery strategy" +#~ msgstr "Wähle Strategie zur Erkennung der Pfad-MTU" + +#~ msgid "Print full user-to-user latency" +#~ msgstr "Volle Benutzer-zu-Benutzer-Latenz ausgeben" + +#~ 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" + +#~ msgid "Time to wait for a response, in seconds" +#~ msgstr "Zeit zum Warten auf eine Antwort, in Sekunden" + +#~ msgid "Select all" +#~ msgstr "Alle auswählen" + +#~ msgid "Invert selection" +#~ msgstr "Selektion umkehren" + +#~ msgid "Select all processes except session leaders and terminal-less" +#~ msgstr "" +#~ "Alle Prozesse mit Ausnahme der Sitzungsführer und terminal-less auswählen" + +#~ msgid "Select all processes except session leaders" +#~ msgstr "Alle Prozesse mit Ausnahme der Sitzungsführer auswählen" + +#~ msgid "Deselect all processes that do not fulfill conditions" +#~ msgstr "Alle Prozesse deselektieren, die nicht die Bedingungen erfüllen" + +#~ msgid "Select by command" +#~ msgstr "Auswahl per Befehl" + +#~ msgid "Select by group" +#~ msgstr "Auswahl per Gruppe" + +#~ msgid "Select by user" +#~ msgstr "Auswahl per Benutzer" + +#~ msgid "Select by group/session" +#~ msgstr "Auswahl per Gruppe/Sitzung" + +#~ msgid "Select by PID" +#~ msgstr "Auswahl per PID" + +#~ msgid "Select by parent PID" +#~ msgstr "Auswahl per Eltern-PID" + +#~ msgid "Select by session ID" +#~ msgstr "Auswahl per Sitzungskennung" + +#~ msgid "Select by tty" +#~ msgstr "Auswahl per tty" + +#~ msgid "Extra full format" +#~ msgstr "Zusätzliches Vollformat" + +#~ msgid "User defined format" +#~ msgstr "Benutzerdefiniertes Format" + +#~ msgid "Add column for security data" +#~ msgstr "Spalte für Sicherheitsdaten hinzufügen" + +#~ msgid "Full format" +#~ msgstr "Volles Format" + +#~ msgid "Jobs format" +#~ msgstr "Job-Format" + +#~ msgid "Do not show flags" +#~ msgstr "Keine Flags anzeigen" + +#~ msgid "Show hierarchy" +#~ msgstr "Hierarchie anzeigen" + +#~ msgid "Set namelist file" +#~ msgstr "namelist-Datei festlegen" + +#~ msgid "Wide output" +#~ msgstr "breite Ausgabe" + +#~ msgid "Show threads" +#~ msgstr "Threads anzeigen" + +#~ msgid "Execute argument as command" +#~ msgstr "Argument als Befehl ausführen" + +#~ msgid "Debug on" +#~ msgstr "Debug einschalten" + +#~ msgid "Ignore environment variables" +#~ msgstr "Umgebungsvariablen ignorieren" + +#~ msgid "Interactive mode after executing commands" +#~ msgstr "Interaktiver Modus nach Ausführung der Befehle" + +#~ msgid "Enable optimizations" +#~ msgstr "Optimierungen aktivieren" + +#~ msgid "Division control" +#~ msgstr "Bereichskontrolle" + +#~ msgid "Warning control" +#~ msgstr "Steuerung für Warnungen" + +#~ msgid "Ignore first line of input" +#~ msgstr "Erste Zeile der Eingabe ignorieren" + +#~ msgid "Set prompt command" +#~ msgstr "Prompt-Befehl festlegen" + +#~ msgid "Export variable to subprocess" +#~ msgstr "Variable an Unterprozess exportieren" + +#~ msgid "Make variable scope global" +#~ msgstr "Geltungsbereich der Variablen global machen" + +#~ msgid "Make variable scope local" +#~ msgstr "Geltungsbereich der Variablen lokal machen" + +#~ 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" + +#~ msgid "Do not export variable to subprocess" +#~ msgstr "Variable nicht an Unterprozess exportieren" + +#~ msgid "Force following parameters to be process ID's (The default)" +#~ msgstr "" +#~ "Erzwinge die Interpretation der folgenden Parameter als Prozesskennungen " +#~ "(Standard)" + +#~ msgid "Force following parameters to be interpreted as process group ID's" +#~ msgstr "" +#~ "Erzwinge die Interpretation der folgenden Parameter als " +#~ "Prozessgruppenkennungen" + +#~ msgid "Force following parameters to be interpreted as user names" +#~ msgstr "" +#~ "Erzwinge die Interpretation der folgenden Parameter als Benutzernamen" + +#~ msgid "Ignore errors from non-empty directories" +#~ msgstr "Fehler aus nicht leeren Verzeichnissen ignorieren" + +#~ msgid "Remove each component of path" +#~ msgstr "Jede Komponente des Pfades entfernen" + +#~ msgid "Unlink directory (Only by superuser)" +#~ msgstr "Verzeichnis trennen (nur durch root)" + +#~ msgid "Never prompt before removal" +#~ msgstr "Vor Löschung niemals fragen" + +#~ msgid "Prompt before removal" +#~ msgstr "Vor Löschung nachfragen" + +#~ msgid "Recursively remove subdirectories" +#~ msgstr "Unterverzeichnisse rekursiv entfernen" + +#~ msgid "Explain what is done" +#~ msgstr "Erläutere was geschieht" + +#~ msgid "List of rpm configuration files" +#~ msgstr "Liste der rpm-Konfigurationsdateien" + +#~ msgid "Pipe output through specified command" +#~ msgstr "Ausgabe durch angegebenen Befehl schicken" + +#~ msgid "Specify directory for rpm database" +#~ msgstr "Verzeichnis für rpm-Datenbank angeben" + +#~ 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 "Kanji code-set" +#~ msgstr "Kanji-Codeset" + +#~ msgid "Verbose mode without message" +#~ msgstr "Ausführlicher Modus ohne Nachricht" + +#~ msgid "Compiler debug mode" +#~ msgstr "Compiler-Debug-Modus" + +#~ msgid "" +#~ "Preserves modification times, access times, and modes from the original " +#~ "file" +#~ msgstr "Erhält Modifizierungs- und Zugriffszeit und Modi der Originaldatei" + +#~ msgid "Recursively copy" +#~ msgstr "Rekursive Kopie" + +#~ msgid "Encyption program" +#~ msgstr "Verschlüsselungsprogramm" + +#~ msgid "Disable all GNU extensions" +#~ msgstr "Alle GNU-Erweiterungen deaktivieren" + +#~ msgid "Use extended regexp" +#~ msgstr "Erweiterte reguläre Ausdrücke benutzen" + +#~ msgid "Consider files as separate" +#~ msgstr "Siehe Dateien als separat an" + +#~ msgid "Use minimal IO buffers" +#~ msgstr "Minimale IO-Puffer benutzen" + +#~ 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 "Make font bold" +#~ msgstr "Zeichensatz fett" + +#~ msgid "Test if variable is defined" +#~ msgstr "Test, ob Variable definiert ist" + +#~ msgid "Ignore leading blanks" +#~ msgstr "Führende Leerzeichen ignorieren" + +#~ msgid "Consider only blanks and alphanumerics" +#~ msgstr "Nur Leerzeichen und alfanumerische Zeichen beachten" + +#~ msgid "Compare general numeric value" +#~ msgstr "Vergleiche generelle numerische Werte" + +#~ msgid "Consider only printable" +#~ msgstr "Beachte nur druckbare Zeichen" + +#~ msgid "Compare month names" +#~ msgstr "Vergleiche Monatsnamen" + +#~ msgid "Compare string numerical value" +#~ msgstr "Vergleiche numerische Werte als Zeichenkette" + +#~ msgid "Reverse results" +#~ msgstr "Ergebnisse umkehren" + +#~ msgid "Only check if sorted" +#~ msgstr "Nur auf Sortierung testen" + +#~ msgid "Define key" +#~ msgstr "Schlüssel definieren" + +#~ msgid "Stabilize sort" +#~ msgstr "Sort stabilisieren" + +#~ msgid "Field separator" +#~ msgstr "Feldtrenner" + +#~ msgid "Output only first of equal lines" +#~ msgstr "Nur die ersten von gleichen Zeilen ausgeben" + +#~ msgid "Lines end with 0 byte" +#~ msgstr "Zeilen enden mit Null-Byte" + +#~ msgid "Enables forwarding of the authentication agent" +#~ msgstr "Aktiviert Weiterleitung des Authentifizierungs-Agenten" + +#~ msgid "Allow remote host to connect to local forwarded ports" +#~ msgstr "" +#~ "Entfernten Rechnern Verbindung zu lokal weitergeleiteten Ports erlauben" + +#~ msgid "Smartcard device" +#~ msgstr "Smartcard-Gerät" + +#~ msgid "MAC algorithm" +#~ msgstr "MAC-Algorithmus" + +#~ msgid "Do not execute remote command" +#~ msgstr "Entfernten Befehl nicht ausführen" + +#~ msgid "Subsystem" +#~ msgstr "Subsystem" + +#~ msgid "Disable pseudo-tty allocation" +#~ msgstr "Pseudo-tty-Zuordnung deaktivieren" + +#~ msgid "Disable X11 forwarding" +#~ msgstr "X11-Weiterleitung deaktivieren" + +#~ msgid "Enable X11 forwarding" +#~ msgstr "X11-Weiterleitung aktivieren" + +#~ msgid "Locally forwarded ports" +#~ msgstr "Lokal weitergeleitete Ports" + +#~ msgid "Remotely forwarded ports" +#~ msgstr "entfernt weitergeleitete Ports" + +#~ msgid "Dynamic port forwarding" +#~ msgstr "Dynamische Port-Weiterleitung" + +#~ msgid "Pass -f to the shell" +#~ msgstr "-f an die Shell weitergeben" + +#~ msgid "Preserve environment" +#~ msgstr "Umgebung erhalten" + +#~ msgid "Append archive to archive" +#~ msgstr "Archiv an Archiv anhängen" + +#~ msgid "Create archive" +#~ msgstr "Archiv erstellen" + +#~ msgid "Compare archive and filesystem" +#~ msgstr "Archiv und Dateisystem vergleichen" + +#~ msgid "Delete from archive" +#~ msgstr "Aus Archiv löschen" + +#~ msgid "Append files to archive" +#~ msgstr "Dateien an Archiv anhängen" + +#~ msgid "Append new files" +#~ msgstr "Neue Dateien anfügen" + +#~ msgid "Extract from archive" +#~ msgstr "Aus Archiv extrahieren" + +#~ msgid "Keep access time" +#~ msgstr "Zugriffszeit behalten" + +#~ msgid "Reblock while reading" +#~ msgstr "Während des Lesens umblocken" + +#~ msgid "Archive is local" +#~ msgstr "Archiv ist lokal" + +#~ msgid "Run script at end of tape" +#~ msgstr "Bei Bandende Skript ausführen" + +#~ msgid "Use old incremental GNU format" +#~ msgstr "altes inkrementelles GNU-Format benutzen" + +#~ msgid "Use new incremental GNU format" +#~ msgstr "Neues inkrementelles GNU-Format benutzen" + +#~ msgid "Derefrerence symlinks" +#~ msgstr "Symbolische Links dereferenzieren" + +#~ msgid "Ignore zero block in archive" +#~ msgstr "Nullblock im Archiv ignorieren" + +#~ msgid "Filter through bzip2" +#~ msgstr "Durch bzip2 filtern" + +#~ msgid "Don't exit on unreadable files" +#~ msgstr "Bei unlesbaren Dateien nicht abbrechen" + +#~ msgid "Don't overwrite" +#~ msgstr "Nicht überschreiben" + +#~ msgid "Stay in local filesystem" +#~ msgstr "Im lokalen Dateisystem bleiben" + +#~ msgid "Don't extract modification time" +#~ msgstr "Modifizierungszeit nicht extrahieren" + +#~ msgid "Multi volume archive" +#~ msgstr "Mehr-Volume-Archiv" + +#~ msgid "Use V7 format" +#~ msgstr "V7-Format verwenden" + +#~ msgid "Extract to stdout" +#~ msgstr "Auf stdout extrahieren" + +#~ msgid "Don't strip leading /" +#~ msgstr "Führenden / nicht entfernen" + +#~ msgid "Preserve all permissions and do not sort file arguments" +#~ msgstr "Alle Rechte bewahren und Datei-Argumente nicht sortieren" + +#~ msgid "Show record number" +#~ msgstr "Satznummer anzeigen" + +#~ msgid "Preserve file ownership" +#~ msgstr "Dateieigentümer erhalten" + +#~ msgid "-T has null-terminated names" +#~ msgstr "-T enthält null-terminierte Namen" + +#~ msgid "Print total bytes written" +#~ msgstr "Gesamtzahl geschriebener Bytes ausgeben" + +#~ msgid "Ask for confirmation" +#~ msgstr "Nach Bestätigung fragen" + +#~ msgid "Filter through compress" +#~ msgstr "durch compress filtern" + +#~ msgid "Filter through gzip" +#~ msgstr "durch gzip filtern" + +#~ msgid "Negate expression" +#~ msgstr "Ausdruck negieren" + +#~ msgid "Logical and" +#~ msgstr "Logisches Und" + +#~ msgid "Logical or" +#~ msgstr "Logisches Oder" + +#~ msgid "String length is non-zero" +#~ msgstr "Länge der Zeichenkette ist nicht 0" + +#~ msgid "String length is zero" +#~ msgstr "Länge der Zeichenkette ist 0" + +#~ msgid "Strings are equal" +#~ msgstr "Zeichenketten sind gleich" + +#~ msgid "Strings are not equal" +#~ msgstr "Zeichenketten sind nicht gleich" + +#~ msgid "Integers are equal" +#~ msgstr "Ganzzahlen sind gleich" + +#~ msgid "Left integer larger than or equal to right integer" +#~ msgstr "Linke Ganzzahl ist größer oder gleich zur rechten Ganzzahl" + +#~ msgid "Left integer larger than right integer" +#~ msgstr "Linke Ganzzahl ist größer als rechte Ganzzahl" + +#~ msgid "Left integer less than or equal to right integer" +#~ msgstr "Linke Ganzzahl ist kleiner oder gleich als rechte Ganzzahl" + +#~ msgid "Left integer less than right integer" +#~ msgstr "Linke Ganzzahl ist kleiner als rechte Ganzzahl" + +#~ msgid "Left integer not equal to right integer" +#~ msgstr "linke Ganzzahl von rechter verschieden" + +#~ msgid "Left file equal to right file" +#~ msgstr "Linke Datei gleich der rechten Datei" + +#~ msgid "Left file newer than right file" +#~ msgstr "Linke Datei jünger als rechte Datei" + +#~ msgid "Left file older than right file" +#~ msgstr "Linke Datei älter als rechte Datei" + +#~ msgid "File is block device" +#~ msgstr "Datei ist ein Block-Gerät" + +#~ msgid "File is character device" +#~ msgstr "Datei ist ein Zeichengerät" + +#~ msgid "File is directory" +#~ msgstr "Datei ist ein Verzeichnis" + +#~ msgid "File exists" +#~ msgstr "Datei ist vorhanden" + +#~ msgid "File is regular" +#~ msgstr "reguläre Datei" + +#~ msgid "File is set-group-ID" +#~ msgstr "Datei ist set-group-ID" + +#~ msgid "File is symlink" +#~ msgstr "Datei ist symbolischer Link" + +#~ msgid "File owned by effective group ID" +#~ msgstr "Datei gehört effektiver Gruppenkennung" + +#~ msgid "File has sticky bit set" +#~ msgstr "Sticky-Bit der Datei ist gesetzt" + +#~ msgid "File owned by effective user ID" +#~ msgstr "Datei gehört zu effektiver Benutzerkennung" + +#~ msgid "File is named pipe" +#~ msgstr "Datei ist eine benannte Pipe" + +#~ msgid "File is readable" +#~ msgstr "Datei ist lesbar" + +#~ msgid "File size is non-zero" +#~ msgstr "Dateigröße ist nicht 0" + +#~ msgid "File is socket" +#~ msgstr "Datei ist Socket" + +#~ msgid "FD is terminal" +#~ msgstr "FD ist ein Terminal" + +#~ msgid "File set-user-ID bit is set" +#~ msgstr "set-user-ID-Bit der Datei ist gesetzt" + +#~ msgid "File is writable" +#~ msgstr "Datei ist schreibbar" + +#~ msgid "Toggle command line/program name" +#~ msgstr "Befehlszeile/Programmname umschalten" + +#~ msgid "Update interval" +#~ msgstr "Aktualisierungs-Intervall" + +#~ msgid "Toggle idle processes" +#~ msgstr "Anzeige wartender Prozesse umschalten" + +#~ msgid "Maximium iterations" +#~ msgstr "Maximale Wiederholungen" + +#~ msgid "Monitor effective UID" +#~ msgstr "tatsächliche UID beobachten" + +#~ msgid "Monitor user" +#~ msgstr "Benutzer beobachten" + +#~ msgid "Monitor PID" +#~ msgstr "PID beobachten" + +#~ msgid "Secure mode" +#~ msgstr "Sicherer Modus" + +#~ msgid "Cumulative mode" +#~ msgstr "Kumulativer Modus" + +#~ msgid "Change access time" +#~ msgstr "Zugriffszeit ändern" + +#~ msgid "Change modification time" +#~ msgstr "Modifikationszeit ändern" + +#~ msgid "Use this files times" +#~ msgstr "Diese Dateizeiten verwenden" + +#~ msgid "Display all currently defined trap handlers" +#~ msgstr "Alle derzeit definierten Trap-Handler anzeigen" + +#~ msgid "Print all possible definitions of the specified name" +#~ msgstr "Alle möglichen Definitionen des angegebenen Namens ausgeben" + +#~ msgid "Supress function and builtin lookup" +#~ msgstr "Unterdrücke Nachschlagen von Funktionen und eingebauten Befehlen" + +#~ msgid "Print path to command, or nothing if name is not a command" +#~ msgstr "Pfad zu Befehl ausgeben oder nichts, wenn es kein Befehl ist" + +#~ msgid "Set or get all current limits" +#~ msgstr "Festlegen/Anzeigen aller aktuellen Begrenzungen" + +#~ msgid "Maximum size of core files created" +#~ msgstr "Maximalgröße von erstellten core-Dateien" + +#~ msgid "Maximum size of a process's data segment" +#~ msgstr "Maximalgröße des Datensegmentes eines Prozesses" + +#~ msgid "Maximum size of files created by the shell" +#~ msgstr "Maximalgröße der von der Shell angelegten Dateien" + +#~ msgid "Maximum size that may be locked into memory" +#~ msgstr "Maximalgröße, die im Speicher gesperrt werden kann" + +#~ msgid "Maximum resident set size" +#~ msgstr "Maximale Größe des Programms im Arbeitsspeicher" + +#~ msgid "Maximum number of open file descriptors" +#~ msgstr "Maximale Zahl offener Datei-Deskriptoren" + +#~ msgid "Maximum stack size" +#~ msgstr "Maximale Stackgröße" + +#~ msgid "Maximum amount of cpu time in seconds" +#~ msgstr "Maximalanzahl CPU-Zeit in Sekunden" + +#~ msgid "Maximum number of processes available to a single user" +#~ msgstr "" +#~ "Maximale Anzahl an Prozessen, die für einen einzelnen Benutzer verfügbar " +#~ "sind" + +#~ msgid "Maximum amount of virtual memory available to the shell" +#~ msgstr "Maximaler virtueller Speicher, der der Shell zur Verfügung steht" + +#~ msgid "Unmount without writing in /etc/mtab" +#~ msgstr "Aushängen ohne Aktualisierung von /etc/mtab" + +#~ 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" + +#~ 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 "Don't call the /sbin/umount. helper even if it exists" +#~ msgstr "" +#~ "/sbin/umount.-Hilfsprogramm nicht aufrufen, auch wenn es " +#~ "existiert" + +#~ msgid "Unmount all of the file systems described in /etc/mtab" +#~ msgstr "Alle in /etc/mtab definierten Dateisysteme aushängen" + +#~ msgid "Actions should only be taken on file systems of the specified type" +#~ msgstr "" +#~ "Aktionen sollen nur auf Dateisysteme des angegebenen Typs 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" + +#~ msgid "Force unmount (in case of an unreachable NFS system)" +#~ msgstr "unmount erzwingen (falls ein NFS-System nicht erreichbar ist)" + +#~ 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 "Print kernel name" +#~ msgstr "Kernel-Name ausgeben" + +#~ msgid "Print network node hostname" +#~ msgstr "Rechnernamen des Netzwerkknotens ausgeben" + +#~ msgid "Print kernel release" +#~ msgstr "Kernel-Release ausgeben" + +#~ msgid "Print kernel version" +#~ msgstr "Kernel-Version ausgeben" + +#~ msgid "Print machine name" +#~ msgstr "Maschinenname ausgeben" + +#~ msgid "Print harware platform" +#~ msgstr "Hardware-Plattform ausgeben" + +#~ msgid "Only print duplicates" +#~ msgstr "Nur doppelte Zeilen ausgeben" + +#~ msgid "Remove non-duplicate lines" +#~ msgstr "Nicht doppelte Zeilen entfernen" + +#~ msgid "Avoid comparing first N fields" +#~ msgstr "Erste N Felder nicht vergleichen" + +#~ msgid "Case insensitive" +#~ msgstr "Groß-/Klein-Schreibung nicht unterscheiden" + +#~ msgid "Avoid comparing first N characters" +#~ msgstr "Erste N Zeichen nicht vergleichen" + +#~ msgid "Only print unique lines" +#~ msgstr "Nur einmalige Zeilen ausgeben" + +#~ msgid "Compare only specified number of characters" +#~ msgstr "Nur angegebene Anzahl Zeichen vergleichen" + +#~ msgid "Valgrind-ise children" +#~ msgstr "Kinder Valgrind-isieren" + +#~ msgid "Log to file descriptor" +#~ msgstr "Log auf Datei-Deskriptor ausgeben" + +#~ msgid "Log to socket" +#~ msgstr "Log auf Socket ausgeben" + +#~ msgid "Callers in stack trace" +#~ msgstr "Aufrufe in der Stackverfolgung" + +#~ msgid "Stop showing errors if too many" +#~ msgstr "Bei zu vielen Fehlern Anzeige beenden" + +#~ msgid "Continue trace below main()" +#~ msgstr "Trace unter main() fortsetzen" + +#~ msgid "Supress errors from file" +#~ msgstr "Fehler aus Datei unterdrücken" + +#~ msgid "Print suppressions for detected errors" +#~ msgstr "Unterdrückungen für entdeckte Fehler ausgeben" + +#~ msgid "Start debugger on error" +#~ msgstr "Bei Fehler Debugger starten" + +#~ msgid "Debugger command" +#~ msgstr "Debugger-Befehl" + +#~ msgid "Show reachable leaked memory" +#~ msgstr "Aufgetretenes Speicherleck anzeigen" + +#~ 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" + +#~ msgid "Set size of freed memory pool" +#~ msgstr "Größe des freigegebenen Speicherpools festlegen" + +#~ 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" + +#~ msgid "Type of L1 instruction cache" +#~ msgstr "Typ des L1-Anweisungs-Cache" + +#~ msgid "Type of L1 data cache" +#~ msgstr "Typ des L1-Daten-Cache" + +#~ msgid "Type of L2 cache" +#~ msgstr "Typ des L2-Cache" + +#~ msgid "Specify a function that allocates memory" +#~ msgstr "Eine Funktion angeben, die Speicher zuordnet" + +#~ msgid "Print byte counts" +#~ msgstr "Anzahl Bytes ausgeben" + +#~ msgid "Print character counts" +#~ msgstr "Anzahl Buchstaben ausgeben" + +#~ msgid "Print newline counts" +#~ msgstr "Anzahl Zeilenendzeichen ausgeben" + +#~ msgid "Print length of longest line" +#~ msgstr "Länge der längsten Zeile ausgeben" + +#~ msgid "Dont print header" +#~ msgstr "Kopfzeile nicht ausgeben" + +#~ msgid "Short format" +#~ msgstr "Kurzes Format" + +#~ msgid "Toggle printing of remote hostname" +#~ msgstr "Anzeige des entfernten Rechners ein/ausschalten" + +#~ msgid "Go to background immediately after startup" +#~ msgstr "Direkt nach Start im Hintergrund arbeiten" + +#~ msgid "Log all messages to logfile" +#~ msgstr "Alle Nachrichten in Logdatei speichern" + +#~ msgid "Append all messages to logfile" +#~ msgstr "Alle Nachrichten an Logdatei anhängen" + +#~ msgid "Turn on debug output" +#~ msgstr "Debug-Ausgabe aktivieren" + +#~ msgid "Turn off verbose without being completely quiet" +#~ msgstr "Ausführlichen Modus abschalten, jedoch nicht vollkommen ruhig" + +#~ msgid "Read URLs from file" +#~ msgstr "URLs aus Datei lesen" + +#~ msgid "Force input to be treated as HTML" +#~ msgstr "Erzwinge die Behandlung der Eingabe als HTML" + +#~ msgid "Prepend string to relative links" +#~ msgstr "Zeichenkette vor relative Links stellen" + +#~ msgid "Bind address on local machine" +#~ msgstr "Adresse an lokale Maschine binden" + +#~ msgid "Set number of retries to number" +#~ msgstr "Anzahl der Versuche auf Anzahl festlegen" + +#~ msgid "Concatenate output to file" +#~ msgstr "Ausgabe an Datei anfügen" + +#~ msgid "Never overwrite files with same name" +#~ msgstr "Dateien gleichen Namens niemals überschreiben" + +#~ msgid "Continue getting a partially-downloaded file" +#~ msgstr "Herunterladen einer teilweise übertragenen Datei fortsetzen" + +#~ msgid "Select progress meter type" +#~ msgstr "Fortschrittsanzeigentyp auswählen" + +#~ msgid "Turn on time-stamping" +#~ msgstr "Zeitstempel aktivieren" + +#~ msgid "Print the headers/responses sent by servers" +#~ msgstr "Von Servern gesendete Kopfzeilen/Antworten ausgeben" + +#~ msgid "Do not download the pages, just check that they are there" +#~ msgstr "Seiten nicht herunterladen, nur auf Verfügbarkeit testen" + +#~ msgid "Set the network timeout" +#~ msgstr "Zeitüberschreitung für Netzwerk festlegen" + +#~ msgid "Set the DNS lookup timeout" +#~ msgstr "Zeitüberschreitung für DNS-Abfragen festlegen" + +#~ msgid "Set the connect timeout" +#~ msgstr "Verbindungszeitüberschreitung festlegen" + +#~ msgid "Set the read (and write) timeout" +#~ msgstr "Lese- (und Schreib-)Zeitüberschreitung festlegen" + +#~ msgid "Limit the download speed" +#~ msgstr "Herunterladegeschwindigkeit begrenzen" + +#~ msgid "Wait the specified number of seconds between the retrievals" +#~ msgstr "angegebene Sekundenanzahl zwischen den Abrufen warten" + +#~ msgid "Wait time between retries" +#~ msgstr "Wartezeiten zwischen Abrufversuchen" + +#~ msgid "Wait random amount of time between retrievals" +#~ msgstr "Zufällige Zeitspanne zwischen Abrufen warten" + +#~ msgid "Toggle proxy support" +#~ msgstr "Proxy-Unterstützung ein/ausschalten" + +#~ msgid "Specify download quota for automatic retrievals" +#~ msgstr "Herunterladequote für automatische Abrufe festlegen" + +#~ msgid "Turn off caching of DNS lookups" +#~ msgstr "Zwischenspeicherung von DNS-Abfragen abschalten" + +#~ 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 "Do not create a hierarchy of directories" +#~ msgstr "Keine Verzeichnis-Hierarchie erstellen" + +#~ msgid "Force creation of a hierarchy of directories" +#~ msgstr "Erstellung einer Verzeichnis-Hierarchie erzwingen" + +#~ msgid "Disable generation of host-prefixed directories" +#~ msgstr "Generierung von Verzeichnissen mit Host-Prefix deaktivieren" + +#~ msgid "Use the protocol name as a directory component" +#~ msgstr "Protokollname als Verzeichnisbestandteil benutzen" + +#~ msgid "Ignore specified number of directory components" +#~ msgstr "Angegebene Anzahl von Verzeichniskomponenten ignorieren" + +#~ msgid "Set directory prefix" +#~ msgstr "Verzeichnis-Präfix festlegen" + +#~ msgid "Force html files to have html extension" +#~ msgstr "html-Erweiterung für html-Dateien erzwingen" + +#~ msgid "Specify the http username" +#~ msgstr "http-Benutzername angeben" + +#~ msgid "Specify the http password" +#~ msgstr "http-Passwort angeben" + +#~ msgid "Disable server-side cache" +#~ msgstr "Server-seitigen Cache deaktivieren" + +#~ msgid "Load cookies from file" +#~ msgstr "Cookies aus Datei laden" + +#~ msgid "Save cookies to file" +#~ msgstr "Cookies in Datei speichern" + +#~ msgid "Save session cookies" +#~ msgstr "Session-Cookies speichern" + +#~ msgid "Ignore 'Content-Length' header" +#~ msgstr "Kopfzeile für 'Content-Length' ignorieren" + +#~ msgid "Define an additional-header to be passed to the HTTP servers" +#~ msgstr "" +#~ "Zusätzliche Kopfzeilen definieren, die an HTTP-Server geschickt werden" + +#~ msgid "Specify the proxy username" +#~ msgstr "Proxy-Benutzername angeben" + +#~ msgid "Specify the proxy password" +#~ msgstr "Proxy-Passwort angeben" + +#~ msgid "Set referer URL" +#~ msgstr "Referer-URL festlegen" + +#~ msgid "Save the headers sent by the HTTP server" +#~ msgstr "Vom HTTP-Server gesendete Kopfzeilen speichern" + +#~ msgid "Identify as agent-string" +#~ msgstr "Zeichenkette für User-Agent festlegen" + +#~ 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 "Turn off keep-alive for http downloads" +#~ msgstr "keep-alive-Option für http-Abrufe abschalten" + +#~ msgid "Don't remove the temporary .listing files generated" +#~ msgstr "Die temporären .listing-Dateien nicht entfernen" + +#~ msgid "Turn off FTP globbing" +#~ msgstr "FTP-Mustererkennung abschalten" + +#~ msgid "Use the passive FTP retrieval scheme" +#~ msgstr "Passiven FTP-Modus benutzen" + +#~ msgid "Traverse symlinks and retrive pointed-to files" +#~ msgstr "Symlinks folgen und die Dateien abrufen" + +#~ msgid "Turn on recursive retrieving" +#~ msgstr "Rekursiven Abruf aktivieren" + +#~ msgid "Specify recursion maximum depth" +#~ msgstr "Maximale Rekursionstiefe angeben" + +#~ msgid "Delete every single file downloaded" +#~ msgstr "Jede einzelne heruntergeladene Datei löschen" + +#~ msgid "" +#~ "Convert the links in the document to make them suitable for local viewing" +#~ msgstr "Links im Dokument für die lokale Anzeige konvertieren" + +#~ msgid "Back up the original version" +#~ msgstr "Sicherung der Original-Version" + +#~ msgid "Turn on options suitable for mirroring" +#~ msgstr "Optionen aktivieren, die zum Spiegeln geeignet sind" + +#~ 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" + +#~ msgid "Turn on strict parsing of HTML comments" +#~ msgstr "Strenge Auswertung von HTML-Kommentaren aktivieren" + +#~ msgid "Comma-separated lists of file name suffixes or patterns to accept" +#~ msgstr "" +#~ "Komma-getrennte Liste von Dateinamen-Endungen oder Mustern, die " +#~ "akzeptiert werden" + +#~ 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" + +#~ msgid "Set domains to be followed" +#~ msgstr "Domain-Namen angeben, die beachtet werden" + +#~ msgid "Specify the domains that are not to be followed" +#~ msgstr "Domain-Namen angeben, die ignoriert werden sollen" + +#~ msgid "Follow FTP links from HTML documents" +#~ msgstr "FTP-Links in HTML-Dokumenten folgen" + +#~ msgid "HTML tags to follow" +#~ msgstr "zu beachtende HTML-Markierungen" + +#~ msgid "HTML tags to ignore" +#~ msgstr "zu ignorierenden HTML-Markierungen" + +#~ msgid "Enable spanning across hosts" +#~ msgstr "Spannung Host-übergreifend aktivieren" + +#~ msgid "Follow relative links only" +#~ msgstr "Nur relativen Links folgen" + +#~ 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" + +#~ 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" + +#~ msgid "Same as -b -d --login -p -r -t -T -u" +#~ msgstr "Entspricht -b -d --login -p -r -t -T -u" + +#~ msgid "Print line of headings" +#~ msgstr "Ãœberschrift ausgeben" + +#~ msgid "Print idle time" +#~ msgstr "Leerlaufzeit ausgeben" + +#~ msgid "Print login process" +#~ msgstr "Anmeldeprozess ausgeben" + +#~ msgid "Canonicalize hostnames via DNS" +#~ msgstr "Rechnernamen per DNS auflösen" + +#~ msgid "Print hostname and user for stdin" +#~ msgstr "Hostname und Benutzer für Standardeingabe ausgeben" + +#~ msgid "Print active processes spawned by init" +#~ msgstr "Zeige von init gestartete aktive Prozesse" + +#~ msgid "Print all login names and number of users logged on" +#~ msgstr "Alle Anmeldenamen und Anzahl der angemeldeter Benutzer ausgeben" + +#~ msgid "Print current runlevel" +#~ msgstr "Zeige aktuelle Systemebene" + +#~ msgid "Print name, line, and time" +#~ msgstr "Zeige Name, Zeile und Zeit" + +#~ msgid "Print last system clock change" +#~ msgstr "Letzte Systemzeitumstellung ausgeben" + +#~ msgid "Print users message status as +, - or ?" +#~ msgstr "Nachrichtenstatus des Benutzers als +, - oder ?" + +#~ msgid "List users logged in" +#~ msgstr "Angemeldete Benutzer auflisten" + +#~ msgid "Display grammar and exit" +#~ msgstr "Grammatik anzeigen und beenden" + +#~ msgid "Select window by name" +#~ msgstr "Fenster über Name auswählen" + +#~ msgid "Select root window" +#~ msgstr "Root-Fenster auswählen" + +#~ msgid "Specify X server" +#~ msgstr "X-Server angeben" + +#~ msgid "Do not show property type" +#~ msgstr "Eigenschaftstyp nicht anzeigen" + +#~ msgid "Select a window by clicking on its frame" +#~ msgstr "Fenster durch Klicken auf den Rahmen auswählen" + +#~ msgid "Set property" +#~ msgstr "Eigenschaft festlegen" + +#~ msgid "Examine property updates forever" +#~ msgstr "Eigenschaftsaktualisierungen andauernd überprüfen" + +#~ msgid "Append input to selection" +#~ msgstr "Eingabe an Auswahl anfügen" + +#~ msgid "Append to selection as input grows" +#~ msgstr "Neue Eingabedaten an Auswahl anfügen" + +#~ msgid "Read into selection" +#~ msgstr "In Auswahl einlesen" + +#~ msgid "Write selection" +#~ msgstr "Auswahl schreiben" + +#~ msgid "Clear selection" +#~ msgstr "Auswahl zurücksetzen" + +#~ msgid "Delete selection" +#~ msgstr "Auswahl löschen" + +#~ msgid "Use primary selection" +#~ msgstr "Primäre Auswahl verwenden" + +#~ msgid "Use secondary selection" +#~ msgstr "Sekundäre Auswahl verwenden" + +#~ msgid "Use clipboard selection" +#~ msgstr "Clipboard-Auswahl verwenden" + +#~ msgid "Make current selections persistent after program exit" +#~ msgstr "Aktuelle Selektionen nach Programmende erhalten" + +#~ msgid "Exchange primary and secondary selections" +#~ msgstr "Primäre und sekundäre Selektion tauschen" + +#~ msgid "Timeout for retrieving selection" +#~ msgstr "Zeitüberschreitung für Abruf der Auswahl" + +#~ msgid "Do not detach from the controlling terminal" +#~ msgstr "Nicht vom steuernden Terminal trennen" + +#~ msgid "Print informative messages" +#~ msgstr "Informative Nachrichten ausgeben" + +#~ msgid "Set error level" +#~ msgstr "Fehler-Grad festlegen" + +#~ msgid "Be tolerant of errors in commandline" +#~ msgstr "Fehler in der Befehlszeile tolerieren" + +#~ msgid "Set maximum delay between commands" +#~ msgstr "Maximale Verzögerung zwischen Befehlen festlegen" + +#~ msgid "Run commands from cache" +#~ msgstr "Befehle aus dem Cache starten" + +#~ msgid "Specify installroot" +#~ msgstr "installroot-Verzeichnis angeben" + +#~ msgid "Enables obsolets processing logic" +#~ msgstr "Aktiviert veraltete Verarbeitungslogik" + +#~ msgid "Output rss-data to file" +#~ msgstr "rss-Data in Datei ausgeben" + +#~ msgid "Exclude specified package from updates" +#~ msgstr "Angegebenes Paket von Aktualisierung ausschliessen" + +#~ msgid "Freshen: only changed files" +#~ msgstr "Aktualisieren: nur geänderte Dateien" + +#~ msgid "Delete entries in zipfile" +#~ msgstr "Einträge in Zip-Datei löschen" + +#~ msgid "Update: only changed or newer files" +#~ msgstr "Aktualisierung: nur neuere oder geänderte Dateien" + +#~ msgid "Move into zipfile (delete files)" +#~ msgstr "In Zip-Datei verschieben (Dateien löschen)" + +#~ msgid "Do not store directory names" +#~ msgstr "Verzeichnisnamen nicht speichern" + +#~ msgid "Do not compress at all" +#~ msgstr "Nicht komprimieren" + +#~ msgid "Convert LF to CR LF" +#~ msgstr "LF nach LF/CR umwandeln" + +#~ msgid "Convert CR LF to LF" +#~ msgstr "CR/LF nach LF umwandeln" + +#~ msgid "Compress faster" +#~ msgstr "Schnellere Kompromierung" + +#~ msgid "Compress better" +#~ msgstr "Bessere Komprimierung" + +#~ msgid "Add one-line comments" +#~ msgstr "Einzeilige Kommentare hinzufügen" + +#~ msgid "Add zipfile comments" +#~ msgstr "Zip-Dateikommentar hinzufügen" + +#~ msgid "Read names from stdin" +#~ msgstr "Namen über Standardeingabe lesen" + +#~ msgid "Make zipfile as old as the latest entry" +#~ msgstr "Zip-Datei erhält Datum des jüngsten Eintrages" + +#~ msgid "Fix zipfile" +#~ msgstr "Zip-Datei korrigieren" + +#~ msgid "Fix zipfile (try harder)" +#~ msgstr "Zip-Datei korrigieren (intensiver)" + +#~ msgid "Adjust offsets to suit self-extracting exe" +#~ msgstr "Offsets für selbstextrahierende Programme anpassen" + +#~ msgid "Strip prepended data" +#~ msgstr "Vorangestellte Daten entfernen" + +#~ msgid "Test zipfile integrity" +#~ msgstr "Integrität der Zip-Datei testen" + +#~ msgid "Exclude extra file attributes" +#~ msgstr "Zusätzliche Dateiattribute ausschliessen" + +#~ msgid "Store symbolic links as links" +#~ msgstr "Symbolische Links als Links speichern" + +#~ msgid "PKZIP recursion" +#~ msgstr "PKZIP-Rekursion" + +#~ msgid "Encrypt" +#~ msgstr "Verschlüsseln" diff --git a/po/en.po b/po/en.po index 691b7c5d1..42eb91c53 100644 --- a/po/en.po +++ b/po/en.po @@ -8,20 +8,26 @@ msgid "" msgstr "" "Project-Id-Version: fish 1.21.8\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-10-27 11:34+0200\n" +"POT-Creation-Date: 2014-03-13 21:29+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Axel Liljencrantz \n" "Language-Team: English \n" +"Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin.c:83 +#: autoload.cpp:113 +#, c-format +msgid "Could not autoload item '%ls', it is already being autoloaded. " +msgstr "Could not autoload item “%lsâ€, it is already being autoloaded. " + +#: builtin.cpp:83 #, c-format msgid "Send job %d, '%ls' to foreground\n" msgstr "Send job %d, “%ls†to foreground\n" -#: builtin.c:352 +#: builtin.cpp:344 #, c-format msgid "" "%ls: Type 'help %ls' for related documentation\n" @@ -30,87 +36,99 @@ msgstr "" "%ls: Type “help %ls†for related documentation\n" "\n" -#: builtin.c:498 +#: builtin.cpp:484 #, c-format msgid "%ls: No key with name '%ls' found\n" msgstr "%ls: No key with name “%ls†found\n" -#: builtin.c:504 +#: builtin.cpp:490 #, c-format msgid "%ls: Key with name '%ls' does not have any mapping\n" msgstr "%ls: Key with name “%ls†does not have any mapping\n" -#: builtin.c:510 +#: builtin.cpp:496 #, c-format msgid "%ls: Unknown error trying to bind to key named '%ls'\n" msgstr "%ls: Unknown error trying to bind to key named “%lsâ€\n" -#: builtin.c:701 -#, c-format -msgid "%ls: Expected zero or two parameters, got %d" -msgstr "" +#: builtin.cpp:668 +#, fuzzy, c-format +msgid "%ls: Expected zero or two parameters, got %d\n" +msgstr "%ls: Expected zero or one argument, got %d\n" -#: builtin.c:725 +#: builtin.cpp:692 #, c-format msgid "%ls: Invalid state\n" msgstr "" -#: builtin.c:830 +#: builtin.cpp:796 #, c-format msgid "%ls: Can not specify scope when removing block\n" msgstr "" -#: builtin.c:836 +#: builtin.cpp:802 #, c-format msgid "%ls: No blocks defined\n" msgstr "" -#: builtin.c:1328 builtin.h:29 +#: builtin.cpp:1312 builtin.h:32 #, c-format msgid "%ls: Invalid combination of options\n" msgstr "%ls: Invalid combination of options\n" -#: builtin.c:1350 +#: builtin.cpp:1334 #, c-format msgid "%ls: Expected exactly one function name\n" msgstr "%ls: Expected exactly one function name\n" -#: builtin.c:1360 +#: builtin.cpp:1344 builtin.cpp:1406 #, c-format msgid "%ls: Function '%ls' does not exist\n" msgstr "%ls: Function “%ls†does not exist\n" -#: builtin.c:1534 -#, c-format -msgid "%ls: Unknown signal '%ls'\n" -msgstr "%ls: Unknown signal “%lsâ€\n" +#: builtin.cpp:1394 +#, fuzzy, c-format +msgid "" +"%ls: Expected exactly two names (current function name, and new function " +"name)\n" +msgstr "%ls: Expected exactly one function name\n" -#: builtin.c:1558 builtin.c:1728 -#, c-format -msgid "%ls: Invalid variable name '%ls'\n" -msgstr "%ls: Invalid variable name “%lsâ€\n" - -#: builtin.c:1624 -#, c-format -msgid "%ls: Cannot find calling job for event handler\n" -msgstr "%ls: Cannot find calling job for event handler\n" - -#: builtin.c:1642 -#, c-format -msgid "%ls: Invalid process id %ls\n" -msgstr "%ls: Invalid process id %ls\n" - -#: builtin.c:1693 -#, c-format -msgid "%ls: Expected function name\n" -msgstr "%ls: Expected function name\n" - -#: builtin.c:1700 +#: builtin.cpp:1417 builtin.cpp:1952 builtin.cpp:2259 #, c-format msgid "%ls: Illegal function name '%ls'\n" msgstr "%ls: Illegal function name “%lsâ€\n" -#: builtin.c:1710 +#: builtin.cpp:1428 +#, fuzzy, c-format +msgid "%ls: Function '%ls' already exists. Cannot create copy '%ls'\n" +msgstr "%ls: Function “%ls†does not exist\n" + +#: builtin.cpp:1809 builtin.cpp:2114 +#, c-format +msgid "%ls: Unknown signal '%ls'\n" +msgstr "%ls: Unknown signal “%lsâ€\n" + +#: builtin.cpp:1824 builtin.cpp:1984 builtin.cpp:2129 builtin.cpp:2291 +#, c-format +msgid "%ls: Invalid variable name '%ls'\n" +msgstr "%ls: Invalid variable name “%lsâ€\n" + +#: builtin.cpp:1877 builtin.cpp:2182 +#, c-format +msgid "%ls: Cannot find calling job for event handler\n" +msgstr "%ls: Cannot find calling job for event handler\n" + +#: builtin.cpp:1895 builtin.cpp:2200 +#, c-format +msgid "%ls: Invalid process id %ls\n" +msgstr "%ls: Invalid process id %ls\n" + +#: builtin.cpp:1945 builtin.cpp:2252 +#, c-format +msgid "%ls: Expected function name\n" +msgstr "%ls: Expected function name\n" + +#: builtin.cpp:1962 builtin.cpp:2269 #, c-format msgid "" "%ls: The name '%ls' is reserved,\n" @@ -119,135 +137,140 @@ msgstr "" "%ls: The name “%ls†is reserved,\n" "and can not be used as a function name\n" -#: builtin.c:1741 +#: builtin.cpp:1970 builtin.cpp:2277 builtin.cpp:3824 +#, fuzzy, c-format +msgid "%ls: No function name given\n" +msgstr "%ls: Expected function name\n" + +#: builtin.cpp:1997 builtin.cpp:2304 #, c-format msgid "%ls: Expected one argument, got %d\n" msgstr "%ls: Expected one argument, got %d\n" -#: builtin.c:1757 +#: builtin.cpp:2319 msgid "Current functions are: " msgstr "Current functions are: " -#: builtin.c:1901 +#: builtin.cpp:2459 #, c-format msgid "%ls: Seed value '%ls' is not a valid number\n" msgstr "%ls: Seed value “%ls†is not a valid number\n" -#: builtin.c:1915 +#: builtin.cpp:2473 #, c-format msgid "%ls: Expected zero or one argument, got %d\n" msgstr "%ls: Expected zero or one argument, got %d\n" -#: builtin.c:2421 main.c:389 parser.c:1208 +#: builtin.cpp:2981 fish.cpp:518 parser.cpp:1095 msgid "Standard input" msgstr "Standard input" -#: builtin.c:2464 +#: builtin.cpp:3024 msgid "This is a login shell\n" msgstr "This is a login shell\n" -#: builtin.c:2466 +#: builtin.cpp:3026 msgid "This is not a login shell\n" msgstr "This is not a login shell\n" -#: builtin.c:2468 +#: builtin.cpp:3028 #, c-format msgid "Job control: %ls\n" msgstr "Job control: %ls\n" -#: builtin.c:2469 +#: builtin.cpp:3029 msgid "Only on interactive jobs" msgstr "Only on interactive jobs" -#: builtin.c:2470 +#: builtin.cpp:3030 msgid "Never" msgstr "Never" -#: builtin.c:2470 +#: builtin.cpp:3030 msgid "Always" msgstr "Always" -#: builtin.c:2506 builtin.c:3443 +#: builtin.cpp:3066 builtin.cpp:3995 #, c-format msgid "%ls: Argument '%ls' must be an integer\n" msgstr "%ls: Argument “%ls†must be an integer\n" -#: builtin.c:2566 +#: builtin.cpp:3108 #, c-format msgid "%ls: Could not find home directory\n" msgstr "%ls: Could not find home directory\n" -#: builtin.c:2580 builtin.c:2636 +#: builtin.cpp:3128 builtin.cpp:3182 #, c-format msgid "%ls: '%ls' is not a directory\n" msgstr "%ls: “%ls†is not a directory\n" -#: builtin.c:2587 +#: builtin.cpp:3135 #, c-format msgid "%ls: The directory '%ls' does not exist\n" msgstr "%ls: The directory “%ls†does not exist\n" -#: builtin.c:2594 +#: builtin.cpp:3142 #, c-format msgid "%ls: '%ls' is a rotten symlink\n" msgstr "%ls: “%ls†is a rotten symlink\n" -#: builtin.c:2602 +#: builtin.cpp:3150 #, c-format msgid "%ls: Unknown error trying to locate directory '%ls'\n" msgstr "%ls: Unknown error trying to locate directory “%lsâ€\n" -#: builtin.c:2627 +#: builtin.cpp:3173 #, c-format msgid "%ls: Permission denied: '%ls'\n" msgstr "%ls: Permission denied: “%lsâ€\n" -#: builtin.c:2653 +#: builtin.cpp:3197 #, c-format msgid "%ls: Could not set PWD variable\n" msgstr "%ls: Could not set PWD variable\n" -#: builtin.c:2739 +#: builtin.cpp:3284 #, c-format msgid "%ls: Key not specified\n" msgstr "%ls: Key not specified\n" -#: builtin.c:2784 builtin.c:2798 +#: builtin.cpp:3328 builtin.cpp:3336 #, c-format msgid "%ls: Error encountered while sourcing file '%ls':\n" msgstr "%ls: Error encountered while sourcing file “%lsâ€:\n" -#: builtin.c:2792 +#: builtin.cpp:3344 #, c-format msgid "%ls: '%ls' is not a file\n" msgstr "%ls: “%ls†is not a file\n" -#: builtin.c:2831 +#: builtin.cpp:3363 #, c-format msgid "%ls: Error while reading file '%ls'\n" msgstr "%ls: Error while reading file “%lsâ€\n" -#: builtin.c:2903 builtin.c:3083 +#: builtin.cpp:3419 builtin.cpp:3599 #, c-format msgid "%ls: There are no suitable jobs\n" msgstr "%ls: There are no suitable jobs\n" -#: builtin.c:2932 +#: builtin.cpp:3448 #, c-format msgid "%ls: Ambiguous job\n" msgstr "%ls: Ambiguous job\n" -#: builtin.c:2938 builtin.c:3106 builtin_jobs.c:301 +#: builtin.cpp:3454 builtin.cpp:3622 builtin_jobs.cpp:301 #, c-format msgid "%ls: '%ls' is not a job\n" msgstr "%ls: “%ls†is not a job\n" -#: builtin.c:2969 builtin_jobs.c:316 +#: builtin.cpp:3485 builtin_jobs.cpp:316 #, c-format msgid "%ls: No suitable job: %d\n" msgstr "%ls: No suitable job: %d\n" -#: builtin.c:2978 +#: builtin.cpp:3494 #, c-format msgid "" "%ls: Can't put job %d, '%ls' to foreground because it is not under job " @@ -256,12 +279,12 @@ msgstr "" "%ls: Can't put job %d, “%ls†to foreground because it is not under job " "control\n" -#: builtin.c:3032 +#: builtin.cpp:3547 #, c-format msgid "%ls: Unknown job '%ls'\n" msgstr "%ls: Unknown job “%lsâ€\n" -#: builtin.c:3041 +#: builtin.cpp:3556 #, c-format msgid "" "%ls: Can't put job %d, '%ls' to background because it is not under job " @@ -270,433 +293,1584 @@ msgstr "" "%ls: Can't put job %d, “%ls†to background because it is not under job " "control\n" -#: builtin.c:3051 +#: builtin.cpp:3566 #, c-format msgid "Send job %d '%ls' to background\n" msgstr "Send job %d “%ls†to background\n" -#: builtin.c:3089 +#: builtin.cpp:3605 msgid "(default)" msgstr "(default)" -#: builtin.c:3218 +#: builtin.cpp:3737 #, c-format msgid "%ls: Not inside of block\n" msgstr "%ls: Not inside of block\n" -#: builtin.c:3308 -#, c-format -msgid "%ls: Missing function definition information." -msgstr "%ls: Missing function definition information." - -#: builtin.c:3339 +#: builtin.cpp:3884 #, c-format msgid "%ls: Not inside of 'if' block\n" msgstr "%ls: Not inside of “if†block\n" -#: builtin.c:3391 +#: builtin.cpp:3938 #, c-format msgid "%ls: Not inside of loop\n" msgstr "%ls: Not inside of loop\n" -#: builtin.c:3453 builtin_complete.c:601 builtin.h:76 +#: builtin.cpp:4005 builtin_complete.cpp:539 builtin_set_color.cpp:140 +#: builtin.h:83 #, c-format msgid "%ls: Too many arguments\n" msgstr "%ls: Too many arguments\n" -#: builtin.c:3469 +#: builtin.cpp:4023 #, c-format msgid "%ls: Not inside of function\n" msgstr "%ls: Not inside of function\n" -#: builtin.c:3499 +#: builtin.cpp:4059 #, c-format msgid "%ls: Expected exactly one argument, got %d\n" msgstr "%ls: Expected exactly one argument, got %d\n" -#: builtin.c:3531 +#: builtin.cpp:4090 #, c-format msgid "%ls: 'case' command while not in switch block\n" msgstr "%ls: “case†command while not in switch block\n" -#: builtin.c:3575 -msgid "Temporarily block delivery of events" -msgstr "Temporarily block delivery of events" +#: builtin.cpp:4317 builtin.cpp:4360 +#, fuzzy +msgid "Test a condition" +msgstr "Set a config option" -#: builtin.c:3579 -msgid "Run a builtin command instead of a function" -msgstr "Run a builtin command instead of a function" - -#: builtin.c:3583 -msgid "Change working directory" -msgstr "Change working directory" - -#: builtin.c:3587 -msgid "Count the number of arguments" -msgstr "Count the number of arguments" - -#: builtin.c:3591 -msgid "Search for a specified string in a list" +#: builtin.cpp:4318 +msgid "Try out the new parser" msgstr "" -#: builtin.c:3595 -msgid "Emit an event" -msgstr "Emit an event" +#: builtin.cpp:4319 +msgid "Execute command if previous command suceeded" +msgstr "Execute command if previous command suceeded" -#: builtin.c:3599 -msgid "Exit the shell" -msgstr "Exit the shell" - -#: builtin.c:3603 -msgid "Define a new function" -msgstr "Define a new function" - -#: builtin.c:3607 -msgid "List or remove functions" -msgstr "List or remove functions" - -#: builtin.c:3611 -msgid "Edit command specific completions" -msgstr "Edit command specific completions" - -#: builtin.c:3615 -msgid "End a block of commands" -msgstr "End a block of commands" - -#: builtin.c:3619 -msgid "Evaluate block if condition is false" -msgstr "Evaluate block if condition is false" - -#: builtin.c:3623 -msgid "Perform a set of commands multiple times" -msgstr "Perform a set of commands multiple times" - -#: builtin.c:3627 -msgid "Evaluate contents of file" -msgstr "Evaluate contents of file" - -#: builtin.c:3631 -msgid "Handle environment variables" -msgstr "Handle environment variables" - -#: builtin.c:3635 -msgid "Send job to foreground" -msgstr "Send job to foreground" - -#: builtin.c:3639 -msgid "Send job to background" -msgstr "Send job to background" - -#: builtin.c:3643 -msgid "Print currently running jobs" -msgstr "Print currently running jobs" - -#: builtin.c:3647 -msgid "Read a line of input into variables" -msgstr "Read a line of input into variables" - -#: builtin.c:3651 -msgid "Stop the innermost loop" -msgstr "Stop the innermost loop" - -#: builtin.c:3655 -msgid "Skip the rest of the current lap of the innermost loop" -msgstr "Skip the rest of the current lap of the innermost loop" - -#: builtin.c:3659 -msgid "Stop the currently evaluated function" -msgstr "Stop the currently evaluated function" - -#: builtin.c:3663 -msgid "Set or get the commandline" -msgstr "Set or get the commandline" - -#: builtin.c:3667 builtin.c:3671 -msgid "Conditionally execute a block of commands" -msgstr "Conditionally execute a block of commands" - -#: builtin.c:3675 -msgid "Handle fish key bindings" -msgstr "Handle fish key bindings" - -#: builtin.c:3679 -msgid "Generate random number" -msgstr "Generate random number" - -#: builtin.c:3683 -msgid "Return status information about fish" -msgstr "Return status information about fish" - -#: builtin.c:3687 -msgid "Set or get the shells resource usage limits" -msgstr "Set or get the shells resource usage limits" - -#: builtin.c:3691 +#: builtin.cpp:4320 msgid "Create a block of code" msgstr "Create a block of code" -#: builtin.c:3695 +#: builtin.cpp:4321 +msgid "Send job to background" +msgstr "Send job to background" + +#: builtin.cpp:4322 +msgid "Handle fish key bindings" +msgstr "Handle fish key bindings" + +#: builtin.cpp:4323 +msgid "Temporarily block delivery of events" +msgstr "Temporarily block delivery of events" + +#: builtin.cpp:4324 +msgid "Stop the innermost loop" +msgstr "Stop the innermost loop" + +#: builtin.cpp:4325 msgid "" "Temporarily halt execution of a script and launch an interactive debug prompt" msgstr "" "Temporarily halt execution of a script and launch an interactive debug prompt" -#: builtin.c:3705 +#: builtin.cpp:4326 +msgid "Run a builtin command instead of a function" +msgstr "Run a builtin command instead of a function" + +#: builtin.cpp:4327 builtin.cpp:4359 +msgid "Conditionally execute a block of commands" +msgstr "Conditionally execute a block of commands" + +#: builtin.cpp:4328 +msgid "Change working directory" +msgstr "Change working directory" + +#: builtin.cpp:4329 msgid "Run a program instead of a function or builtin" msgstr "Run a program instead of a function or builtin" -#: builtin.c:3709 -msgid "Evaluate block if condition is true" -msgstr "Evaluate block if condition is true" +#: builtin.cpp:4330 +msgid "Set or get the commandline" +msgstr "Set or get the commandline" -#: builtin.c:3713 -msgid "Perform a command multiple times" -msgstr "Perform a command multiple times" +#: builtin.cpp:4331 +msgid "Edit command specific completions" +msgstr "Edit command specific completions" -#: builtin.c:3717 -msgid "Negate exit status of job" -msgstr "Negate exit status of job" +#: builtin.cpp:4332 +msgid "Search for a specified string in a list" +msgstr "" -#: builtin.c:3721 -msgid "Execute command if previous command suceeded" -msgstr "Execute command if previous command suceeded" +#: builtin.cpp:4333 +msgid "Skip the rest of the current lap of the innermost loop" +msgstr "Skip the rest of the current lap of the innermost loop" -#: builtin.c:3725 -msgid "Execute command if previous command failed" -msgstr "Execute command if previous command failed" +#: builtin.cpp:4334 +msgid "Count the number of arguments" +msgstr "Count the number of arguments" -#: builtin.c:3729 +#: builtin.cpp:4335 +#, fuzzy +msgid "Print arguments" +msgstr "Print word counts" + +#: builtin.cpp:4336 +msgid "Evaluate block if condition is false" +msgstr "Evaluate block if condition is false" + +#: builtin.cpp:4337 +msgid "Emit an event" +msgstr "Emit an event" + +#: builtin.cpp:4338 +msgid "End a block of commands" +msgstr "End a block of commands" + +#: builtin.cpp:4339 msgid "Run command in current process" msgstr "Run command in current process" -#: builtin.c:3817 parser.c:63 +#: builtin.cpp:4340 +msgid "Exit the shell" +msgstr "Exit the shell" + +#: builtin.cpp:4341 +msgid "Send job to foreground" +msgstr "Send job to foreground" + +#: builtin.cpp:4342 +msgid "Perform a set of commands multiple times" +msgstr "Perform a set of commands multiple times" + +#: builtin.cpp:4343 +msgid "Define a new function" +msgstr "Define a new function" + +#: builtin.cpp:4344 +msgid "List or remove functions" +msgstr "List or remove functions" + +#: builtin.cpp:4345 +msgid "History of commands executed by user" +msgstr "" + +#: builtin.cpp:4346 +msgid "Evaluate block if condition is true" +msgstr "Evaluate block if condition is true" + +#: builtin.cpp:4347 +msgid "Print currently running jobs" +msgstr "Print currently running jobs" + +#: builtin.cpp:4348 +msgid "Negate exit status of job" +msgstr "Negate exit status of job" + +#: builtin.cpp:4349 +msgid "Execute command if previous command failed" +msgstr "Execute command if previous command failed" + +#: builtin.cpp:4350 +#, fuzzy +msgid "Prints formatted text" +msgstr "Print command type" + +#: builtin.cpp:4351 +#, fuzzy +msgid "Print the working directory" +msgstr "Print working directory" + +#: builtin.cpp:4352 +msgid "Generate random number" +msgstr "Generate random number" + +#: builtin.cpp:4353 +msgid "Read a line of input into variables" +msgstr "Read a line of input into variables" + +#: builtin.cpp:4354 +msgid "Stop the currently evaluated function" +msgstr "Stop the currently evaluated function" + +#: builtin.cpp:4355 +msgid "Handle environment variables" +msgstr "Handle environment variables" + +#: builtin.cpp:4356 +msgid "Set the terminal color" +msgstr "" + +#: builtin.cpp:4357 +msgid "Evaluate contents of file" +msgstr "Evaluate contents of file" + +#: builtin.cpp:4358 +msgid "Return status information about fish" +msgstr "Return status information about fish" + +#: builtin.cpp:4361 +msgid "Set or get the shells resource usage limits" +msgstr "Set or get the shells resource usage limits" + +#: builtin.cpp:4362 +msgid "Perform a command multiple times" +msgstr "Perform a command multiple times" + +#: builtin.cpp:4442 parser.cpp:53 #, c-format msgid "Unknown builtin '%ls'" msgstr "Unknown builtin “%lsâ€" -#: builtin_commandline.c:464 +#: builtin_commandline.cpp:411 #, c-format msgid "%ls: Unknown input function '%ls'\n" msgstr "%ls: Unknown input function “%lsâ€\n" -#: builtin_complete.c:313 -#, c-format -msgid "%ls: Command only available in interactive sessions" -msgstr "%ls: Command only available in interactive sessions" - -#: builtin_jobs.c:87 +#: builtin_jobs.cpp:87 msgid "Job\tGroup\t" msgstr "Job\tGroup\t" -#: builtin_jobs.c:89 +#: builtin_jobs.cpp:89 msgid "CPU\t" msgstr "CPU\t" -#: builtin_jobs.c:91 +#: builtin_jobs.cpp:91 msgid "State\tCommand\n" msgstr "State\tCommand\n" -#: builtin_jobs.c:100 proc.c:661 +#: builtin_jobs.cpp:99 proc.cpp:751 msgid "stopped" msgstr "stopped" -#: builtin_jobs.c:100 +#: builtin_jobs.cpp:99 msgid "running" msgstr "running" -#: builtin_jobs.c:115 +#: builtin_jobs.cpp:113 msgid "Group\n" msgstr "Group\n" -#: builtin_jobs.c:128 -msgid "Procces\n" -msgstr "Procces\n" +#: builtin_jobs.cpp:126 +#, fuzzy +msgid "Process\n" +msgstr "Process" -#: builtin_jobs.c:145 +#: builtin_jobs.cpp:143 msgid "Command\n" msgstr "Command\n" -#: builtin_jobs.c:342 +#: builtin_jobs.cpp:344 #, c-format msgid "%ls: There are no jobs\n" msgstr "%ls: There are no jobs\n" -#: builtin_set.c:158 +#: builtin_printf.cpp:175 +#, c-format +msgid "" +"warning: %ls: character(s) following character constant have been ignored" +msgstr "" + +#: builtin_printf.cpp:256 +#, fuzzy, c-format +msgid "%ls: expected a numeric value" +msgstr "%s: Expected an argument\n" + +#: builtin_printf.cpp:258 +#, c-format +msgid "%ls: value not completely converted" +msgstr "" + +#: builtin_printf.cpp:359 +msgid "missing hexadecimal number in escape" +msgstr "" + +#: builtin_printf.cpp:387 +msgid "Missing hexadecimal number in Unicode escape" +msgstr "" + +#: builtin_printf.cpp:401 +#, c-format +msgid "Unicode character out of range: \\%c%0*x" +msgstr "" + +#: builtin_printf.cpp:668 +#, c-format +msgid "invalid field width: %ls" +msgstr "" + +#: builtin_printf.cpp:706 +#, fuzzy, c-format +msgid "invalid precision: %ls" +msgstr "%ls: Invalid process id %ls\n" + +#: builtin_printf.cpp:737 +#, fuzzy, c-format +msgid "%.*ls: invalid conversion specification" +msgstr "%ls: Invalid combination of options\n" + +#: builtin_printf.cpp:769 +msgid "printf: not enough arguments" +msgstr "" + +#: builtin_set.cpp:155 #, c-format msgid "%ls: Tried to change the read-only variable '%ls'\n" msgstr "%ls: Tried to change the read-only variable “%lsâ€\n" -#: builtin_set.c:165 +#: builtin_set.cpp:162 #, c-format msgid "%ls: Unknown error" msgstr "%ls: Unknown error" -#: builtin_set.c:217 +#: builtin_set.cpp:214 #, c-format msgid "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" msgstr "" "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" -#: builtin_set.c:244 +#: builtin_set.cpp:241 #, c-format msgid "%ls: Invalid index starting at '%ls'\n" msgstr "%ls: Invalid index starting at “%lsâ€\n" -#: builtin_set.c:689 -#, c-format -msgid "" -"%ls: Erase needs a variable name\n" -"%ls\n" +#: builtin_set.cpp:640 +#, fuzzy, c-format +msgid "%ls: Erase needs a variable name\n" msgstr "" "%ls: Erase needs a variable name\n" "%ls\n" -#: builtin_set.c:733 +#: builtin_set.cpp:684 #, c-format msgid "%ls: Can not specify scope when erasing array slice\n" msgstr "%ls: Can not specify scope when erasing array slice\n" -#: builtin_set.c:847 +#: builtin_set.cpp:783 #, c-format msgid "%ls: Values cannot be specfied with erase\n" msgstr "%ls: Values cannot be specfied with erase\n" -#: common.c:1756 -#, -msgid "This is a bug. " -msgstr "This is a bug. " +#: builtin_set_color.cpp:149 +#, fuzzy, c-format +msgid "%ls: Expected an argument\n" +msgstr "%s: Expected an argument\n" -#: complete.c:61 -#, c-format -msgid "Home for %s" +#: builtin_set_color.cpp:157 builtin_set_color.cpp:164 +#, fuzzy, c-format +msgid "%ls: Unknown color '%ls'\n" +msgstr "%s: Unknown color “%sâ€\n" + +#: builtin_set_color.cpp:171 +#, fuzzy, c-format +msgid "%ls: Could not set up terminal\n" +msgstr "Could not set up terminal" + +#: common.cpp:1882 +msgid "This is a bug. Break on bugreport to debug." msgstr "" -#: complete.c:66 +#: common.cpp:1901 +msgid "empty" +msgstr "empty" + +#: complete.cpp:61 +#, c-format +msgid "Home for %ls" +msgstr "" + +#: complete.cpp:66 #, c-format msgid "Variable: %ls" msgstr "Variable: %ls" -#: complete.c:808 complete.c:826 +#: complete.cpp:907 complete.cpp:925 msgid "Unknown option: " msgstr "Unknown option: " -#: complete.c:831 +#: complete.cpp:929 msgid "Multiple matches for option: " msgstr "Multiple matches for option: " -#: env.c:238 +#: env.cpp:251 msgid "Could not get user information" msgstr "Could not get user information" -#: env.c:340 env.c:344 +#: env.cpp:362 msgid "Changing language to English" msgstr "Changing language to English" -#: env.c:1309 +#: env.cpp:1252 msgid "Tried to pop empty environment stack." msgstr "Tried to pop empty environment stack." -#: env_universal_common.c:510 +#: env_universal_common.cpp:529 #, c-format msgid "Could not convert message '%s' to wide character string" msgstr "Could not convert message “%s†to wide character string" -#: event.c:225 +#: event.cpp:168 #, c-format msgid "signal handler for %ls (%ls)" msgstr "signal handler for %ls (%ls)" -#: event.c:229 +#: event.cpp:172 #, c-format msgid "handler for variable '%ls'" msgstr "handler for variable “%lsâ€" -#: event.c:235 +#: event.cpp:178 #, c-format msgid "exit handler for process %d" msgstr "exit handler for process %d" -#: event.c:241 event.c:252 +#: event.cpp:184 event.cpp:195 #, c-format msgid "exit handler for job %d, '%ls'" msgstr "exit handler for job %d, “%lsâ€" -#: event.c:243 +#: event.cpp:186 #, c-format msgid "exit handler for job with process group %d" msgstr "exit handler for job with process group %d" -#: event.c:254 +#: event.cpp:197 #, c-format msgid "exit handler for job with job id %d" msgstr "exit handler for job with job id %d" -#: event.c:260 +#: event.cpp:203 #, c-format msgid "handler for generic event '%ls'" msgstr "handler for generic event “%lsâ€" -#: event.c:264 -#, -msgid "Unknown event type" +#: event.cpp:207 +#, fuzzy, c-format +msgid "Unknown event type '0x%x'" msgstr "Unknown event type" -#: event.c:588 +#: event.cpp:621 msgid "Signal list overflow. Signals have been ignored." msgstr "Signal list overflow. Signals have been ignored." -#: exec.c:54 +#: exec.cpp:57 #, c-format msgid "An error occurred while redirecting file descriptor %d" msgstr "An error occurred while redirecting file descriptor %d" -#: exec.c:59 -#, c-format -msgid "An error occurred while redirecting file '%ls'" +#: exec.cpp:62 +#, fuzzy +msgid "An error occurred while writing output" +msgstr "An error occurred while setting up pipe" + +#: exec.cpp:67 +#, fuzzy, c-format +msgid "An error occurred while redirecting file '%s'" msgstr "An error occurred while redirecting file “%lsâ€" -#: exec.c:64 -#, c-format -msgid "The file '%ls' already exists" -msgstr "The file “%ls†already exists" - -#: exec.c:69 -msgid "Could not create child process - exiting" -msgstr "Could not create child process - exiting" - -#: exec.c:289 -#, c-format -msgid "Failed to close file descriptor %d" -msgstr "Failed to close file descriptor %d" - -#: exec.c:509 -#, c-format -msgid "Failed to execute process '%ls'" -msgstr "Failed to execute process “%lsâ€" - -#: exec.c:689 -#, c-format -msgid "" -"Could not send process %d, '%ls' in job %d, '%ls' from group %d to group %d" -msgstr "" -"Could not send process %d, “%ls†in job %d, “%ls†from group %d to group %d" - -#: exec.c:711 proc.c:893 proc.c:905 -#, c-format -msgid "Could not send job %d ('%ls') to foreground" -msgstr "Could not send job %d (“%lsâ€) to foreground" - -#: exec.c:1047 +#: exec.cpp:912 #, c-format msgid "Unknown function '%ls'" msgstr "Unknown function “%lsâ€" -#: exec.c:1167 +#: exec.cpp:1063 #, c-format msgid "Unknown input redirection type %d" msgstr "Unknown input redirection type %d" -#: expand.c:53 +#: expand.cpp:59 +msgid "Child process" +msgstr "Child process" + +#: expand.cpp:64 +msgid "Process" +msgstr "Process" + +#: expand.cpp:69 +msgid "Job" +msgstr "Job" + +#: expand.cpp:74 +#, c-format +msgid "Job: %ls" +msgstr "Job: %ls" + +#: expand.cpp:79 +msgid "Shell process" +msgstr "Shell process" + +#: expand.cpp:84 +msgid "Last background job" +msgstr "Last background job" + +#: expand.cpp:1306 +msgid "Mismatched brackets" +msgstr "Mismatched brackets" + +#: fish.cpp:320 +#, c-format +msgid "Invalid value '%s' for debug level switch" +msgstr "Invalid value “%s†for debug level switch" + +#: fish.cpp:361 mimedb.cpp:1335 +#, c-format +msgid "%s, version %s\n" +msgstr "%s, version %s\n" + +#: fish.cpp:416 +msgid "Can not use the no-execute mode when running an interactive session" +msgstr "Can not use the no-execute mode when running an interactive session" + +#: fish.cpp:517 +#, c-format +msgid "Error while reading file %ls\n" +msgstr "Error while reading file %ls\n" + +#: fish_indent.cpp:345 +#, c-format +msgid "%ls, version %s\n" +msgstr "%ls, version %s\n" + +#: fish_pager.cpp:113 +#, c-format +msgid "%ls: Argument '%s' is not a valid file descriptor\n" +msgstr "%ls: Argument “%s†is not a valid file descriptor\n" + +#: fish_pager.cpp:703 +#, c-format +msgid " %d to %d of %d" +msgstr "" + +#: fish_pager.cpp:1012 +msgid "Could not set up output file descriptors for pager" +msgstr "" + +#: fish_pager.cpp:1018 +msgid "Could not set up input file descriptors for pager" +msgstr "Could not set up input file descriptors for pager" + +#: fish_pager.cpp:1024 +msgid "Could not open tty for pager" +msgstr "Could not open tty for pager" + +#: fish_pager.cpp:1031 +msgid "Could not initialize result pipe" +msgstr "" + +#: fish_pager.cpp:1075 input.cpp:384 input.cpp:394 +msgid "Could not set up terminal" +msgstr "Could not set up terminal" + +#: fish_pager.cpp:1110 input.cpp:436 +msgid "Error while closing terminfo" +msgstr "Error while closing terminfo" + +#: fish_pager.cpp:1306 +msgid "Unspecified file descriptors" +msgstr "Unspecified file descriptors" + +#: fish_pager.cpp:1318 +msgid "Could not read completions" +msgstr "Could not read completions" + +#: fishd.cpp:766 path.cpp:358 +msgid "" +"Unable to create a configuration directory for fish. Your personal settings " +"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " +"where the current user has write access." +msgstr "" + +#: input.cpp:387 +#, c-format +msgid "Check that your terminal type, '%ls', is supported on this system" +msgstr "" + +#: input.cpp:389 +#, c-format +msgid "Attempting to use '%ls' instead" +msgstr "" + +#: io.cpp:110 +#, c-format +msgid "" +"An error occured while reading output from code block on file descriptor %d" +msgstr "" +"An error occured while reading output from code block on file descriptor %d" + +#: mimedb.cpp:173 mimedb.cpp:187 mimedb.cpp:1177 +#, c-format +msgid "%s: Out of memory\n" +msgstr "%s: Out of memory\n" + +#: mimedb.cpp:462 +#, c-format +msgid "%s: Unknown error in munge()\n" +msgstr "%s: Unknown error in munge()\n" + +#: mimedb.cpp:480 +#, c-format +msgid "%s: Locale string too long\n" +msgstr "%s: Locale string too long\n" + +#: mimedb.cpp:550 mimedb.cpp:558 +#, c-format +msgid "%s: Could not compile regular expressions %s with error %s\n" +msgstr "%s: Could not compile regular expressions %s with error %s\n" + +#: mimedb.cpp:674 +#, c-format +msgid "%s: No description for type %s\n" +msgstr "%s: No description for type %s\n" + +#: mimedb.cpp:742 +#, c-format +msgid "%s: Could not parse launcher string '%s'\n" +msgstr "%s: Could not parse launcher string “%sâ€\n" + +#: mimedb.cpp:778 +#, c-format +msgid "%s: Default launcher '%s' does not specify how to start\n" +msgstr "%s: Default launcher “%s†does not specify how to start\n" + +#: mimedb.cpp:1156 +#, c-format +msgid "%s: Unsupported switch '%c' in launch string '%s'\n" +msgstr "%s: Unsupported switch “%c†in launch string “%sâ€\n" + +#: mimedb.cpp:1346 +#, c-format +msgid "%s: Can not launch a mimetype\n" +msgstr "%s: Can not launch a mimetype\n" + +#: mimedb.cpp:1374 +#, c-format +msgid "%s: Could not parse mimetype from argument '%s'\n" +msgstr "%s: Could not parse mimetype from argument “%sâ€\n" + +#: mimedb.cpp:1394 signal.cpp:407 signal.cpp:422 +msgid "Unknown" +msgstr "Unknown" + +#: pager.cpp:24 +#, fuzzy +msgid "search: " +msgstr "Set arch" + +#: parse_execution.cpp:526 parse_execution.cpp:961 parser.cpp:1404 +#, c-format +msgid "Could not expand string '%ls'" +msgstr "Could not expand string “%lsâ€" + +#: parse_execution.cpp:549 +#, fuzzy, c-format +msgid "switch: Expected exactly one argument, got %lu\n" +msgstr "%ls: Expected exactly one argument, got %d\n" + +#: parse_execution.cpp:749 parser.cpp:2053 +#, fuzzy, c-format +msgid "" +"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'." +msgstr "" +"Unknown command “%lsâ€. Did you mean “set %ls %lsâ€? For information on " +"assigning values to variables, see the help section on the set command by " +"typing “help setâ€." + +#: parse_execution.cpp:774 parser.cpp:2078 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function like " +"'function %ls; %ls $argv; end' or use the eval builtin instead, like 'eval " +"%ls'. See the help section for the function command by typing 'help " +"function'." +msgstr "" +"Variables may not be used as commands. Instead, define a function like " +"“function %ls; %ls $argv; endâ€. See the help section for the function " +"command by typing “help functionâ€." + +#: parse_execution.cpp:783 parser.cpp:2087 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function or use the " +"eval builtin instead, like 'eval %ls'. See the help section for the function " +"command by typing 'help function'." +msgstr "" +"Variables may not be used as commands. Instead, define a function. See the " +"help section for the function command by typing “help functionâ€." + +#: parse_execution.cpp:791 parser.cpp:2095 +#, c-format +msgid "" +"Commands may not contain variables. Use the eval builtin instead, like 'eval " +"%ls'. See the help section for the eval command by typing 'help eval'." +msgstr "" +"Commands may not contain variables. Use the eval builtin instead, like “eval " +"%lsâ€. See the help section for the eval command by typing “help evalâ€." + +#: parse_execution.cpp:798 parser.cpp:2102 +#, fuzzy, c-format +msgid "The file '%ls' is not executable by this user" +msgstr "The file “%ls†already exists" + +#: parse_execution.cpp:1029 +#, fuzzy, c-format +msgid "Invalid redirection target: %ls" +msgstr "Invalid IO redirection" + +#: parse_execution.cpp:1053 +#, fuzzy, c-format +msgid "Requested redirection to '%ls', which is not a valid file descriptor" +msgstr "Requested redirection to something that is not a file descriptor %ls" + +#: parse_util.cpp:47 +#, fuzzy, c-format +msgid "The '%ls' command can not be used in a pipeline" +msgstr "This command can not be used in a pipeline" + +#: parser.cpp:58 +msgid "This command can not be used in a pipeline" +msgstr "This command can not be used in a pipeline" + +#: parser.cpp:64 +#, c-format +msgid "Tokenizer error: '%ls'" +msgstr "Tokenizer error: “%lsâ€" + +#: parser.cpp:69 +msgid "An additional command is required" +msgstr "An additional command is required" + +#: parser.cpp:74 +msgid "" +"The function calls itself immediately, which would result in an infinite " +"loop." +msgstr "" + +#: parser.cpp:79 +msgid "" +"Could not locate end of block. The 'end' command is missing, misspelled or a " +"';' is missing." +msgstr "" +"Could not locate end of block. The “end†command is missing, misspelled or a " +"“;†is missing." + +#: parser.cpp:82 +#, c-format +msgid "Expected a command name, got token of type '%ls'" +msgstr "Expected a command name, got token of type “%lsâ€" + +#: parser.cpp:87 parse_constants.h:158 +#, c-format +msgid "Illegal command name '%ls'" +msgstr "Illegal command name “%lsâ€" + +#: parser.cpp:92 parse_constants.h:164 +#, fuzzy, c-format +msgid "Illegal file descriptor in redirection '%ls'" +msgstr "Illegal file descriptor “%lsâ€" + +#: parser.cpp:97 parse_constants.h:167 +#, c-format +msgid "No matches for wildcard '%ls'." +msgstr "" + +#: parser.cpp:102 +msgid "'case' builtin not inside of switch block" +msgstr "“case†builtin not inside of switch block" + +#: parser.cpp:107 +msgid "Loop control command while not inside of loop" +msgstr "Loop control command while not inside of loop" + +#: parser.cpp:112 parse_constants.h:176 +msgid "'return' builtin command outside of function definition" +msgstr "“return†builtin command outside of function definition" + +#: parser.cpp:117 +#, fuzzy, c-format +msgid "'%ls' builtin not inside of if block" +msgstr "“else†builtin not inside of if block" + +#: parser.cpp:122 +#, c-format +msgid "'%ls' used past terminating 'else'" +msgstr "" + +#: parser.cpp:127 +msgid "'end' command outside of block" +msgstr "“end†command outside of block" + +#: parser.cpp:132 parse_constants.h:179 +#, fuzzy, c-format +msgid "" +"Unknown command '%ls'. Did you mean 'set %ls %ls'? See the help section on " +"the set command by typing 'help set'." +msgstr "" +"Unknown command “%lsâ€. Did you mean “set %ls %lsâ€? For information on " +"assigning values to variables, see the help section on the set command by " +"typing “help setâ€." + +#: parser.cpp:137 +#, c-format +msgid "Expected redirection specification, got token of type '%ls'" +msgstr "Expected redirection specification, got token of type “%lsâ€" + +#: parser.cpp:142 +msgid "" +"Encountered redirection when expecting a command name. Fish does not allow a " +"redirection operation before a command." +msgstr "" +"Encountered redirection when expecting a command name. Fish does not allow a " +"redirection operation before a command." + +#: parser.cpp:147 +#, c-format +msgid "Tried to evaluate commands using invalid block type '%ls'" +msgstr "Tried to evaluate commands using invalid block type “%lsâ€" + +#: parser.cpp:153 +#, c-format +msgid "Unexpected token of type '%ls'" +msgstr "Unexpected token of type “%lsâ€" + +#: parser.cpp:158 parse_constants.h:209 +msgid "'while' block" +msgstr "“while†block" + +#: parser.cpp:163 parse_constants.h:214 +msgid "'for' block" +msgstr "“for†block" + +#: parser.cpp:168 parse_constants.h:219 +msgid "Block created by breakpoint" +msgstr "Block created by breakpoint" + +#: parser.cpp:175 parse_constants.h:226 +msgid "'if' conditional block" +msgstr "“if†conditional block" + +#: parser.cpp:181 parse_constants.h:232 +msgid "function definition block" +msgstr "function definition block" + +#: parser.cpp:187 parse_constants.h:238 +msgid "function invocation block" +msgstr "function invocation block" + +#: parser.cpp:192 parse_constants.h:243 +msgid "function invocation block with no variable shadowing" +msgstr "function invocation block with no variable shadowing" + +#: parser.cpp:198 parse_constants.h:249 +msgid "'switch' block" +msgstr "“switch†block" + +#: parser.cpp:204 parse_constants.h:255 +msgid "unexecutable block" +msgstr "unexecutable block" + +#: parser.cpp:210 parse_constants.h:261 +msgid "global root block" +msgstr "global root block" + +#: parser.cpp:216 parse_constants.h:267 +msgid "command substitution block" +msgstr "command substitution block" + +#: parser.cpp:222 parse_constants.h:273 +msgid "'begin' unconditional block" +msgstr "“begin†unconditional block" + +#: parser.cpp:228 parse_constants.h:279 +msgid "Block created by the . builtin" +msgstr "Block created by the . builtin" + +#: parser.cpp:233 parse_constants.h:284 +msgid "event handler block" +msgstr "event handler block" + +#: parser.cpp:239 parse_constants.h:290 +msgid "unknown/invalid block" +msgstr "unknown/invalid block" + +#: parser.cpp:645 +#, c-format +msgid "Could not write profiling information to file '%s'" +msgstr "Could not write profiling information to file “%sâ€" + +#: parser.cpp:651 +msgid "Time\tSum\tCommand\n" +msgstr "Time\tSum\tCommand\n" + +#: parser.cpp:811 +#, c-format +msgid "in event handler: %ls\n" +msgstr "in event handler: %ls\n" + +#: parser.cpp:839 +#, fuzzy, c-format +msgid "from sourcing file %ls\n" +msgstr "Error while reading file %ls\n" + +#: parser.cpp:845 +#, fuzzy, c-format +msgid "in function '%ls'\n" +msgstr "in function “%lsâ€,\n" + +#: parser.cpp:850 +msgid "in command substitution\n" +msgstr "in command substitution\n" + +#: parser.cpp:863 +#, fuzzy, c-format +msgid "\tcalled on line %d of file %ls\n" +msgstr "\tcalled on line %d of file “%lsâ€,\n" + +#: parser.cpp:869 +#, fuzzy +msgid "\tcalled during startup\n" +msgstr "\tcalled on standard input,\n" + +#: parser.cpp:873 +#, fuzzy +msgid "\tcalled on standard input\n" +msgstr "\tcalled on standard input,\n" + +#: parser.cpp:890 +#, c-format +msgid "\twith parameter list '%ls'\n" +msgstr "\twith parameter list “%lsâ€\n" + +#: parser.cpp:1087 +#, c-format +msgid "%ls (line %d): " +msgstr "%ls (line %d): " + +#: parser.cpp:1091 +msgid "Startup" +msgstr "" + +#: parser.cpp:1197 +msgid "Job inconsistency" +msgstr "Job inconsistency" + +#: parser.cpp:1520 +msgid "Invalid IO redirection" +msgstr "Invalid IO redirection" + +#: parser.cpp:1541 +#, c-format +msgid "Requested redirection to something that is not a file descriptor %ls" +msgstr "Requested redirection to something that is not a file descriptor %ls" + +#: parser.cpp:2667 parser.cpp:2750 +msgid "End of block mismatch. Program terminating." +msgstr "End of block mismatch. Program terminating." + +#: parser.cpp:3034 +#, fuzzy, c-format +msgid "%ls (line %lu): " +msgstr "%ls (line %d): " + +#: path.cpp:24 +#, c-format +msgid "Error while searching for command '%ls'" +msgstr "Error while searching for command “%lsâ€" + +#: proc.cpp:615 +#, c-format +msgid "Job %d, '%ls' has %ls" +msgstr "Job %d, “%ls†has %ls" + +#: proc.cpp:699 +#, c-format +msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "%ls: Job %d, “%ls†terminated by signal %ls (%ls)" + +#: proc.cpp:707 +#, c-format +msgid "" +"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "" +"%ls: Process %d, “%ls†from job %d, “%ls†terminated by signal %ls (%ls)" + +#: proc.cpp:736 +msgid "ended" +msgstr "ended" + +#: proc.cpp:969 +msgid "An error occured while reading output from code block" +msgstr "An error occured while reading output from code block" + +#: proc.cpp:998 proc.cpp:1010 +#, c-format +msgid "Could not send job %d ('%ls') to foreground" +msgstr "Could not send job %d (“%lsâ€) to foreground" + +#: proc.cpp:1030 proc.cpp:1040 proc.cpp:1055 +msgid "Could not return shell to foreground" +msgstr "Could not return shell to foreground" + +#: proc.cpp:1280 proc.cpp:1304 +msgid "Process list pointer" +msgstr "Process list pointer" + +#: proc.cpp:1291 +#, c-format +msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" +msgstr "More than one job in foreground: job 1: “%ls†job 2: “%lsâ€" + +#: proc.cpp:1302 +msgid "Process argument list" +msgstr "Process argument list" + +#: proc.cpp:1303 +msgid "Process name" +msgstr "Process name" + +#: proc.cpp:1309 +#, c-format +msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" +msgstr "Job “%lsâ€, process “%ls†has inconsistent state “stoppedâ€=%d" + +#: proc.cpp:1319 +#, c-format +msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" +msgstr "Job “%lsâ€, process “%ls†has inconsistent state “completedâ€=%d" + +#: reader.cpp:453 +msgid "Could not set terminal mode for new job" +msgstr "Could not set terminal mode for new job" + +#: reader.cpp:477 +msgid "Could not set terminal mode for shell" +msgstr "Could not set terminal mode for shell" + +#: reader.cpp:2133 +msgid "No TTY for interactive shell (tcgetpgrp failed)" +msgstr "" + +#: reader.cpp:2148 +#, c-format +msgid "" +"I appear to be an orphaned process, so I am quitting politely. My pid is %d." +msgstr "" + +#: reader.cpp:2179 +msgid "Couldn't put the shell in its own process group" +msgstr "Couldn't put the shell in its own process group" + +#: reader.cpp:2189 +msgid "Couldn't grab control of terminal" +msgstr "Couldn't grab control of terminal" + +#: reader.cpp:2703 +msgid "Pop null reader block" +msgstr "Pop null reader block" + +#: reader.cpp:2956 +msgid "" +"There are stopped jobs. A second attempt to exit will enforce their " +"termination.\n" +msgstr "" + +#: reader.cpp:4069 +#, c-format +msgid "Unknown keybinding %d" +msgstr "Unknown keybinding %d" + +#: reader.cpp:4210 +msgid "Error while reading from file descriptor" +msgstr "Error while reading from file descriptor" + +#: reader.cpp:4227 +msgid "Error while closing input stream" +msgstr "Error while closing input stream" + +#: reader.cpp:4248 +msgid "Error while opening input stream" +msgstr "Error while opening input stream" + +#: sanity.cpp:37 +#, fuzzy +msgid "Errors detected, shutting down. Break on sanity_lose() to debug." +msgstr "Errors detected, shutting down" + +#: sanity.cpp:65 +#, c-format +msgid "The pointer '%ls' is invalid" +msgstr "The pointer “%ls†is invalid" + +#: sanity.cpp:71 +#, c-format +msgid "The pointer '%ls' is null" +msgstr "The pointer “%ls†is null" + +#: signal.cpp:69 +msgid "Terminal hung up" +msgstr "Terminal hung up" + +#: signal.cpp:77 +msgid "Quit request from job control (^C)" +msgstr "Quit request from job control (^C)" + +#: signal.cpp:85 +msgid "Quit request from job control with core dump (^\\)" +msgstr "Quit request from job control with core dump (^\\)" + +#: signal.cpp:93 +msgid "Illegal instruction" +msgstr "Illegal instruction" + +#: signal.cpp:101 +msgid "Trace or breakpoint trap" +msgstr "Trace or breakpoint trap" + +#: signal.cpp:109 +msgid "Abort" +msgstr "Abort" + +#: signal.cpp:117 +msgid "Misaligned address error" +msgstr "Misaligned address error" + +#: signal.cpp:125 +msgid "Floating point exception" +msgstr "Floating point exception" + +#: signal.cpp:133 +msgid "Forced quit" +msgstr "Forced quit" + +#: signal.cpp:141 +msgid "User defined signal 1" +msgstr "User defined signal 1" + +#: signal.cpp:148 +msgid "User defined signal 2" +msgstr "User defined signal 2" + +#: signal.cpp:156 +msgid "Address boundary error" +msgstr "Address boundary error" + +#: signal.cpp:164 +msgid "Broken pipe" +msgstr "Broken pipe" + +#: signal.cpp:172 +msgid "Timer expired" +msgstr "Timer expired" + +#: signal.cpp:180 +msgid "Polite quit request" +msgstr "Polite quit request" + +#: signal.cpp:188 +msgid "Child process status changed" +msgstr "Child process status changed" + +#: signal.cpp:196 +msgid "Continue previously stopped process" +msgstr "Continue previously stopped process" + +#: signal.cpp:204 +msgid "Forced stop" +msgstr "Forced stop" + +#: signal.cpp:212 +msgid "Stop request from job control (^Z)" +msgstr "Stop request from job control (^Z)" + +#: signal.cpp:220 +msgid "Stop from terminal input" +msgstr "Stop from terminal input" + +#: signal.cpp:228 +msgid "Stop from terminal output" +msgstr "Stop from terminal output" + +#: signal.cpp:236 +msgid "Urgent socket condition" +msgstr "Urgent socket condition" + +#: signal.cpp:244 +msgid "CPU time limit exceeded" +msgstr "CPU time limit exceeded" + +#: signal.cpp:252 +msgid "File size limit exceeded" +msgstr "File size limit exceeded" + +#: signal.cpp:260 +msgid "Virtual timer expired" +msgstr "Virtual timer expired" + +#: signal.cpp:268 +msgid "Profiling timer expired" +msgstr "Profiling timer expired" + +#: signal.cpp:276 signal.cpp:284 +msgid "Window size change" +msgstr "Window size change" + +#: signal.cpp:292 +msgid "I/O on asynchronous file descriptor is possible" +msgstr "I/O on asynchronous file descriptor is possible" + +#: signal.cpp:300 +msgid "Power failure" +msgstr "Power failure" + +#: signal.cpp:308 +msgid "Bad system call" +msgstr "Bad system call" + +#: signal.cpp:316 +msgid "Information request" +msgstr "Information request" + +#: signal.cpp:324 +msgid "Stack fault" +msgstr "Stack fault" + +#: signal.cpp:332 +msgid "Emulator trap" +msgstr "Emulator trap" + +#: signal.cpp:340 +msgid "Abort (Alias for SIGABRT)" +msgstr "Abort (Alias for SIGABRT)" + +#: signal.cpp:348 +msgid "Unused signal" +msgstr "Unused signal" + +#: signal.cpp:684 +msgid "Signal block mismatch" +msgstr "" + +#: tokenizer.cpp:32 +msgid "Unexpected end of string, quotes are not balanced" +msgstr "Unexpected end of string, quotes are not balanced" + +#: tokenizer.cpp:37 +msgid "Unexpected end of string, parenthesis do not match" +msgstr "Unexpected end of string, parenthesis do not match" + +#: tokenizer.cpp:42 +#, fuzzy +msgid "Unexpected end of string, square brackets do not match" +msgstr "Unexpected end of string, parenthesis do not match" + +#: tokenizer.cpp:48 +msgid "Invalid input/output redirection" +msgstr "Invalid input/output redirection" + +#: tokenizer.cpp:53 +#, fuzzy +msgid "Cannot use stdin (fd 0) as pipe output" +msgstr "Can not use fd 0 as pipe output" + +#: tokenizer.cpp:65 +msgid "Tokenizer not yet initialized" +msgstr "Tokenizer not yet initialized" + +#: tokenizer.cpp:66 +msgid "Tokenizer error" +msgstr "Tokenizer error" + +#: tokenizer.cpp:67 +msgid "String" +msgstr "String" + +#: tokenizer.cpp:68 +msgid "Pipe" +msgstr "Pipe" + +#: tokenizer.cpp:69 +msgid "End of command" +msgstr "End of command" + +#: tokenizer.cpp:70 +msgid "Redirect output to file" +msgstr "Redirect output to file" + +#: tokenizer.cpp:71 +msgid "Append output to file" +msgstr "Append output to file" + +#: tokenizer.cpp:72 +msgid "Redirect input to file" +msgstr "Redirect input to file" + +#: tokenizer.cpp:73 +msgid "Redirect to file descriptor" +msgstr "Redirect to file descriptor" + +#: tokenizer.cpp:74 +msgid "Redirect output to file if file does not exist" +msgstr "Redirect output to file if file does not exist" + +#: tokenizer.cpp:75 +msgid "Run job in background" +msgstr "Run job in background" + +#: tokenizer.cpp:76 +msgid "Comment" +msgstr "Comment" + +#: tokenizer.cpp:602 +msgid "Invalid token type" +msgstr "Invalid token type" + +#: wgetopt.cpp:536 +#, c-format +msgid "%ls: Option '%ls' is ambiguous\n" +msgstr "%ls: Option “%ls†is ambiguous\n" + +#: wgetopt.cpp:560 +#, c-format +msgid "%ls: Option '--%ls' doesn't allow an argument\n" +msgstr "%ls: Option “--%ls†doesn't allow an argument\n" + +#: wgetopt.cpp:565 +#, c-format +msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" +msgstr "%ls: Option “%lc%ls†doesn't allow an argument\n" + +#: wgetopt.cpp:579 +#, c-format +msgid "%ls: Option '%ls' requires an argument\n" +msgstr "%ls: Option “%ls†requires an argument\n" + +#: wgetopt.cpp:607 +#, c-format +msgid "%ls: Unrecognized option '--%ls'\n" +msgstr "%ls: Unrecognized option “--%lsâ€\n" + +#: wgetopt.cpp:611 +#, c-format +msgid "%ls: Unrecognized option '%lc%ls'\n" +msgstr "%ls: Unrecognized option “%lc%lsâ€\n" + +#: wgetopt.cpp:636 +#, c-format +msgid "%ls: Illegal option -- %lc\n" +msgstr "%ls: Illegal option -- %lc\n" + +#: wgetopt.cpp:638 +#, c-format +msgid "%ls: Invalid option -- %lc\n" +msgstr "%ls: Invalid option -- %lc\n" + +#: wgetopt.cpp:673 +#, c-format +msgid "%ls: Option requires an argument -- %lc\n" +msgstr "%ls: Option requires an argument -- %lc\n" + +#: wildcard.cpp:58 +msgid "Executable" +msgstr "Executable" + +#: wildcard.cpp:62 +msgid "Executable link" +msgstr "Executable link" + +#: wildcard.cpp:67 share/completions/git.fish:146 +msgid "File" +msgstr "File" + +#: wildcard.cpp:71 +msgid "Character device" +msgstr "Character device" + +#: wildcard.cpp:75 +msgid "Block device" +msgstr "Block device" + +#: wildcard.cpp:79 +msgid "Fifo" +msgstr "Fifo" + +#: wildcard.cpp:83 +msgid "Symbolic link" +msgstr "Symbolic link" + +#: wildcard.cpp:87 +msgid "Symbolic link to directory" +msgstr "Symbolic link to directory" + +#: wildcard.cpp:91 +msgid "Rotten symbolic link" +msgstr "Rotten symbolic link" + +#: wildcard.cpp:95 +msgid "Symbolic link loop" +msgstr "Symbolic link loop" + +#: wildcard.cpp:99 +msgid "Socket" +msgstr "Socket" + +#: wildcard.cpp:103 share/completions/ruby.fish:23 +#: share/functions/__fish_complete_directories.fish:8 +msgid "Directory" +msgstr "Directory" + +#: builtin.h:27 +#, c-format +msgid "%ls: Expected argument\n" +msgstr "%ls: Expected argument\n" + +#: builtin.h:37 +#, c-format +msgid "" +"%ls: Invalid combination of options,\n" +"%ls\n" +msgstr "" +"%ls: Invalid combination of options,\n" +"%ls\n" + +#: builtin.h:42 +#, c-format +msgid "%ls: Variable scope can only be one of universal, global and local\n" +msgstr "%ls: Variable scope can only be one of universal, global and local\n" + +#: builtin.h:47 +#, fuzzy, c-format +msgid "%ls: Variable can't be both exported and unexported\n" +msgstr "%ls: Variable can't be both exported and unexported\n" + +#: builtin.h:52 +#, c-format +msgid "%ls: Unknown option '%ls'\n" +msgstr "%ls: Unknown option “%lsâ€\n" + +#: builtin.h:57 +#, c-format +msgid "" +"%ls: Invalid character '%lc' in variable name. Only alphanumerical " +"characters and underscores are valid in a variable name.\n" +msgstr "" +"%ls: Invalid character “%lc†in variable name. Only alphanumerical " +"characters and underscores are valid in a variable name.\n" + +#: builtin.h:62 +#, c-format +msgid "%ls: Variable name can not be the empty string\n" +msgstr "%ls: Variable name can not be the empty string\n" + +#: builtin.h:67 +#, c-format +msgid "%ls: Second argument must be 'in'\n" +msgstr "%ls: Second argument must be “inâ€\n" + +#: builtin.h:72 +#, c-format +msgid "%ls: Expected at least two arguments, got %d\n" +msgstr "%ls: Expected at least two arguments, got %d\n" + +#: builtin.h:74 +#, c-format +msgid "%ls: '%ls' is not a valid variable name\n" +msgstr "%ls: “%ls†is not a valid variable name\n" + +#: builtin.h:77 +#, c-format +msgid "%ls: can only take 'if' and then another command as an argument\n" +msgstr "" + +#: builtin.h:78 +#, fuzzy, c-format +msgid "%ls: any second argument must be 'if'\n" +msgstr "%ls: Second argument must be “inâ€\n" + +#: builtin.h:88 +#, c-format +msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" +msgstr "%ls: Block mismatch: '%ls' vs. “%lsâ€\n" + +#: builtin.h:93 +#, fuzzy, c-format +msgid "%ls: Unknown block type '%ls'\n" +msgstr "%ls: Unknown block type “%lsâ€\n" + +#: builtin.h:95 +#, c-format +msgid "%ls: Argument '%ls' is not a number\n" +msgstr "%ls: Argument “%ls†is not a number\n" + +#: exec.h:21 +msgid "An error occurred while setting up pipe" +msgstr "An error occurred while setting up pipe" + +#: expand.h:132 +msgid "Array index out of bounds" +msgstr "Array index out of bounds" + +#: output.h:91 +#, c-format +msgid "" +"Tried to use terminfo string %s on line %d of %s, which is undefined in " +"terminal of type \"%ls\". Please report this error to %s" +msgstr "" + +#: parse_constants.h:145 +#, c-format +msgid "" +"The function '%ls' calls itself immediately, which would result in an " +"infinite loop." +msgstr "" + +#: parse_constants.h:149 +msgid "" +"The function call stack limit has been exceeded. Do you have an accidental " +"infinite loop?" +msgstr "" + +#: parse_constants.h:152 +#, fuzzy +msgid "" +"Expected a command, but instead found a pipe. Did you mean 'COMMAND; or " +"COMMAND'? See the help section for the 'or' builtin command by typing 'help " +"or'." +msgstr "" +"Expected a command name, got token of type “%lsâ€. Did you mean “COMMAND; or " +"COMMANDâ€? See the help section for the “or†builtin command by typing “help " +"orâ€." + +#: parse_constants.h:155 +#, fuzzy +msgid "" +"Expected a command, but instead found a '&'. Did you mean 'COMMAND; and " +"COMMAND'? See the help section for the 'and' builtin command by typing 'help " +"and'." +msgstr "" +"Expected a command name, got token of type “%lsâ€. Did you mean “COMMAND; and " +"COMMANDâ€? See the help section for the “and†builtin command by typing “help " +"andâ€." + +#: parse_constants.h:161 +#, fuzzy, c-format +msgid "Unable to expand variable name '%ls'" +msgstr "%ls: Invalid variable name “%lsâ€\n" + +#: parse_constants.h:170 +#, fuzzy +msgid "break command while not inside of loop" +msgstr "Loop control command while not inside of loop" + +#: parse_constants.h:173 +#, fuzzy +msgid "continue command while not inside of loop" +msgstr "Loop control command while not inside of loop" + +#: parse_constants.h:184 #, c-format msgid "" "The '$' character begins a variable name. The character '%lc', which " @@ -709,7 +1883,13 @@ msgstr "" "variable names may not be zero characters long. To learn more about variable " "expansion in fish, type “help expand-variableâ€." -#: expand.c:58 +#: parse_constants.h:189 +msgid "" +"$? is not a valid variable in fish. If you want the exit status of the last " +"command, try $status." +msgstr "" + +#: parse_constants.h:194 msgid "" "The '$' begins a variable name. It was given at the end of an argument. " "Variable names may not be zero characters long. To learn more about variable " @@ -719,7 +1899,7 @@ msgstr "" "Variable names may not be zero characters long. To learn more about variable " "expansion in fish, type “help expand-variableâ€." -#: expand.c:63 +#: parse_constants.h:199 #, c-format msgid "" "Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A " @@ -732,7 +1912,7 @@ msgstr "" "variable name, and variable names may not be zero characters long. To learn " "more about variable expansion in fish, type “help expand-variableâ€." -#: expand.c:68 +#: parse_constants.h:204 msgid "" "Did you mean (COMMAND)? In fish, the '$' character is only used for " "accessing variables. To learn more about command substitution in fish, type " @@ -742,1036 +1922,17 @@ msgstr "" "accessing variables. To learn more about command substitution in fish, type " "“help expand-command-substitutionâ€." -#: expand.c:73 -msgid "Child process" -msgstr "Child process" +#: share/completions/adb.fish:3 +#, fuzzy +msgid "Test if adb has yet to be given the subcommand" +msgstr "Test if apt has yet to be given the subcommand" -#: expand.c:78 -msgid "Process" -msgstr "Process" - -#: expand.c:83 -msgid "Job" -msgstr "Job" - -#: expand.c:88 -#, c-format -msgid "Job: %ls" -msgstr "Job: %ls" - -#: expand.c:93 -msgid "Shell process" -msgstr "Shell process" - -#: expand.c:98 -msgid "Last background job" -msgstr "Last background job" - -#: expand.c:1185 -msgid "Mismatched brackets" -msgstr "Mismatched brackets" - -#: fish_indent.c:310 -#, c-format -msgid "%ls, version %s\n" -msgstr "%ls, version %s\n" - -#: fish_pager.c:118 -#, c-format -msgid "%ls: Argument '%s' is not a valid file descriptor\n" -msgstr "%ls: Argument “%s†is not a valid file descriptor\n" - -#: fish_pager.c:706 -#, c-format -msgid " %d to %d of %d" +#: share/completions/adb.fish:12 +msgid "Run adb devices and parse output" msgstr "" -#: fish_pager.c:1041 -msgid "Could not set up output file descriptors for pager" -msgstr "" - -#: fish_pager.c:1047 -#, -msgid "Could not set up input file descriptors for pager" -msgstr "Could not set up input file descriptors for pager" - -#: fish_pager.c:1053 -msgid "Could not open tty for pager" -msgstr "Could not open tty for pager" - -#: fish_pager.c:1060 -msgid "Could not initialize result pipe" -msgstr "" - -#: fish_pager.c:1111 input.c:336 -msgid "Could not set up terminal" -msgstr "Could not set up terminal" - -#: fish_pager.c:1135 input.c:362 set_color.c:335 -#, c-format -msgid "Error while closing terminfo" -msgstr "Error while closing terminfo" - -#: fish_pager.c:1347 -msgid "Unspecified file descriptors" -msgstr "Unspecified file descriptors" - -#: fish_pager.c:1359 -#, -msgid "Could not read completions" -msgstr "Could not read completions" - -#: fishd.c:465 path.c:286 -msgid "" -"Unable to create a configuration directory for fish. Your personal settings " -"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " -"where the current user has write access." -msgstr "" - -#: io.c:87 -#, c-format -msgid "" -"An error occured while reading output from code block on file descriptor %d" -msgstr "" -"An error occured while reading output from code block on file descriptor %d" - -#: main.c:219 -#, c-format -msgid "Invalid value '%s' for debug level switch" -msgstr "Invalid value “%s†for debug level switch" - -#: main.c:258 mimedb.c:1286 set_color.c:226 -#, c-format -msgid "%s, version %s\n" -msgstr "%s, version %s\n" - -#: main.c:310 -msgid "Can not use the no-execute mode when running an interactive session" -msgstr "Can not use the no-execute mode when running an interactive session" - -#: main.c:388 -#, c-format -msgid "Error while reading file %ls\n" -msgstr "Error while reading file %ls\n" - -#: mimedb.c:157 mimedb.c:171 mimedb.c:1114 -#, c-format -msgid "%s: Out of memory\n" -msgstr "%s: Out of memory\n" - -#: mimedb.c:406 -#, c-format -msgid "%s: Unknown error in munge()\n" -msgstr "%s: Unknown error in munge()\n" - -#: mimedb.c:424 -#, c-format -msgid "%s: Locale string too long\n" -msgstr "%s: Locale string too long\n" - -#: mimedb.c:494 mimedb.c:502 -#, c-format -msgid "%s: Could not compile regular expressions %s with error %s\n" -msgstr "%s: Could not compile regular expressions %s with error %s\n" - -#: mimedb.c:615 -#, c-format -msgid "%s: No description for type %s\n" -msgstr "%s: No description for type %s\n" - -#: mimedb.c:679 -#, c-format -msgid "%s: Could not parse launcher string '%s'\n" -msgstr "%s: Could not parse launcher string “%sâ€\n" - -#: mimedb.c:712 -#, c-format -msgid "%s: Default launcher '%s' does not specify how to start\n" -msgstr "%s: Default launcher “%s†does not specify how to start\n" - -#: mimedb.c:1093 -#, c-format -msgid "%s: Unsupported switch '%c' in launch string '%s'\n" -msgstr "%s: Unsupported switch “%c†in launch string “%sâ€\n" - -#: mimedb.c:1297 -#, c-format -msgid "%s: Can not launch a mimetype\n" -msgstr "%s: Can not launch a mimetype\n" - -#: mimedb.c:1329 -#, c-format -msgid "%s: Could not parse mimetype from argument '%s'\n" -msgstr "%s: Could not parse mimetype from argument “%sâ€\n" - -#: mimedb.c:1349 signal.c:407 signal.c:422 -msgid "Unknown" -msgstr "Unknown" - -#: mimedb.c:1410 -#, c-format -msgid "%s: Unknown error\n" -msgstr "%s: Unknown error\n" - -#: parse_util.c:892 -#, c-format -msgid "Could not autoload item '%ls', it is already being autoloaded. " -msgstr "Could not autoload item “%lsâ€, it is already being autoloaded. " - -#: parser.c:68 -msgid "This command can not be used in a pipeline" -msgstr "This command can not be used in a pipeline" - -#: parser.c:74 -#, c-format -msgid "Tokenizer error: '%ls'" -msgstr "Tokenizer error: “%lsâ€" - -#: parser.c:79 -msgid "An additional command is required" -msgstr "An additional command is required" - -#: parser.c:84 -msgid "Maximum recursion depth reached. Accidental infinite loop?" -msgstr "Maximum recursion depth reached. Accidental infinite loop?" - -#: parser.c:89 -msgid "" -"Could not locate end of block. The 'end' command is missing, misspelled or a " -"';' is missing." -msgstr "" -"Could not locate end of block. The “end†command is missing, misspelled or a " -"“;†is missing." - -#: parser.c:94 -msgid "Maximum number of nested blocks reached." -msgstr "Maximum number of nested blocks reached." - -#: parser.c:99 -#, c-format -msgid "Expected a command name, got token of type '%ls'" -msgstr "Expected a command name, got token of type “%lsâ€" - -#: parser.c:104 -#, c-format -msgid "" -"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; or " -"COMMAND'? See the help section for the 'or' builtin command by typing 'help " -"or'." -msgstr "" -"Expected a command name, got token of type “%lsâ€. Did you mean “COMMAND; or " -"COMMANDâ€? See the help section for the “or†builtin command by typing “help " -"orâ€." - -#: parser.c:109 -#, c-format -msgid "" -"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; and " -"COMMAND'? See the help section for the 'and' builtin command by typing 'help " -"and'." -msgstr "" -"Expected a command name, got token of type “%lsâ€. Did you mean “COMMAND; and " -"COMMANDâ€? See the help section for the “and†builtin command by typing “help " -"andâ€." - -#: parser.c:114 -#, c-format -msgid "Illegal command name '%ls'" -msgstr "Illegal command name “%lsâ€" - -#: parser.c:119 -#, c-format -msgid "Illegal file descriptor '%ls'" -msgstr "Illegal file descriptor “%lsâ€" - -#: parser.c:124 -#, c-format -msgid "Warning: No match for wildcard '%ls'. The command will not be executed." -msgstr "" -"Warning: No match for wildcard “%lsâ€. The command will not be executed." - -#: parser.c:129 -msgid "'case' builtin not inside of switch block" -msgstr "“case†builtin not inside of switch block" - -#: parser.c:134 -msgid "Loop control command while not inside of loop" -msgstr "Loop control command while not inside of loop" - -#: parser.c:139 -msgid "'return' builtin command outside of function definition" -msgstr "“return†builtin command outside of function definition" - -#: parser.c:144 -msgid "'else' builtin not inside of if block" -msgstr "“else†builtin not inside of if block" - -#: parser.c:149 -msgid "'end' command outside of block" -msgstr "“end†command outside of block" - -#: parser.c:154 -#, c-format -msgid "" -"Unknown command '%ls'. Did you mean 'set %ls %ls'? For information on " -"assigning values to variables, see the help section on the set command by " -"typing 'help set'." -msgstr "" -"Unknown command “%lsâ€. Did you mean “set %ls %lsâ€? For information on " -"assigning values to variables, see the help section on the set command by " -"typing “help setâ€." - -#: parser.c:159 -#, c-format -msgid "Expected redirection specification, got token of type '%ls'" -msgstr "Expected redirection specification, got token of type “%lsâ€" - -#: parser.c:164 -msgid "" -"Encountered redirection when expecting a command name. Fish does not allow a " -"redirection operation before a command." -msgstr "" -"Encountered redirection when expecting a command name. Fish does not allow a " -"redirection operation before a command." - -#: parser.c:169 -msgid "Tried to evaluate null pointer." -msgstr "Tried to evaluate null pointer." - -#: parser.c:174 -#, c-format -msgid "Tried to evaluate commands using invalid block type '%ls'" -msgstr "Tried to evaluate commands using invalid block type “%lsâ€" - -#: parser.c:180 -#, c-format -msgid "Unexpected token of type '%ls'" -msgstr "Unexpected token of type “%lsâ€" - -#: parser.c:185 -msgid "'while' block" -msgstr "“while†block" - -#: parser.c:190 -msgid "'for' block" -msgstr "“for†block" - -#: parser.c:195 -msgid "Block created by breakpoint" -msgstr "Block created by breakpoint" - -#: parser.c:202 -msgid "'if' conditional block" -msgstr "“if†conditional block" - -#: parser.c:208 -msgid "function definition block" -msgstr "function definition block" - -#: parser.c:214 -msgid "function invocation block" -msgstr "function invocation block" - -#: parser.c:219 -msgid "function invocation block with no variable shadowing" -msgstr "function invocation block with no variable shadowing" - -#: parser.c:225 -msgid "'switch' block" -msgstr "“switch†block" - -#: parser.c:231 -msgid "unexecutable block" -msgstr "unexecutable block" - -#: parser.c:237 -msgid "global root block" -msgstr "global root block" - -#: parser.c:243 -msgid "command substitution block" -msgstr "command substitution block" - -#: parser.c:249 -msgid "'begin' unconditional block" -msgstr "“begin†unconditional block" - -#: parser.c:255 -msgid "Block created by the . builtin" -msgstr "Block created by the . builtin" - -#: parser.c:260 -msgid "event handler block" -msgstr "event handler block" - -#: parser.c:266 -msgid "unknown/invalid block" -msgstr "unknown/invalid block" - -#: parser.c:761 -#, c-format -msgid "Could not write profiling information to file '%s'" -msgstr "Could not write profiling information to file “%sâ€" - -#: parser.c:767 -msgid "Time\tSum\tCommand\n" -msgstr "Time\tSum\tCommand\n" - -#: parser.c:945 -#, c-format -msgid "in event handler: %ls\n" -msgstr "in event handler: %ls\n" - -#: parser.c:972 -#, c-format -msgid "in . (source) call of file '%ls',\n" -msgstr "in . (source) call of file “%lsâ€,\n" - -#: parser.c:977 -#, c-format -msgid "in function '%ls',\n" -msgstr "in function “%lsâ€,\n" - -#: parser.c:982 -msgid "in command substitution\n" -msgstr "in command substitution\n" - -#: parser.c:992 -#, c-format -msgid "\tcalled on line %d of file '%ls',\n" -msgstr "\tcalled on line %d of file “%lsâ€,\n" - -#: parser.c:999 -msgid "\tcalled on standard input,\n" -msgstr "\tcalled on standard input,\n" - -#: parser.c:1013 -#, c-format -msgid "\twith parameter list '%ls'\n" -msgstr "\twith parameter list “%lsâ€\n" - -#: parser.c:1202 -#, c-format -msgid "%ls (line %d): " -msgstr "%ls (line %d): " - -#: parser.c:1424 -#, c-format -msgid "Could not expand string '%ls'" -msgstr "Could not expand string “%lsâ€" - -#: parser.c:1541 -msgid "Invalid IO redirection" -msgstr "Invalid IO redirection" - -#: parser.c:1595 -#, c-format -msgid "Requested redirection to something that is not a file descriptor %ls" -msgstr "Requested redirection to something that is not a file descriptor %ls" - -#: parser.c:2046 -#, c-format -msgid "" -"Variables may not be used as commands. Instead, define a function like " -"'function %ls; %ls $argv; end'. See the help section for the function " -"command by typing 'help function'." -msgstr "" -"Variables may not be used as commands. Instead, define a function like " -"“function %ls; %ls $argv; endâ€. See the help section for the function " -"command by typing “help functionâ€." - -#: parser.c:2054 -msgid "" -"Variables may not be used as commands. Instead, define a function. See the " -"help section for the function command by typing 'help function'." -msgstr "" -"Variables may not be used as commands. Instead, define a function. See the " -"help section for the function command by typing “help functionâ€." - -#: parser.c:2061 -#, c-format -msgid "" -"Commands may not contain variables. Use the eval builtin instead, like 'eval " -"%ls'. See the help section for the eval command by typing 'help eval'." -msgstr "" -"Commands may not contain variables. Use the eval builtin instead, like “eval " -"%lsâ€. See the help section for the eval command by typing “help evalâ€." - -#: parser.c:2068 -#, c-format -msgid "Unknown command '%ls'" -msgstr "Unknown command “%lsâ€" - -#: parser.c:2551 -msgid "End of block mismatch. Program terminating." -msgstr "End of block mismatch. Program terminating." - -#: path.c:26 -#, c-format -msgid "Error while searching for command '%ls'" -msgstr "Error while searching for command “%lsâ€" - -#: proc.c:155 -msgid "Job inconsistency" -msgstr "Job inconsistency" - -#: proc.c:523 -#, c-format -msgid "Job %d, '%ls' has %ls" -msgstr "Job %d, “%ls†has %ls" - -#: proc.c:609 -#, c-format -msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "%ls: Job %d, “%ls†terminated by signal %ls (%ls)" - -#: proc.c:617 -#, c-format -msgid "" -"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "" -"%ls: Process %d, “%ls†from job %d, “%ls†terminated by signal %ls (%ls)" - -#: proc.c:646 -msgid "ended" -msgstr "ended" - -#: proc.c:873 -msgid "An error occured while reading output from code block" -msgstr "An error occured while reading output from code block" - -#: proc.c:923 proc.c:933 proc.c:943 -msgid "Could not return shell to foreground" -msgstr "Could not return shell to foreground" - -#: proc.c:1149 -msgid "Job command" -msgstr "Job command" - -#: proc.c:1152 proc.c:1179 -msgid "Process list pointer" -msgstr "Process list pointer" - -#: proc.c:1155 -msgid "Job list pointer" -msgstr "Job list pointer" - -#: proc.c:1166 -#, c-format -msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" -msgstr "More than one job in foreground: job 1: “%ls†job 2: “%lsâ€" - -#: proc.c:1177 -msgid "Process argument list" -msgstr "Process argument list" - -#: proc.c:1178 -msgid "Process name" -msgstr "Process name" - -#: proc.c:1180 -msgid "Process command" -msgstr "Process command" - -#: proc.c:1185 -#, c-format -msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" -msgstr "Job “%lsâ€, process “%ls†has inconsistent state “stoppedâ€=%d" - -#: proc.c:1195 -#, c-format -msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" -msgstr "Job “%lsâ€, process “%ls†has inconsistent state “completedâ€=%d" - -#: reader.c:341 -msgid "Could not set terminal mode for new job" -msgstr "Could not set terminal mode for new job" - -#: reader.c:365 -msgid "Could not set terminal mode for shell" -msgstr "Could not set terminal mode for shell" - -#: reader.c:1486 -msgid "Couldn't put the shell in its own process group" -msgstr "Couldn't put the shell in its own process group" - -#: reader.c:1496 -msgid "Couldn't grab control of terminal" -msgstr "Couldn't grab control of terminal" - -#: reader.c:2077 -msgid "Pop null reader block" -msgstr "Pop null reader block" - -#: reader.c:2215 -msgid "There are stopped jobs\n" -msgstr "There are stopped jobs\n" - -#: reader.c:2964 -#, c-format -msgid "Unknown keybinding %d" -msgstr "Unknown keybinding %d" - -#: reader.c:3053 -msgid "Error while reading from file descriptor" -msgstr "Error while reading from file descriptor" - -#: reader.c:3073 -msgid "Error while closing input stream" -msgstr "Error while closing input stream" - -#: reader.c:3101 -#, c-format -msgid "Could not convert input. Read %d bytes." -msgstr "Could not convert input. Read %d bytes." - -#: reader.c:3107 -msgid "Could not read input stream" -msgstr "Could not read input stream" - -#: reader.c:3116 -msgid "Error while opening input stream" -msgstr "Error while opening input stream" - -#: sanity.c:37 -msgid "Errors detected, shutting down" -msgstr "Errors detected, shutting down" - -#: sanity.c:65 -#, c-format -msgid "The pointer '%ls' is invalid" -msgstr "The pointer “%ls†is invalid" - -#: sanity.c:71 -#, c-format -msgid "The pointer '%ls' is null" -msgstr "The pointer “%ls†is null" - -#: set_color.c:253 -#, c-format -msgid "%s: Too many arguments\n" -msgstr "%s: Too many arguments\n" - -#: set_color.c:260 -#, c-format -msgid "%s: Expected an argument\n" -msgstr "%s: Expected an argument\n" - -#: set_color.c:269 set_color.c:277 -#, c-format -msgid "%s: Unknown color '%s'\n" -msgstr "%s: Unknown color “%sâ€\n" - -#: signal.c:69 -msgid "Terminal hung up" -msgstr "Terminal hung up" - -#: signal.c:77 -msgid "Quit request from job control (^C)" -msgstr "Quit request from job control (^C)" - -#: signal.c:85 -msgid "Quit request from job control with core dump (^\\)" -msgstr "Quit request from job control with core dump (^\\)" - -#: signal.c:93 -msgid "Illegal instruction" -msgstr "Illegal instruction" - -#: signal.c:101 -msgid "Trace or breakpoint trap" -msgstr "Trace or breakpoint trap" - -#: signal.c:109 -msgid "Abort" -msgstr "Abort" - -#: signal.c:117 -msgid "Misaligned address error" -msgstr "Misaligned address error" - -#: signal.c:125 -msgid "Floating point exception" -msgstr "Floating point exception" - -#: signal.c:133 -msgid "Forced quit" -msgstr "Forced quit" - -#: signal.c:141 -msgid "User defined signal 1" -msgstr "User defined signal 1" - -#: signal.c:148 -msgid "User defined signal 2" -msgstr "User defined signal 2" - -#: signal.c:156 -msgid "Address boundary error" -msgstr "Address boundary error" - -#: signal.c:164 -msgid "Broken pipe" -msgstr "Broken pipe" - -#: signal.c:172 -msgid "Timer expired" -msgstr "Timer expired" - -#: signal.c:180 -msgid "Polite quit request" -msgstr "Polite quit request" - -#: signal.c:188 -msgid "Child process status changed" -msgstr "Child process status changed" - -#: signal.c:196 -msgid "Continue previously stopped process" -msgstr "Continue previously stopped process" - -#: signal.c:204 -msgid "Forced stop" -msgstr "Forced stop" - -#: signal.c:212 -msgid "Stop request from job control (^Z)" -msgstr "Stop request from job control (^Z)" - -#: signal.c:220 -msgid "Stop from terminal input" -msgstr "Stop from terminal input" - -#: signal.c:228 -msgid "Stop from terminal output" -msgstr "Stop from terminal output" - -#: signal.c:236 -msgid "Urgent socket condition" -msgstr "Urgent socket condition" - -#: signal.c:244 -msgid "CPU time limit exceeded" -msgstr "CPU time limit exceeded" - -#: signal.c:252 -msgid "File size limit exceeded" -msgstr "File size limit exceeded" - -#: signal.c:260 -msgid "Virtual timer expired" -msgstr "Virtual timer expired" - -#: signal.c:268 -msgid "Profiling timer expired" -msgstr "Profiling timer expired" - -#: signal.c:276 signal.c:284 -msgid "Window size change" -msgstr "Window size change" - -#: signal.c:292 -msgid "I/O on asynchronous file descriptor is possible" -msgstr "I/O on asynchronous file descriptor is possible" - -#: signal.c:300 -msgid "Power failure" -msgstr "Power failure" - -#: signal.c:308 -msgid "Bad system call" -msgstr "Bad system call" - -#: signal.c:316 -msgid "Information request" -msgstr "Information request" - -#: signal.c:324 -msgid "Stack fault" -msgstr "Stack fault" - -#: signal.c:332 -msgid "Emulator trap" -msgstr "Emulator trap" - -#: signal.c:340 -msgid "Abort (Alias for SIGABRT)" -msgstr "Abort (Alias for SIGABRT)" - -#: signal.c:348 -msgid "Unused signal" -msgstr "Unused signal" - -#: signal.c:667 -msgid "Signal block mismatch" -msgstr "" - -#: tokenizer.c:30 -msgid "Unexpected end of string, quotes are not balanced" -msgstr "Unexpected end of string, quotes are not balanced" - -#: tokenizer.c:35 -msgid "Unexpected end of string, parenthesis do not match" -msgstr "Unexpected end of string, parenthesis do not match" - -#: tokenizer.c:40 -msgid "Invalid input/output redirection" -msgstr "Invalid input/output redirection" - -#: tokenizer.c:45 -msgid "Can not use fd 0 as pipe output" -msgstr "Can not use fd 0 as pipe output" - -#: tokenizer.c:62 -msgid "Tokenizer not yet initialized" -msgstr "Tokenizer not yet initialized" - -#: tokenizer.c:63 -msgid "Tokenizer error" -msgstr "Tokenizer error" - -#: tokenizer.c:64 -msgid "Invalid token" -msgstr "Invalid token" - -#: tokenizer.c:65 -msgid "String" -msgstr "String" - -#: tokenizer.c:66 -msgid "Pipe" -msgstr "Pipe" - -#: tokenizer.c:67 -msgid "End of command" -msgstr "End of command" - -#: tokenizer.c:68 -msgid "Redirect output to file" -msgstr "Redirect output to file" - -#: tokenizer.c:69 -msgid "Append output to file" -msgstr "Append output to file" - -#: tokenizer.c:70 -msgid "Redirect input to file" -msgstr "Redirect input to file" - -#: tokenizer.c:71 -msgid "Redirect to file descriptor" -msgstr "Redirect to file descriptor" - -#: tokenizer.c:72 -msgid "Redirect output to file if file does not exist" -msgstr "Redirect output to file if file does not exist" - -#: tokenizer.c:73 -msgid "Run job in background" -msgstr "Run job in background" - -#: tokenizer.c:74 -msgid "Comment" -msgstr "Comment" - -#: tokenizer.c:512 -msgid "Invalid token type" -msgstr "Invalid token type" - -#: wgetopt.c:542 -#, c-format -msgid "%ls: Option '%ls' is ambiguous\n" -msgstr "%ls: Option “%ls†is ambiguous\n" - -#: wgetopt.c:566 -#, c-format -msgid "%ls: Option '--%ls' doesn't allow an argument\n" -msgstr "%ls: Option “--%ls†doesn't allow an argument\n" - -#: wgetopt.c:571 -#, c-format -msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" -msgstr "%ls: Option “%lc%ls†doesn't allow an argument\n" - -#: wgetopt.c:585 -#, c-format -msgid "%ls: Option '%ls' requires an argument\n" -msgstr "%ls: Option “%ls†requires an argument\n" - -#: wgetopt.c:613 -#, c-format -msgid "%ls: Unrecognized option '--%ls'\n" -msgstr "%ls: Unrecognized option “--%lsâ€\n" - -#: wgetopt.c:617 -#, c-format -msgid "%ls: Unrecognized option '%lc%ls'\n" -msgstr "%ls: Unrecognized option “%lc%lsâ€\n" - -#: wgetopt.c:642 -#, c-format -msgid "%ls: Illegal option -- %lc\n" -msgstr "%ls: Illegal option -- %lc\n" - -#: wgetopt.c:644 -#, c-format -msgid "%ls: Invalid option -- %lc\n" -msgstr "%ls: Invalid option -- %lc\n" - -#: wgetopt.c:678 -#, c-format -msgid "%ls: Option requires an argument -- %lc\n" -msgstr "%ls: Option requires an argument -- %lc\n" - -#: wildcard.c:58 -msgid "Executable" -msgstr "Executable" - -#: wildcard.c:62 -msgid "Executable link" -msgstr "Executable link" - -#: wildcard.c:67 -msgid "File" -msgstr "File" - -#: wildcard.c:71 -msgid "Character device" -msgstr "Character device" - -#: wildcard.c:75 -msgid "Block device" -msgstr "Block device" - -#: wildcard.c:79 -msgid "Fifo" -msgstr "Fifo" - -#: wildcard.c:83 -msgid "Symbolic link" -msgstr "Symbolic link" - -#: wildcard.c:87 -msgid "Symbolic link to directory" -msgstr "Symbolic link to directory" - -#: wildcard.c:91 -msgid "Rotten symbolic link" -msgstr "Rotten symbolic link" - -#: wildcard.c:95 -msgid "Symbolic link loop" -msgstr "Symbolic link loop" - -#: wildcard.c:99 -msgid "Socket" -msgstr "Socket" - -#: wildcard.c:103 share/completions/ruby.fish:23 -#: share/functions/__fish_complete_directories.fish:8 -msgid "Directory" -msgstr "Directory" - -#: wildcard.c:737 -msgid "empty" -msgstr "empty" - -#: builtin.h:24 -#, c-format -msgid "%ls: Expected argument\n" -msgstr "%ls: Expected argument\n" - -#: builtin.h:34 -#, c-format -msgid "" -"%ls: Invalid combination of options,\n" -"%ls\n" -msgstr "" -"%ls: Invalid combination of options,\n" -"%ls\n" - -#: builtin.h:39 -#, c-format -msgid "%ls: Variable scope can only be one of universal, global and local\n" -msgstr "%ls: Variable scope can only be one of universal, global and local\n" - -#: builtin.h:44 -#, fuzzy, c-format -msgid "%ls: Variable can't be both exported and unexported\n" -msgstr "%ls: Variable can't be both exported and unexported\n" - -#: builtin.h:49 -#, c-format -msgid "%ls: Unknown option '%ls'\n" -msgstr "%ls: Unknown option “%lsâ€\n" - -#: builtin.h:54 -#, c-format -msgid "" -"%ls: Invalid character '%lc' in variable name. Only alphanumerical " -"characters and underscores are valid in a variable name.\n" -msgstr "" -"%ls: Invalid character “%lc†in variable name. Only alphanumerical " -"characters and underscores are valid in a variable name.\n" - -#: builtin.h:59 -#, c-format -msgid "%ls: Variable name can not be the empty string\n" -msgstr "%ls: Variable name can not be the empty string\n" - -#: builtin.h:64 -#, c-format -msgid "%ls: Second argument must be 'in'\n" -msgstr "%ls: Second argument must be “inâ€\n" - -#: builtin.h:69 -#, c-format -msgid "%ls: Expected at least two arguments, got %d\n" -msgstr "%ls: Expected at least two arguments, got %d\n" - -#: builtin.h:71 -#, c-format -msgid "%ls: '%ls' is not a valid variable name\n" -msgstr "%ls: “%ls†is not a valid variable name\n" - -#: builtin.h:81 -#, c-format -msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" -msgstr "%ls: Block mismatch: '%ls' vs. “%lsâ€\n" - -#: builtin.h:86 -#, fuzzy, c-format -msgid "%ls: Unknown block type '%ls'\n" -msgstr "%ls: Unknown block type “%lsâ€\n" - -#: builtin.h:88 -#, c-format -msgid "%ls: Argument '%ls' is not a number\n" -msgstr "%ls: Argument “%ls†is not a number\n" - -#: common.h:100 -#, c-format -msgid "function %s called with null value for argument %s. " -msgstr "" - -#: common.h:140 -#, c-format -msgid "function %s called while blocking signals. " -msgstr "" - -#: exec.h:19 -msgid "An error occurred while setting up pipe" -msgstr "An error occurred while setting up pipe" - -#: expand.h:118 -msgid "Array index out of bounds" -msgstr "Array index out of bounds" - -#: output.h:87 -#, c-format -msgid "" -"Tried to use terminfo string %s on line %d of %s, which is undefined in " -"terminal of type \"%ls\". Please report this error to %s" +#: share/completions/adb.fish:24 +msgid "Runs adb with any -s parameters already given on the command line" msgstr "" #: share/completions/apm.fish:2 share/completions/apropos.fish:20 @@ -1784,7 +1945,10 @@ msgstr "" #: share/completions/apt-sortpkgs.fish:4 share/completions/apt-zip-inst.fish:3 #: share/completions/apt-zip-list.fish:3 share/completions/at.fish:2 #: share/completions/atq.fish:2 share/completions/atrm.fish:2 +#: share/completions/perl.fish:41 share/functions/__fish_complete_diff.fish:26 +#: share/functions/__fish_complete_grep.fish:44 #: share/functions/__fish_complete_ls.fish:96 +#: share/functions/__fish_complete_python.fish:15 #: share/functions/__fish_complete_tex.fish:5 msgid "Display version and exit" msgstr "Display version and exit" @@ -1821,8 +1985,9 @@ msgstr "Print debugging info" #: share/completions/apt-listchanges.fish:4 #: share/completions/apt-proxy-import.fish:4 #: share/completions/apt-show-source.fish:10 +#: share/functions/__fish_complete_python.fish:14 #: share/functions/__fish_complete_ssh.fish:59 -#: share/functions/__fish_complete_vi.fish:106 +#: share/functions/__fish_complete_vi.fish:98 msgid "Verbose mode" msgstr "Verbose mode" @@ -1874,7 +2039,7 @@ msgstr "Download and extract a source" msgid "Info on a package" msgstr "Info on a package" -#: share/completions/apt-build.fish:10 +#: share/completions/apt-build.fish:10 share/completions/zypper.fish:45 msgid "Remove packages" msgstr "Remove packages" @@ -2038,6 +2203,11 @@ msgstr "Specify config file" msgid "Specify options" msgstr "Specify options" +#: share/completions/apt-cache.fish:32 share/completions/apt-get.fish:12 +#: share/completions/apt-mark.fish:12 +msgid "Test if apt command should have packages as potential completion" +msgstr "Test if apt command should have packages as potential completion" + #: share/completions/apt-cdrom.fish:3 msgid "Add new disc to source list" msgstr "Add new disc to source list" @@ -2174,14 +2344,10 @@ msgstr "Use config file" msgid "Set config options" msgstr "Set config options" -#: share/completions/apt-get.fish:3 +#: share/completions/apt-get.fish:3 share/completions/apt-mark.fish:3 msgid "Test if apt has yet to be given the subcommand" msgstr "Test if apt has yet to be given the subcommand" -#: share/completions/apt-get.fish:12 -msgid "Test if apt command should have packages as potential completion" -msgstr "Test if apt command should have packages as potential completion" - #: share/completions/apt-get.fish:24 msgid "Update sources" msgstr "Update sources" @@ -2203,34 +2369,44 @@ msgid "Install one or more packages" msgstr "Install one or more packages" #: share/completions/apt-get.fish:29 -msgid "Remove one or more packages" +#, fuzzy +msgid "Remove and purge one or more packages" msgstr "Remove one or more packages" #: share/completions/apt-get.fish:30 +msgid "Remove one or more packages" +msgstr "Remove one or more packages" + +#: share/completions/apt-get.fish:31 msgid "Fetch source packages" msgstr "Fetch source packages" -#: share/completions/apt-get.fish:31 +#: share/completions/apt-get.fish:32 msgid "Install/remove packages for dependencies" msgstr "Install/remove packages for dependencies" -#: share/completions/apt-get.fish:32 +#: share/completions/apt-get.fish:33 msgid "Update cache and check dependencies" msgstr "Update cache and check dependencies" -#: share/completions/apt-get.fish:33 +#: share/completions/apt-get.fish:34 msgid "Clean local caches and packages" msgstr "Clean local caches and packages" -#: share/completions/apt-get.fish:34 +#: share/completions/apt-get.fish:35 msgid "Clean packages no longer be downloaded" msgstr "Clean packages no longer be downloaded" -#: share/completions/apt-get.fish:62 +#: share/completions/apt-get.fish:36 +#, fuzzy +msgid "Remove automatically installed packages" +msgstr "Query all installed packages" + +#: share/completions/apt-get.fish:65 share/completions/apt-mark.fish:32 msgid "Specify a config file" msgstr "Specify a config file" -#: share/completions/apt-get.fish:63 +#: share/completions/apt-get.fish:66 share/completions/apt-mark.fish:33 msgid "Set a config option" msgstr "Set a config option" @@ -2350,6 +2526,45 @@ msgstr "Display debug info" msgid "Select an option profile" msgstr "Select an option profile" +#: share/completions/apt-mark.fish:24 +#, fuzzy +msgid "Mark a package as automatically installed" +msgstr "Upgrade package if already installed" + +#: share/completions/apt-mark.fish:25 +#, fuzzy +msgid "Mark a package as manually installed" +msgstr "Upgrade package if already installed" + +#: share/completions/apt-mark.fish:26 +msgid "Hold a package, prevent automatic installation or removal" +msgstr "" + +#: share/completions/apt-mark.fish:27 +#, fuzzy +msgid "Cancel a hold on a package" +msgstr "Info on a package" + +#: share/completions/apt-mark.fish:28 +#, fuzzy +msgid "Show automatically installed packages" +msgstr "Query all installed packages" + +#: share/completions/apt-mark.fish:29 +#, fuzzy +msgid "Show manually installed packages" +msgstr "Query all installed packages" + +#: share/completions/apt-mark.fish:30 +#, fuzzy +msgid "Show held packages" +msgstr "Show upgraded packages" + +#: share/completions/apt-mark.fish:34 +#, fuzzy +msgid "Write package statistics to a file" +msgstr "Write prototypes to file" + #: share/completions/apt-move.fish:4 msgid "Move packages to local tree" msgstr "Move packages to local tree" @@ -2609,7 +2824,6 @@ msgid "Specify a dir" msgstr "Specify a dir" #: share/completions/apt-src.fish:19 -#, msgid "Omit debian version" msgstr "Omit debian version" @@ -2818,7 +3032,241 @@ msgstr "Debug mode" msgid "Process at queue only once" msgstr "Process at queue only once" +#: share/completions/bundle.fish:3 +#, fuzzy +msgid "Test if bundle has been given no subcommand" +msgstr "Test if aptitude has yet to be given the subcommand" + +#: share/completions/bundle.fish:11 +#, fuzzy +msgid "Test if bundle has been given a specific subcommand" +msgstr "Test if aptitude has yet to be given the subcommand" + +#: share/completions/bundle.fish:30 +#, fuzzy +msgid "Display a help page" +msgstr "Display man page" + +#: share/completions/bundle.fish:38 share/completions/bundle.fish:65 +msgid "Install the gems specified by the Gemfile or Gemfile.lock" +msgstr "" + +#: share/completions/bundle.fish:39 share/completions/bundle.fish:87 +msgid "The location of the Gemfile bundler should use." +msgstr "" + +#: share/completions/bundle.fish:40 +#, fuzzy +msgid "The location to install the gems in the bundle to." +msgstr "Commit an unversioned file or tree into the repository" + +#: share/completions/bundle.fish:41 +msgid "Installs the gems in the bundle to the system location." +msgstr "" + +#: share/completions/bundle.fish:42 +msgid "A space-separated list of groups to skip installing." +msgstr "" + +#: share/completions/bundle.fish:43 +msgid "Use cached gems instead of connecting to rubygems.org." +msgstr "" + +#: share/completions/bundle.fish:44 +msgid "Switches bundler's defaults into deployment mode." +msgstr "" + +#: share/completions/bundle.fish:45 +msgid "" +"Create a directory containing executabes that run in the context of the " +"bundle." +msgstr "" + +#: share/completions/bundle.fish:46 +msgid "Specify a ruby executable to use with generated binstubs." +msgstr "" + +#: share/completions/bundle.fish:47 +msgid "Make a bundle that can work without RubyGems or Bundler at run-time." +msgstr "" + +#: share/completions/bundle.fish:48 +msgid "Apply a RubyGems security policy: {High,Medium,Low,No}Security" +msgstr "" + +#: share/completions/bundle.fish:49 +msgid "Do not update the cache in vendor/cache with the newly bundled gems." +msgstr "" + +#: share/completions/bundle.fish:50 +#, fuzzy +msgid "Do not print progress information to stdout." +msgstr "Don't print group information" + +#: share/completions/bundle.fish:53 share/completions/bundle.fish:66 +#, fuzzy +msgid "Update dependencies to their latest versions" +msgstr "Updates packages to the best version available" + +#: share/completions/bundle.fish:54 +msgid "The name of a :git or :path source used in the Gemfile." +msgstr "" + +#: share/completions/bundle.fish:58 +msgid "" +"Package the .gem files required by your application into the vendor/cache " +"directory" +msgstr "" + +#: share/completions/bundle.fish:61 share/completions/bundle.fish:68 +msgid "Execute a script in the context of the current bundle" +msgstr "" + +#: share/completions/bundle.fish:64 +msgid "Describe available tasks or one specific task" +msgstr "" + +#: share/completions/bundle.fish:67 +#, fuzzy +msgid "Package .gem files into the vendor/cache directory" +msgstr "Change working directory" + +#: share/completions/bundle.fish:69 +msgid "Check bundler requirements for your application" +msgstr "" + +#: share/completions/bundle.fish:70 share/completions/bundle.fish:92 +#, fuzzy +msgid "Show all of the gems in the current bundle" +msgstr "Do not ever ascend to the parent directory" + +#: share/completions/bundle.fish:71 share/completions/bundle.fish:96 +#, fuzzy +msgid "Show the source location of a particular gem in the bundle" +msgstr "Show the process id of each process in the job" + +#: share/completions/bundle.fish:72 share/completions/bundle.fish:100 +msgid "Show all of the outdated gems in the current bundle" +msgstr "" + +#: share/completions/bundle.fish:73 share/completions/bundle.fish:107 +msgid "Start an IRB session in the context of the current bundle" +msgstr "" + +#: share/completions/bundle.fish:74 share/completions/bundle.fish:110 +#, sh-format +msgid "Open an installed gem in your $EDITOR" +msgstr "" + +#: share/completions/bundle.fish:75 share/completions/bundle.fish:114 +msgid "Generate a visual representation of your dependencies" +msgstr "" + +#: share/completions/bundle.fish:76 +#, fuzzy +msgid "Generate a simple Gemfile" +msgstr "Generate master file" + +#: share/completions/bundle.fish:77 share/completions/bundle.fish:125 +msgid "Create a simple gem, suitable for development with bundler" +msgstr "" + +#: share/completions/bundle.fish:78 share/completions/bundle.fish:131 +#, fuzzy +msgid "Displays platform compatibility information" +msgstr "Display update information" + +#: share/completions/bundle.fish:79 share/completions/bundle.fish:135 +msgid "Cleans up unused gems in your bundler directory" +msgstr "" + +#: share/completions/bundle.fish:86 +msgid "" +"Determine whether the requirements for your application are installed and " +"available to bundler" +msgstr "" + +#: share/completions/bundle.fish:88 +msgid "Specify a path other than the system default (BUNDLE_PATH or GEM_HOME)." +msgstr "" + +#: share/completions/bundle.fish:89 +#, fuzzy +msgid "Lock the Gemfile" +msgstr "Log to tracefile" + +#: share/completions/bundle.fish:93 +msgid "List the paths of all gems required by your Gemfile" +msgstr "" + +#: share/completions/bundle.fish:101 +#, fuzzy +msgid "Check for newer pre-release gems" +msgstr "Check for memory leaks" + +#: share/completions/bundle.fish:102 +msgid "Check against a specific source" +msgstr "" + +#: share/completions/bundle.fish:103 +msgid "Use cached gems instead of attempting to fetch gems remotely" +msgstr "" + +#: share/completions/bundle.fish:115 +msgid "The name to use for the generated file (see format option)" +msgstr "" + +#: share/completions/bundle.fish:116 +#, fuzzy +msgid "Show each gem version" +msgstr "Source tree version" + +#: share/completions/bundle.fish:117 +msgid "Show the version of each required dependency" +msgstr "" + +#: share/completions/bundle.fish:118 +msgid "Output a specific format (png, jpg, svg, dot, ...)" +msgstr "" + +#: share/completions/bundle.fish:121 +#, fuzzy +msgid "Generate a simple Gemfile, placed in the current directory" +msgstr "Do not ever ascend to the parent directory" + +#: share/completions/bundle.fish:122 +msgid "Use a specified .gemspec to create the Gemfile" +msgstr "" + +#: share/completions/bundle.fish:126 +msgid "Generate a binary for your library" +msgstr "" + +#: share/completions/bundle.fish:127 +msgid "Generate a test directory for your library (rspec or minitest)" +msgstr "" + +#: share/completions/bundle.fish:128 +#, fuzzy +msgid "Path to your editor" +msgstr "Set source directory" + +#: share/completions/bundle.fish:132 +#, fuzzy +msgid "Only display Ruby directive information" +msgstr "Display update information" + +#: share/completions/bundle.fish:136 +msgid "Only print out changes, do not actually clean gems" +msgstr "" + +#: share/completions/bundle.fish:137 +msgid "Forces clean even if --path is not set" +msgstr "" + #: share/completions/configure.fish:1 +#: share/functions/__fish_complete_diff.fish:27 +#: share/functions/__fish_complete_grep.fish:22 #: share/functions/__fish_complete_ls.fish:95 #: share/functions/__fish_complete_tex.fish:4 msgid "Display help and exit" @@ -2844,248 +3292,248 @@ msgstr "Control creation of sparse files" msgid "Set security context of copy to CONTEXT" msgstr "Set security context of copy to CONTEXT" -#: share/completions/cut.fish:1 +#: share/completions/cut.fish:2 msgid "Output byte range" msgstr "Output byte range" -#: share/completions/cut.fish:2 +#: share/completions/cut.fish:3 msgid "Output character range" msgstr "Output character range" -#: share/completions/cut.fish:3 +#: share/completions/cut.fish:4 msgid "Select field delimiter" msgstr "Select field delimiter" -#: share/completions/cut.fish:4 +#: share/completions/cut.fish:5 msgid "Select fields" msgstr "Select fields" -#: share/completions/cvs.fish:25 +#: share/completions/cvs.fish:26 #, fuzzy msgid "Use \\tmpdir for temporary files." msgstr "Use tmpdir for temporary files" -#: share/completions/cvs.fish:26 +#: share/completions/cvs.fish:27 #, fuzzy msgid "Use \\editor for editing log information." msgstr "Use editor for editing log information" -#: share/completions/cvs.fish:27 +#: share/completions/cvs.fish:28 #, sh-format msgid "Overrides $CVSROOT as the root of the CVS tree." msgstr "" -#: share/completions/cvs.fish:29 +#: share/completions/cvs.fish:30 #, fuzzy -msgid "Use compression level \\# for net traffic." +msgid "Request compression level \\# for net traffic." msgstr "Compression level for net traffic" -#: share/completions/cvs.fish:34 +#: share/completions/cvs.fish:35 #, fuzzy msgid "Set CVS user variable." msgstr "Set CVS user variable" -#: share/completions/cvs.fish:40 +#: share/completions/cvs.fish:41 msgid "Add a new file/directory to the repository" msgstr "Add a new file/directory to the repository" -#: share/completions/cvs.fish:41 +#: share/completions/cvs.fish:42 msgid "Administration front end for rcs" msgstr "Administration front end for rcs" -#: share/completions/cvs.fish:42 +#: share/completions/cvs.fish:43 msgid "Show last revision where each line was modified" msgstr "Show last revision where each line was modified" -#: share/completions/cvs.fish:43 +#: share/completions/cvs.fish:44 msgid "Checkout sources for editing" msgstr "Checkout sources for editing" -#: share/completions/cvs.fish:44 +#: share/completions/cvs.fish:45 msgid "Check files into the repository" msgstr "Check files into the repository" -#: share/completions/cvs.fish:45 +#: share/completions/cvs.fish:46 msgid "Show differences between revisions" msgstr "Show differences between revisions" -#: share/completions/cvs.fish:46 +#: share/completions/cvs.fish:47 msgid "Get ready to edit a watched file" msgstr "Get ready to edit a watched file" -#: share/completions/cvs.fish:47 +#: share/completions/cvs.fish:48 msgid "See who is editing a watched file" msgstr "See who is editing a watched file" -#: share/completions/cvs.fish:48 +#: share/completions/cvs.fish:49 msgid "Export sources from CVS, similar to checkout" msgstr "Export sources from CVS, similar to checkout" -#: share/completions/cvs.fish:49 +#: share/completions/cvs.fish:50 msgid "Show repository access history" msgstr "Show repository access history" -#: share/completions/cvs.fish:50 +#: share/completions/cvs.fish:51 msgid "Import sources into CVS, using vendor branches" msgstr "Import sources into CVS, using vendor branches" -#: share/completions/cvs.fish:51 +#: share/completions/cvs.fish:52 #, fuzzy msgid "Create a CVS repository if it doesn\\t" msgstr "Create a CVS repository if it doesnt exist" -#: share/completions/cvs.fish:88 +#: share/completions/cvs.fish:91 msgid "Set comment leader." msgstr "" -#: share/completions/cvs.fish:91 +#: share/completions/cvs.fish:94 #, fuzzy msgid "Set keyword substitution mode:" msgstr "Set the default keyword substitution" -#: share/completions/cvs.fish:94 +#: share/completions/cvs.fish:97 #, fuzzy msgid "Replace revision\\s" msgstr "Merge revisions" -#: share/completions/cvs.fish:132 +#: share/completions/cvs.fish:135 msgid "Check out revision or tag. (implies -P) (is sticky)" msgstr "" -#: share/completions/cvs.fish:133 +#: share/completions/cvs.fish:136 msgid "Check out revisions as of date. (implies -P) (is sticky)" msgstr "" -#: share/completions/cvs.fish:134 +#: share/completions/cvs.fish:137 msgid "Check out into dir instead of module name." msgstr "" -#: share/completions/cvs.fish:135 +#: share/completions/cvs.fish:138 msgid "Use RCS kopt -k option on checkout. (is sticky)" msgstr "" -#: share/completions/cvs.fish:136 +#: share/completions/cvs.fish:139 msgid "Merge in changes made between current revision and rev." msgstr "" -#: share/completions/cvs.fish:146 +#: share/completions/cvs.fish:150 #, fuzzy msgid "Read the log message from file." msgstr "Read log message from file" -#: share/completions/cvs.fish:147 +#: share/completions/cvs.fish:151 #, fuzzy msgid "Log message." msgstr "Replace a log message" -#: share/completions/cvs.fish:148 +#: share/completions/cvs.fish:152 msgid "Commit to this branch or trunk revision." msgstr "" -#: share/completions/cvs.fish:157 +#: share/completions/cvs.fish:161 #, fuzzy msgid "Specify keyword expansion mode." msgstr "Specify kernel version" -#: share/completions/cvs.fish:158 +#: share/completions/cvs.fish:162 msgid "Diff revision for date against working file." msgstr "" -#: share/completions/cvs.fish:159 +#: share/completions/cvs.fish:163 msgid "Diff rev1/date1 against date2." msgstr "" -#: share/completions/cvs.fish:160 +#: share/completions/cvs.fish:164 msgid "Diff revision for rev1 against working file." msgstr "" -#: share/completions/cvs.fish:161 +#: share/completions/cvs.fish:165 msgid "Diff rev1/date1 against rev2." msgstr "" -#: share/completions/cvs.fish:166 +#: share/completions/cvs.fish:170 #, fuzzy msgid "--ignore-matching-lines=RE Ignore changes whose lines all match RE." msgstr "Ignore changes whose lines match the REGEX" -#: share/completions/cvs.fish:172 +#: share/completions/cvs.fish:176 msgid "--label LABEL Use LABEL instead of file name." msgstr "" -#: share/completions/cvs.fish:174 +#: share/completions/cvs.fish:178 msgid "--show-function-line=RE Show the most recent line matching RE." msgstr "" -#: share/completions/cvs.fish:180 +#: share/completions/cvs.fish:184 msgid "--width=NUM Output at most NUM (default 130) characters per line." msgstr "" -#: share/completions/cvs.fish:222 +#: share/completions/cvs.fish:228 #, fuzzy msgid "Export tagged revisions." msgstr "Merge revisions" -#: share/completions/cvs.fish:223 +#: share/completions/cvs.fish:229 msgid "Export revisions as of date." msgstr "" -#: share/completions/cvs.fish:224 +#: share/completions/cvs.fish:230 msgid "Export into dir instead of module name." msgstr "" -#: share/completions/cvs.fish:225 +#: share/completions/cvs.fish:231 msgid "Use RCS kopt -k option on checkout." msgstr "" -#: share/completions/cvs.fish:235 +#: share/completions/cvs.fish:241 msgid "Look for specified module (repeatable)" msgstr "" -#: share/completions/cvs.fish:236 +#: share/completions/cvs.fish:242 #, fuzzy msgid "Extract by record type" msgstr "Specify record type" -#: share/completions/cvs.fish:241 +#: share/completions/cvs.fish:247 #, fuzzy msgid "Since date (Many formats)" msgstr "Profile data format" -#: share/completions/cvs.fish:242 +#: share/completions/cvs.fish:248 msgid "Back to record with str in module/file/repos field" msgstr "" -#: share/completions/cvs.fish:243 +#: share/completions/cvs.fish:249 msgid "Specified file (same as command line) (repeatable)" msgstr "" -#: share/completions/cvs.fish:244 +#: share/completions/cvs.fish:250 msgid "In module (repeatable)" msgstr "" -#: share/completions/cvs.fish:245 +#: share/completions/cvs.fish:251 msgid "In repository (repeatable)" msgstr "" -#: share/completions/cvs.fish:246 +#: share/completions/cvs.fish:252 msgid "Since rev or tag (looks inside RCS files!)" msgstr "" -#: share/completions/cvs.fish:247 +#: share/completions/cvs.fish:253 msgid "Since tag record placed in history file (by anyone)." msgstr "" -#: share/completions/cvs.fish:248 +#: share/completions/cvs.fish:254 msgid "For user name (repeatable)" msgstr "" -#: share/completions/cvs.fish:249 +#: share/completions/cvs.fish:255 msgid "Output for time zone (e.g. -z -0700)" msgstr "" #: share/completions/darcs.fish:19 #, fuzzy -msgid "Display help for darcs or a single commands" +msgid "Display help about darcs and darcs commands" msgstr "Displays usage information for command" #: share/completions/darcs.fish:20 @@ -3093,32 +3541,37 @@ msgid "Add one or more new files or directories" msgstr "Add one or more new files or directories" #: share/completions/darcs.fish:21 -msgid "Remove one or more files or directories from the repository" -msgstr "Remove one or more files or directories from the repository" +#, fuzzy +msgid "Remove files from version control" +msgstr "Place files or directories under version control" #: share/completions/darcs.fish:22 -msgid "Move/rename one or more files or directories" -msgstr "Move/rename one or more files or directories" +#, fuzzy +msgid "Move or rename files" +msgstr "Do not create file" #: share/completions/darcs.fish:23 -msgid "Replace a token with a new value for that token" -msgstr "Replace a token with a new value for that token" +msgid "Substitute one word for another" +msgstr "" #: share/completions/darcs.fish:24 -msgid "Revert to the recorded version (safe the first time only)" -msgstr "Revert to the recorded version (safe the first time only)" +#, fuzzy +msgid "Discard unrecorded changes" +msgstr "Display unrecorded changes in the working copy" #: share/completions/darcs.fish:25 msgid "Undo the last revert (may fail if changes after the revert)" msgstr "Undo the last revert (may fail if changes after the revert)" #: share/completions/darcs.fish:26 -msgid "Display unrecorded changes in the working copy" +#, fuzzy +msgid "List unrecorded changes in the working tree" msgstr "Display unrecorded changes in the working copy" #: share/completions/darcs.fish:27 -msgid "Save changes in the working copy to the repository as a patch" -msgstr "Save changes in the working copy to the repository as a patch" +#, fuzzy +msgid "Create a patch from unrecorded changes" +msgstr "Create compressed patches" #: share/completions/darcs.fish:28 msgid "Remove recorded patches without changing the working copy" @@ -3126,256 +3579,287 @@ msgstr "Remove recorded patches without changing the working copy" #: share/completions/darcs.fish:29 #, fuzzy -msgid "Replace a patch with a better version before it leaves your repository" +msgid "Improve a patch before it leaves your repository" msgstr "Replace a recorded patch with a better version" #: share/completions/darcs.fish:30 -msgid "Mark any conflicts to the working copy for manual resolution" +#, fuzzy +msgid "Mark unresolved conflicts in working tree, for manual resolution" msgstr "Mark any conflicts to the working copy for manual resolution" #: share/completions/darcs.fish:31 -msgid "Tag the contents of the repository with a version name" -msgstr "Tag the contents of the repository with a version name" +msgid "Name the current repository state for future reference" +msgstr "" #: share/completions/darcs.fish:32 -msgid "Set a value for a preference (test, predist, ...)" +#, fuzzy +msgid "Set a preference (test, predist, boringfile or binariesfile)" msgstr "Set a value for a preference (test, predist, ...)" #: share/completions/darcs.fish:33 -#, fuzzy -msgid "Record an inverse patch without changing the working directory" -msgstr "Record an inverse patch without changing the working copy" - -#: share/completions/darcs.fish:34 msgid "Create a diff between two versions of the repository" msgstr "Create a diff between two versions of the repository" -#: share/completions/darcs.fish:35 +#: share/completions/darcs.fish:34 #, fuzzy -msgid "Gives a changelog-style summary of the repository history" -msgstr "Gives a changelog style summary of the repo history" +msgid "List patches in the repository" +msgstr "Update the repository" -#: share/completions/darcs.fish:36 +#: share/completions/darcs.fish:35 msgid "Display which patch last modified something" msgstr "Display which patch last modified something" -#: share/completions/darcs.fish:37 +#: share/completions/darcs.fish:36 msgid "Create a distribution tarball" msgstr "Create a distribution tarball" -#: share/completions/darcs.fish:38 +#: share/completions/darcs.fish:37 msgid "Locate the most recent version lacking an error" msgstr "Locate the most recent version lacking an error" -#: share/completions/darcs.fish:39 -msgid "Query information which is stored by darcs" +#: share/completions/darcs.fish:38 +msgid "Show information which is stored by darcs" msgstr "" -#: share/completions/darcs.fish:40 +#: share/completions/darcs.fish:39 msgid "Copy and apply patches from another repository to this one" msgstr "Copy and apply patches from another repository to this one" -#: share/completions/darcs.fish:41 -#, fuzzy -msgid "Opposite of pull; unsafe if patch is not in remote repository" -msgstr "Opposite of pull; unsafe if the patch is not in remote repo" - -#: share/completions/darcs.fish:42 +#: share/completions/darcs.fish:40 msgid "Delete selected patches from the repository. (UNSAFE!)" msgstr "" -#: share/completions/darcs.fish:43 +#: share/completions/darcs.fish:41 +msgid "Record a new patch reversing some recorded changes" +msgstr "" + +#: share/completions/darcs.fish:42 msgid "Copy and apply patches from this repository to another one" msgstr "Copy and apply patches from this repository to another one" -#: share/completions/darcs.fish:44 +#: share/completions/darcs.fish:43 msgid "Send by email a bundle of one or more patches" msgstr "Send by email a bundle of one or more patches" -#: share/completions/darcs.fish:45 -msgid "Apply patches (from an email bundle) to the repository" -msgstr "Apply patches (from an email bundle) to the repository" - -#: share/completions/darcs.fish:46 -msgid "Create a local copy of another repository" -msgstr "Create a local copy of another repository" - -#: share/completions/darcs.fish:47 -#, fuzzy -msgid "Makes a copy of the repository" -msgstr "Create a local copy of another repository" - -#: share/completions/darcs.fish:48 -msgid "Initialize a new source tree as a darcs repository" +#: share/completions/darcs.fish:44 +msgid "" +"Apply a patch bundle created by `darcs send\\\n" +"complete -c darcs -n __fish_use_subcommand -x -a get --description Create" msgstr "" -#: share/completions/darcs.fish:49 -msgid "Optimize the repository" -msgstr "Optimize the repository" +#: share/completions/darcs.fish:71 share/completions/darcs.fish:220 +#: share/completions/darcs.fish:283 share/completions/darcs.fish:439 +#: share/completions/darcs.fish:597 share/completions/darcs.fish:632 +#: share/completions/darcs.fish:663 share/completions/darcs.fish:688 +#: share/completions/darcs.fish:801 share/completions/darcs.fish:959 +#: share/completions/darcs.fish:1010 share/completions/darcs.fish:1054 +#: share/completions/darcs.fish:1095 share/completions/darcs.fish:1122 +#: share/completions/darcs.fish:1155 +msgid "Specify command to run before this darcs command" +msgstr "" -#: share/completions/darcs.fish:50 -msgid "Check the repository for consistency" -msgstr "Check the repository for consistency" +#: share/completions/darcs.fish:101 share/completions/darcs.fish:127 +#: share/completions/darcs.fish:156 share/completions/darcs.fish:186 +#: share/completions/darcs.fish:244 share/completions/darcs.fish:324 +#: share/completions/darcs.fish:363 share/completions/darcs.fish:406 +#: share/completions/darcs.fish:467 share/completions/darcs.fish:492 +#: share/completions/darcs.fish:840 share/completions/darcs.fish:1004 +#: share/completions/darcs.fish:1207 +msgid "Specify umask to use when writing" +msgstr "" -#: share/completions/darcs.fish:51 -msgid "Repair the corrupted repository" -msgstr "Repair the corrupted repository" - -#: share/completions/darcs.fish:85 share/completions/darcs.fish:228 -#: share/completions/darcs.fish:252 share/completions/darcs.fish:410 -#: share/completions/darcs.fish:434 share/completions/darcs.fish:465 -#: share/completions/darcs.fish:510 share/completions/darcs.fish:560 -#: share/completions/darcs.fish:593 share/completions/darcs.fish:636 -#: share/completions/darcs.fish:674 share/completions/darcs.fish:704 +#: share/completions/darcs.fish:102 share/completions/darcs.fish:128 +#: share/completions/darcs.fish:157 share/completions/darcs.fish:187 +#: share/completions/darcs.fish:245 share/completions/darcs.fish:326 +#: share/completions/darcs.fish:364 share/completions/darcs.fish:408 +#: share/completions/darcs.fish:468 share/completions/darcs.fish:493 +#: share/completions/darcs.fish:537 share/completions/darcs.fish:753 +#: share/completions/darcs.fish:841 share/completions/darcs.fish:893 +#: share/completions/darcs.fish:1183 share/completions/darcs.fish:1208 +#: share/completions/darcs.fish:1239 msgid "Specify command to run after this darcs command" msgstr "" -#: share/completions/darcs.fish:225 share/completions/darcs.fish:249 -#: share/completions/darcs.fish:405 share/completions/darcs.fish:431 -#: share/completions/darcs.fish:462 share/completions/darcs.fish:557 -#: share/completions/darcs.fish:632 share/completions/darcs.fish:700 -#: share/completions/darcs.fish:717 +#: share/completions/darcs.fish:116 share/completions/darcs.fish:146 +#: share/completions/darcs.fish:203 share/completions/darcs.fish:234 +#: share/completions/darcs.fish:264 share/completions/darcs.fish:352 +#: share/completions/darcs.fish:456 share/completions/darcs.fish:482 +#: share/completions/darcs.fish:525 share/completions/darcs.fish:725 +#: share/completions/darcs.fish:779 share/completions/darcs.fish:829 +#: share/completions/darcs.fish:870 share/completions/darcs.fish:985 +#: share/completions/darcs.fish:1073 share/completions/darcs.fish:1197 msgid "Specify the repository directory in which to run" msgstr "Specify the repository directory in which to run" -#: share/completions/darcs.fish:238 share/completions/darcs.fish:520 +#: share/completions/darcs.fish:171 +#, fuzzy +msgid "Define token to contain these characters" +msgstr "Dont split mutibyte characters" + +#: share/completions/darcs.fish:340 share/completions/darcs.fish:554 +#: share/completions/darcs.fish:767 msgid "Select changes starting with a patch matching PATTERN" msgstr "Select changes starting with a patch matching PATTERN" -#: share/completions/darcs.fish:239 share/completions/darcs.fish:521 +#: share/completions/darcs.fish:341 share/completions/darcs.fish:555 +#: share/completions/darcs.fish:768 msgid "Select changes starting with a patch matching REGEXP" msgstr "Select changes starting with a patch matching REGEXP" -#: share/completions/darcs.fish:240 share/completions/darcs.fish:522 +#: share/completions/darcs.fish:342 share/completions/darcs.fish:556 +#: share/completions/darcs.fish:769 msgid "Select changes starting with a tag matching REGEXP" msgstr "Select changes starting with a tag matching REGEXP" -#: share/completions/darcs.fish:241 share/completions/darcs.fish:523 +#: share/completions/darcs.fish:343 share/completions/darcs.fish:557 +#: share/completions/darcs.fish:770 msgid "Select the last NUMBER patches" msgstr "Select the last NUMBER patches" -#: share/completions/darcs.fish:242 share/completions/darcs.fish:482 -#: share/completions/darcs.fish:524 share/completions/darcs.fish:573 -#: share/completions/darcs.fish:606 +#: share/completions/darcs.fish:344 share/completions/darcs.fish:559 +#: share/completions/darcs.fish:771 share/completions/darcs.fish:855 +#: share/completions/darcs.fish:907 msgid "Select patches matching PATTERN" msgstr "Select patches matching PATTERN" -#: share/completions/darcs.fish:243 share/completions/darcs.fish:483 -#: share/completions/darcs.fish:525 share/completions/darcs.fish:574 -#: share/completions/darcs.fish:607 +#: share/completions/darcs.fish:345 share/completions/darcs.fish:560 +#: share/completions/darcs.fish:772 share/completions/darcs.fish:856 +#: share/completions/darcs.fish:908 msgid "Select patches matching REGEXP" msgstr "Select patches matching REGEXP" -#: share/completions/darcs.fish:244 share/completions/darcs.fish:484 -#: share/completions/darcs.fish:526 share/completions/darcs.fish:575 -#: share/completions/darcs.fish:608 +#: share/completions/darcs.fish:346 share/completions/darcs.fish:561 +#: share/completions/darcs.fish:773 share/completions/darcs.fish:857 +#: share/completions/darcs.fish:909 msgid "Select tags matching REGEXP" msgstr "Select tags matching REGEXP" -#: share/completions/darcs.fish:262 share/completions/darcs.fish:427 -msgid "Select patch matching PATTERN" +#: share/completions/darcs.fish:378 +#, fuzzy +msgid "Select a single patch matching PATTERN" msgstr "Select patch matching PATTERN" -#: share/completions/darcs.fish:263 share/completions/darcs.fish:428 -msgid "Select patch matching REGEXP" +#: share/completions/darcs.fish:379 +#, fuzzy +msgid "Select a single patch matching REGEXP" msgstr "Select patch matching REGEXP" -#: share/completions/darcs.fish:404 -msgid "Specify the repository URL" -msgstr "Specify the repository URL" - -#: share/completions/darcs.fish:429 share/completions/darcs.fish:689 -#: share/completions/darcs.fish:720 -msgid "Select tag matching REGEXP" -msgstr "Select tag matching REGEXP" - -#: share/completions/darcs.fish:430 -msgid "Specify hash of creator patch (see docs)" -msgstr "Specify hash of creator patch (see docs)" - -#: share/completions/darcs.fish:444 +#: share/completions/darcs.fish:380 #, fuzzy -msgid "Name of version" -msgstr "Negate expression" +msgid "Select one patch" +msgstr "Select an action" -#: share/completions/darcs.fish:489 -msgid "Use external tool to merge conflicts" -msgstr "Use external tool to merge conflicts" - -#: share/completions/darcs.fish:578 share/completions/darcs.fish:722 -msgid "Apply patch as another user using sudo" -msgstr "" - -#: share/completions/darcs.fish:611 -msgid "Specify email address" -msgstr "Specify email address" - -#: share/completions/darcs.fish:612 +#: share/completions/darcs.fish:387 share/completions/darcs.fish:916 msgid "Specify author id" msgstr "Specify author id" -#: share/completions/darcs.fish:613 +#: share/completions/darcs.fish:388 +msgid "Name of patch" +msgstr "Name of patch" + +#: share/completions/darcs.fish:501 +msgid "Shell command that runs regression tests" +msgstr "" + +#: share/completions/darcs.fish:502 +msgid "" +"Shell command to run before `darcs dist\\\n" +"complete -c darcs -n contains" +msgstr "" + +#: share/completions/darcs.fish:551 share/completions/darcs.fish:1025 +msgid "Select changes up to a patch matching PATTERN" +msgstr "Select changes up to a patch matching PATTERN" + +#: share/completions/darcs.fish:552 share/completions/darcs.fish:1026 +msgid "Select changes up to a patch matching REGEXP" +msgstr "Select changes up to a patch matching REGEXP" + +#: share/completions/darcs.fish:553 +msgid "Select changes up to a tag matching REGEXP" +msgstr "Select changes up to a tag matching REGEXP" + +#: share/completions/darcs.fish:558 +#, fuzzy +msgid "Select a range of patches" +msgstr "Select the last NUMBER patches" + +#: share/completions/darcs.fish:562 +msgid "Return only NUMBER results" +msgstr "" + +#: share/completions/darcs.fish:713 share/completions/darcs.fish:980 +msgid "Use external tool to merge conflicts" +msgstr "Use external tool to merge conflicts" + +#: share/completions/darcs.fish:752 share/completions/darcs.fish:892 +#: share/completions/darcs.fish:1238 +msgid "Name of the darcs executable on the remote server" +msgstr "" + +#: share/completions/darcs.fish:864 share/completions/darcs.fish:923 +msgid "Sign the patch with a given keyid" +msgstr "Sign the patch with a given keyid" + +#: share/completions/darcs.fish:865 share/completions/darcs.fish:924 +msgid "Sign the patch using openssl with a given private key" +msgstr "Sign the patch using openssl with a given private key" + +#: share/completions/darcs.fish:886 +#, fuzzy +msgid "Specify the remote repository URL to work with" +msgstr "Specify the repository URL" + +#: share/completions/darcs.fish:915 +msgid "Specify email address" +msgstr "Specify email address" + +#: share/completions/darcs.fish:917 msgid "Specify destination email" msgstr "Specify destination email" -#: share/completions/darcs.fish:614 -msgid "Mail results to additional EMAIL(s). Requires --reply" +#: share/completions/darcs.fish:918 +#, fuzzy +msgid "Mail results to additional EMAIL(s)" msgstr "Mail results to additional EMAIL(s). Requires --reply" -#: share/completions/darcs.fish:615 +#: share/completions/darcs.fish:919 #, fuzzy msgid "Specify mail subject" msgstr "Specify makefile" -#: share/completions/darcs.fish:616 +#: share/completions/darcs.fish:920 +#, fuzzy +msgid "Specify in-reply-to header" +msgstr "Specify index dir" + +#: share/completions/darcs.fish:921 msgid "Specify output filename" msgstr "Specify output filename" -#: share/completions/darcs.fish:618 -msgid "Sign the patch with a given keyid" -msgstr "Sign the patch with a given keyid" +#: share/completions/darcs.fish:995 +msgid "Reply to email-based patch using FROM address" +msgstr "Reply to email-based patch using FROM address" -#: share/completions/darcs.fish:619 -msgid "Sign the patch using openssl with a given private key" -msgstr "Sign the patch using openssl with a given private key" +#: share/completions/darcs.fish:996 +msgid "Mail results to additional EMAIL(s). Requires --reply" +msgstr "Mail results to additional EMAIL(s). Requires --reply" -#: share/completions/darcs.fish:625 -msgid "Send to context stored in FILENAME" -msgstr "Send to context stored in FILENAME" +#: share/completions/darcs.fish:1027 +msgid "Select tag matching REGEXP" +msgstr "Select tag matching REGEXP" -#: share/completions/darcs.fish:633 -msgid "Specify sendmail command" -msgstr "Specify sendmail command" - -#: share/completions/darcs.fish:646 -msgid "Verify that the patch was signed by a key in PUBRING" -msgstr "Verify that the patch was signed by a key in PUBRING" - -#: share/completions/darcs.fish:647 -#, fuzzy -msgid "Verify using openSSL with authorized keys from file KEYS" -msgstr "Verify using openSSL with authorized keys from specified file" - -#: share/completions/darcs.fish:684 -#, fuzzy -msgid "Path of output directory" -msgstr "Set source directory" - -#: share/completions/darcs.fish:687 share/completions/darcs.fish:718 -msgid "Select changes up to a patch matching PATTERN" -msgstr "Select changes up to a patch matching PATTERN" - -#: share/completions/darcs.fish:688 share/completions/darcs.fish:719 -msgid "Select changes up to a patch matching REGEXP" -msgstr "Select changes up to a patch matching REGEXP" - -#: share/completions/darcs.fish:690 share/completions/darcs.fish:721 +#: share/completions/darcs.fish:1028 #, fuzzy msgid "Version specified by the context in FILENAME" msgstr "Send to context stored in FILENAME" -#: share/completions/darcs.fish:758 -msgid "Name of version to checkpoint" +#: share/completions/darcs.fish:1083 +msgid "Apply patch as another user using sudo" +msgstr "" + +#: share/completions/darcs.fish:1222 +msgid "--repodir=DIRECTORY" msgstr "" #: share/completions/dcop.fish:34 @@ -3409,40 +3893,23 @@ msgstr "" msgid "Call DCOP for each line read from stdin" msgstr "Prevent reading from stdin" +#: share/completions/dd.fish:5 +#, fuzzy +msgid "Complete dd operands" +msgstr "Compare FILE1 to all operands" + #: share/completions/df.fish:17 -msgid "Show filesystems of specified type" +#, fuzzy +msgid "Show file systems of specified type" msgstr "Show filesystems of specified type" #: share/completions/df.fish:22 msgid "Block size" msgstr "Block size" -#: share/completions/diff.fish:9 -msgid "Ignore changes whose lines match the REGEX" -msgstr "Ignore changes whose lines match the REGEX" - -#: share/completions/diff.fish:13 -msgid "Output NUM lines of copied context" -msgstr "Output NUM lines of copied context" - -#: share/completions/diff.fish:15 -msgid "Output NUM lines of unified context" -msgstr "Output NUM lines of unified context" - -#: share/completions/diff.fish:20 -msgid "Output at most NUM print columns" -msgstr "Output at most NUM print columns" - -#: share/completions/diff.fish:22 -msgid "Compare FILE1 to all operands" -msgstr "Compare FILE1 to all operands" - -#: share/completions/diff.fish:23 -msgid "Compare FILE2 to all operands" -msgstr "Compare FILE2 to all operands" - #: share/completions/du.fish:15 -msgid "Exclude files thet match pattern in file" +#, fuzzy +msgid "Exclude files that match pattern in file" msgstr "Exclude files thet match pattern in file" #: share/completions/du.fish:16 @@ -3453,6 +3920,100 @@ msgstr "Exclude files that match pattern" msgid "Recursion limit" msgstr "Recursion limit" +#: share/completions/duply.fish:5 +#, fuzzy +msgid "Profile" +msgstr "Conf file" + +#: share/completions/duply.fish:6 +msgid "Get usage help text" +msgstr "" + +#: share/completions/duply.fish:9 +#, fuzzy +msgid "Creates a configuration profile" +msgstr "Set configuration file" + +#: share/completions/duply.fish:10 +msgid "Backup with pre/post script execution" +msgstr "" + +#: share/completions/duply.fish:11 +#, fuzzy +msgid "Backup without executing pre/post scripts" +msgstr "Don't execute post scripts" + +#: share/completions/duply.fish:12 +#, fuzzy +msgid "Execute /pre script" +msgstr "Don't execute pre scripts" + +#: share/completions/duply.fish:13 +#, fuzzy +msgid "Execute /post script" +msgstr "Don't execute post scripts" + +#: share/completions/duply.fish:14 +msgid "Force full backup" +msgstr "" + +#: share/completions/duply.fish:15 +msgid "Force incremental backup" +msgstr "" + +#: share/completions/duply.fish:16 +msgid "List all files in backup (as it was at , default: now)" +msgstr "" + +#: share/completions/duply.fish:17 +msgid "Prints backup sets and chains currently in repository" +msgstr "" + +#: share/completions/duply.fish:18 +msgid "List files changed since latest backup" +msgstr "" + +#: share/completions/duply.fish:19 +msgid "Shows outdated backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:20 +msgid "Shows outdated backups [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:21 +msgid "Shows broken backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:22 +msgid "Restore the backup to [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:23 +msgid "Restore single file/folder from backup [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:26 +msgid "Really execute the commands: purge, purge-full, cleanup" +msgstr "" + +#: share/completions/duply.fish:27 +msgid "Do nothing but print out generated duplicity command lines" +msgstr "" + +#: share/completions/duply.fish:28 +msgid "Calculate what would be done, but dont perform any actions" +msgstr "" + +#: share/completions/duply.fish:29 +msgid "Dont abort when backup different dirs to the same backend" +msgstr "" + +#: share/completions/duply.fish:30 +#, fuzzy +msgid "Output verbosity level" +msgstr "Output sources.list file" + #: share/completions/emerge.fish:5 share/completions/equery.fish:5 msgid "" "Prints completions for installed packages on the system from /var/db/pkg" @@ -4063,6 +4624,15 @@ msgstr "" msgid "Update the RubyGems system software" msgstr "" +#: share/completions/git.fish:121 share/completions/git.fish:144 +msgid "Branch" +msgstr "" + +#: share/completions/git.fish:145 +#, fuzzy +msgid "Tag" +msgstr "Target" + #: share/completions/gpg.fish:116 msgid "Write output to specified file" msgstr "Write output to specified file" @@ -4211,25 +4781,14 @@ msgstr "Supress output when executed less than specified times" msgid "Profile data format" msgstr "Profile data format" -#: share/completions/grep.fish:14 -msgid "Action for devices" -msgstr "Action for devices" - -#: share/completions/grep.fish:15 -msgid "Action for directories" -msgstr "Action for directories" - -#: share/completions/grep.fish:19 -msgid "Use pattern from file" -msgstr "Use pattern from file" - #: share/completions/gunzip.fish:15 share/completions/gzip.fish:17 msgid "Suffix" msgstr "Suffix" #: share/completions/help.fish:6 -msgid "Help for the specified command" -msgstr "Help for the specified command" +#, fuzzy +msgid "Help for this command" +msgstr "Set prompt command" #: share/completions/help.fish:9 msgid "Introduction to the fish syntax" @@ -4318,193 +4877,604 @@ msgid "add the specified files on the next commit" msgstr "Add specified file to the current list of keyrings" #: share/completions/hg.fish:18 -#, fuzzy -msgid "show changeset information per file line" -msgstr "Display change information for the package" - -#: share/completions/hg.fish:19 -msgid "create unversioned archive of a repository revision" +msgid "add all new files, delete all missing files" msgstr "" +#: share/completions/hg.fish:19 +#, fuzzy +msgid "show changeset information by line for each file" +msgstr "Display change information for the package" + #: share/completions/hg.fish:20 +#, fuzzy +msgid "create an unversioned archive of a repository revision" +msgstr "Commit an unversioned file or tree into the repository" + +#: share/completions/hg.fish:21 msgid "reverse effect of earlier changeset" msgstr "" -#: share/completions/hg.fish:21 +#: share/completions/hg.fish:22 +msgid "subdivision search of changesets" +msgstr "" + +#: share/completions/hg.fish:23 +msgid "track a line of development with movable markers" +msgstr "" + +#: share/completions/hg.fish:24 +msgid "set or show the current branch name" +msgstr "" + +#: share/completions/hg.fish:25 +#, fuzzy +msgid "list repository named branches" +msgstr "Disable repository" + +#: share/completions/hg.fish:26 #, fuzzy msgid "create a changegroup file" msgstr "Read package from file" -#: share/completions/hg.fish:22 +#: share/completions/hg.fish:27 #, fuzzy -msgid "output the latest or given revisions of files" +msgid "output the current or given revision of files" msgstr "Show the log messages for a set of revision(s) and/or file(s)" -#: share/completions/hg.fish:23 +#: share/completions/hg.fish:28 #, fuzzy msgid "make a copy of an existing repository" msgstr "Create a local copy of another repository" -#: share/completions/hg.fish:24 +#: share/completions/hg.fish:29 #, fuzzy msgid "commit the specified files or all outstanding changes" msgstr "Decrypt specified file or stdin" -#: share/completions/hg.fish:25 +#: share/completions/hg.fish:30 msgid "mark files as copied for the next commit" msgstr "" -#: share/completions/hg.fish:26 +#: share/completions/hg.fish:31 msgid "diff repository (or selected files)" msgstr "" -#: share/completions/hg.fish:27 +#: share/completions/hg.fish:32 msgid "dump the header and diffs for one or more changesets" msgstr "" -#: share/completions/hg.fish:28 +#: share/completions/hg.fish:33 +#, fuzzy +msgid "forget the specified files on the next commit" +msgstr "Move file specified on commandline" + +#: share/completions/hg.fish:34 +#, fuzzy +msgid "copy changes from other branches onto the current branch" +msgstr "Bring changes from the repository into the working copy" + +#: share/completions/hg.fish:35 msgid "search for a pattern in specified files and revisions" msgstr "" -#: share/completions/hg.fish:29 -msgid "show current repository heads" +#: share/completions/hg.fish:36 +msgid "show current repository heads or show branch heads" msgstr "" -#: share/completions/hg.fish:30 -msgid "show help for a command, extension, or list of commands" +#: share/completions/hg.fish:37 +msgid "show help for a given topic or a help overview" msgstr "" -#: share/completions/hg.fish:31 +#: share/completions/hg.fish:38 #, fuzzy -msgid "print information about the working copy" -msgstr "Output extra information about the work being done" +msgid "identify the working copy or specified revision" +msgstr "Update the working copy to a different URL" -#: share/completions/hg.fish:32 +#: share/completions/hg.fish:39 #, fuzzy msgid "import an ordered set of patches" msgstr "Print byte offset of matches" -#: share/completions/hg.fish:33 +#: share/completions/hg.fish:40 msgid "show new changesets found in source" msgstr "" -#: share/completions/hg.fish:34 +#: share/completions/hg.fish:41 #, fuzzy msgid "create a new repository in the given directory" msgstr "Create a CVS repository if it doesnt exist" -#: share/completions/hg.fish:35 +#: share/completions/hg.fish:42 #, fuzzy msgid "locate files matching specific patterns" msgstr "Exclude files that match pattern" -#: share/completions/hg.fish:36 +#: share/completions/hg.fish:43 msgid "show revision history of entire repository or files" msgstr "" -#: share/completions/hg.fish:37 -msgid "output the latest or given revision of the project manifest" -msgstr "" - -#: share/completions/hg.fish:38 -msgid "Merge working directory with another revision" -msgstr "" - -#: share/completions/hg.fish:39 -msgid "show changesets not found in destination" -msgstr "" - -#: share/completions/hg.fish:40 -msgid "show the parents of the working dir or revision" -msgstr "" - -#: share/completions/hg.fish:41 -msgid "show definition of symbolic path names" -msgstr "" - -#: share/completions/hg.fish:42 -#, fuzzy -msgid "pull changes from the specified source" -msgstr "Query packages with the specified group" - -#: share/completions/hg.fish:43 -#, fuzzy -msgid "push changes to the specified destination" -msgstr "Query packages with the specified group" - #: share/completions/hg.fish:44 -msgid "roll back an interrupted transaction" -msgstr "" +#, fuzzy +msgid "output the current or given revision of the project manifest" +msgstr "Show the log messages for a set of revision(s) and/or file(s)" #: share/completions/hg.fish:45 -#, fuzzy -msgid "remove the specified files on the next commit" -msgstr "Move file specified on commandline" +msgid "merge working directory with another revision" +msgstr "" #: share/completions/hg.fish:46 -msgid "rename files; equivalent of copy + remove" -msgstr "" +#, fuzzy +msgid "show changesets not found in the destination" +msgstr "Query packages with the specified group" #: share/completions/hg.fish:47 -msgid "revert files or dirs to their states as of some revision" -msgstr "" +#, fuzzy +msgid "show the parents of the working directory or revision" +msgstr "Change working directory" #: share/completions/hg.fish:48 -msgid "roll back the last transaction in this repository" -msgstr "" +#, fuzzy +msgid "show aliases for remote repositories" +msgstr "Removes entry in .cvspass for remote repository" #: share/completions/hg.fish:49 -msgid "print the root (top) of the current working dir" +msgid "set or show the current phase name" msgstr "" #: share/completions/hg.fish:50 #, fuzzy -msgid "export the repository via HTTP" -msgstr "Update the repository" +msgid "pull changes from the specified source" +msgstr "Query packages with the specified group" #: share/completions/hg.fish:51 #, fuzzy -msgid "show changed files in the working directory" -msgstr "Change working directory" +msgid "push changes to the specified destination" +msgstr "Query packages with the specified group" #: share/completions/hg.fish:52 -msgid "add a tag for the current tip or a given revision" +msgid "roll back an interrupted transaction" msgstr "" #: share/completions/hg.fish:53 #, fuzzy +msgid "remove the specified files on the next commit" +msgstr "Move file specified on commandline" + +#: share/completions/hg.fish:54 +msgid "rename files; equivalent of copy + remove" +msgstr "" + +#: share/completions/hg.fish:55 +msgid "redo merges or set/view the merge status of files" +msgstr "" + +#: share/completions/hg.fish:56 +msgid "restore files to their checkout state" +msgstr "" + +#: share/completions/hg.fish:57 +msgid "roll back the last transaction (dangerous)" +msgstr "" + +#: share/completions/hg.fish:58 +#, fuzzy +msgid "print the root (top) of the current working directory" +msgstr "Change working directory" + +#: share/completions/hg.fish:59 +msgid "start stand-alone webserver" +msgstr "" + +#: share/completions/hg.fish:60 +msgid "show combined config settings from all hgrc files" +msgstr "" + +#: share/completions/hg.fish:61 +#, fuzzy +msgid "show changed files in the working directory" +msgstr "Change working directory" + +#: share/completions/hg.fish:62 +#, fuzzy +msgid "summarize working directory state" +msgstr "Print working directory" + +#: share/completions/hg.fish:63 +msgid "add one or more tags for the current or given revision" +msgstr "" + +#: share/completions/hg.fish:64 +#, fuzzy msgid "list repository tags" msgstr "Disable repository" -#: share/completions/hg.fish:54 +#: share/completions/hg.fish:65 #, fuzzy msgid "show the tip revision" msgstr "Show the time" -#: share/completions/hg.fish:55 +#: share/completions/hg.fish:66 #, fuzzy -msgid "apply a changegroup file" +msgid "apply one or more changegroup files" msgstr "Read package from file" -#: share/completions/hg.fish:56 +#: share/completions/hg.fish:67 #, fuzzy -msgid "update or merge working directory" +msgid "update working directory (or switch revisions)" msgstr "Change working directory" -#: share/completions/hg.fish:57 +#: share/completions/hg.fish:68 #, fuzzy msgid "verify the integrity of the repository" msgstr "Remove an entry from the repository" -#: share/completions/hg.fish:58 +#: share/completions/hg.fish:69 #, fuzzy msgid "output version and copyright information" msgstr "Ignore version magic information" -#: share/completions/hg.fish:100 +#: share/completions/hg.fish:70 #, fuzzy -msgid "Remembers the parent of the working directory" -msgstr "Change working directory" +msgid "Configuration Files" +msgstr "Configuration file" + +#: share/completions/hg.fish:71 +#, fuzzy +msgid "Date Formats" +msgstr "Set format" + +#: share/completions/hg.fish:72 +#, fuzzy +msgid "Diff Formats" +msgstr "List format" + +#: share/completions/hg.fish:73 +#, fuzzy +msgid "Environment Variables" +msgstr "Handle environment variables" + +#: share/completions/hg.fish:74 +msgid "Using Additional Features" +msgstr "" + +#: share/completions/hg.fish:75 +#, fuzzy +msgid "Specifying File Sets" +msgstr "Specify config file" + +#: share/completions/hg.fish:76 +msgid "Glossary" +msgstr "" + +#: share/completions/hg.fish:77 +msgid "Syntax for Mercurial Ignore Files" +msgstr "" + +#: share/completions/hg.fish:78 +#, fuzzy +msgid "Configuring hgweb" +msgstr "Configuration file" + +#: share/completions/hg.fish:79 +#, fuzzy +msgid "Merge Tools" +msgstr "Merge sorted files" + +#: share/completions/hg.fish:80 +#, fuzzy +msgid "Specifying Multiple Revisions" +msgstr "Specify revision" + +#: share/completions/hg.fish:81 +msgid "File Name Patterns" +msgstr "" + +#: share/completions/hg.fish:82 +msgid "Working with Phases" +msgstr "" + +#: share/completions/hg.fish:83 +#, fuzzy +msgid "Specifying Single Revisions" +msgstr "Specify revision" + +#: share/completions/hg.fish:84 +#, fuzzy +msgid "Specifying Revision Sets" +msgstr "Specify revision states" + +#: share/completions/hg.fish:85 +msgid "Subrepositories" +msgstr "" + +#: share/completions/hg.fish:86 +msgid "Template Usage" +msgstr "" + +#: share/completions/hg.fish:87 +msgid "URL Paths" +msgstr "" + +#: share/completions/hg.fish:94 share/completions/hg.fish:433 +#: share/completions/hg.fish:458 share/completions/hg.fish:569 +#: share/completions/hg.fish:579 share/completions/hg.fish:594 +#: share/completions/hg.fish:606 share/completions/hg.fish:671 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Insert modules matching the given wildcard" + +#: share/completions/hg.fish:95 share/completions/hg.fish:434 +#: share/completions/hg.fish:459 share/completions/hg.fish:570 +#: share/completions/hg.fish:580 share/completions/hg.fish:595 +#: share/completions/hg.fish:607 share/completions/hg.fish:672 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "List all modules matching the given wildcard" + +#: share/completions/hg.fish:104 share/completions/hg.fish:391 +msgid "Guess renamed files by similarity (0<=s<=100)" +msgstr "" + +#: share/completions/hg.fish:105 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Insert modules matching the given wildcard" + +#: share/completions/hg.fish:106 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "List all modules matching the given wildcard" + +#: share/completions/hg.fish:114 +#, fuzzy +msgid "Annotate the specified revision" +msgstr "Help for the specified builtin" + +#: share/completions/hg.fish:387 +#, fuzzy +msgid "Use text as commit message" +msgstr "Read commit message from file" + +#: share/completions/hg.fish:388 +msgid "Read commit message from file" +msgstr "Read commit message from file" + +#: share/completions/hg.fish:389 share/completions/hg.fish:693 +#, fuzzy +msgid "Record the specified date as commit date" +msgstr "Help for the specified command" + +#: share/completions/hg.fish:390 share/completions/hg.fish:694 +#, fuzzy +msgid "Record the specified user as committer" +msgstr "Use specified string as comment string" + +#: share/completions/hg.fish:400 +#, fuzzy +msgid "File to store the bundles into" +msgstr "Edit the patch bundle description" + +#: share/completions/hg.fish:401 share/completions/hg.fish:446 +#: share/completions/hg.fish:448 share/completions/hg.fish:450 +#: share/completions/hg.fish:485 share/completions/hg.fish:534 +#: share/completions/hg.fish:536 share/completions/hg.fish:548 +#: share/completions/hg.fish:550 share/completions/hg.fish:669 +msgid "[+]" +msgstr "" + +#: share/completions/hg.fish:403 +msgid "[+] a specific branch you would like to pull" +msgstr "" + +#: share/completions/hg.fish:406 share/completions/hg.fish:453 +#: share/completions/hg.fish:491 +#, fuzzy +msgid "Limit number of changes displayed" +msgstr "Only print number of matches" + +#: share/completions/hg.fish:409 share/completions/hg.fish:456 +#: share/completions/hg.fish:494 share/completions/hg.fish:507 +#: share/completions/hg.fish:709 +msgid "Display using template map file" +msgstr "" + +#: share/completions/hg.fish:410 share/completions/hg.fish:457 +#: share/completions/hg.fish:495 share/completions/hg.fish:508 +#: share/completions/hg.fish:710 +#, fuzzy +msgid "Display with template" +msgstr "Display all matches" + +#: share/completions/hg.fish:411 share/completions/hg.fish:421 +#: share/completions/hg.fish:496 share/completions/hg.fish:537 +#: share/completions/hg.fish:552 +#, fuzzy +msgid "Specify ssh command to use" +msgstr "Pass command to shell" + +#: share/completions/hg.fish:412 share/completions/hg.fish:422 +#: share/completions/hg.fish:497 share/completions/hg.fish:538 +#: share/completions/hg.fish:553 +#, fuzzy +msgid "Specify hg command to run on the remote side" +msgstr "Specify root directory for rpm operations" + +#: share/completions/hg.fish:430 +#, fuzzy +msgid "Search the repository as it is in REV" +msgstr "Specify the repository URL" + +#: share/completions/hg.fish:441 +msgid "A filename will only show ancestors or" +msgstr "" + +#: share/completions/hg.fish:443 +#, fuzzy +msgid "Show revisions matching date spec" +msgstr "Show only matching part" + +#: share/completions/hg.fish:445 +msgid "[+] do case-insensitive search for a given text" +msgstr "" + +#: share/completions/hg.fish:449 +msgid "[+] show changesets within the given named branch" +msgstr "" + +#: share/completions/hg.fish:466 +#, fuzzy +msgid "Revision to display" +msgstr "Select display" + +#: share/completions/hg.fish:475 +msgid "Revision to merge" +msgstr "" + +#: share/completions/hg.fish:477 share/completions/hg.fish:593 +#, fuzzy +msgid "Specify merge tool" +msgstr "Specify trust model" + +#: share/completions/hg.fish:488 +msgid "[+] a specific branch you would like to push" +msgstr "" + +#: share/completions/hg.fish:506 +#, fuzzy +msgid "Show parents of the specified revision" +msgstr "Query packages with the specified group" + +#: share/completions/hg.fish:525 +#, fuzzy +msgid "[+] target revision" +msgstr "Merge revisions" + +#: share/completions/hg.fish:535 +msgid "[+] bookmark to pull" +msgstr "" + +#: share/completions/hg.fish:546 +msgid "You want to allow push to create a new named branch" +msgstr "" + +#: share/completions/hg.fish:549 +msgid "[+] bookmark to push" +msgstr "" + +#: share/completions/hg.fish:603 share/completions/hg.fish:726 +#, fuzzy +msgid "Tipmost revision matching date" +msgstr "Show only matching part" + +#: share/completions/hg.fish:604 +#, fuzzy +msgid "Revert to the specified revision" +msgstr "Help for the specified builtin" + +#: share/completions/hg.fish:615 +msgid "Not perform actions, just print output" +msgstr "" + +#: share/completions/hg.fish:629 +msgid "Name of access log file to write to" +msgstr "" + +#: share/completions/hg.fish:631 +msgid "Used internally by daemon mode" +msgstr "" + +#: share/completions/hg.fish:632 +msgid "Name of error log file to write to" +msgstr "" + +#: share/completions/hg.fish:633 +msgid "Port to listen on (default: 8000)" +msgstr "" + +#: share/completions/hg.fish:634 +msgid "Address to listen on (default: all interfaces)" +msgstr "" + +#: share/completions/hg.fish:635 +msgid "Prefix path to serve from (default: server root)" +msgstr "" + +#: share/completions/hg.fish:636 +msgid "Name to show in web pages (default: working" +msgstr "" + +#: share/completions/hg.fish:637 +msgid "Name of the hgweb config file (see \"hg help hgweb\")" +msgstr "" + +#: share/completions/hg.fish:638 +msgid "Name of file to write process ID to" +msgstr "" + +#: share/completions/hg.fish:640 +#, fuzzy +msgid "For remote clients" +msgstr "List or remove functions" + +#: share/completions/hg.fish:641 +msgid "Web templates to use" +msgstr "" + +#: share/completions/hg.fish:642 +msgid "Template style to use" +msgstr "" + +#: share/completions/hg.fish:644 +#, fuzzy +msgid "SSL certificate file" +msgstr "Set certificate policy" + +#: share/completions/hg.fish:651 +#, fuzzy +msgid "Untrusted configuration options" +msgstr "Set config options" + +#: share/completions/hg.fish:670 +#, fuzzy +msgid "List the changed files of a revision" +msgstr "List all properties on files, dirs, or revisions" + +#: share/completions/hg.fish:680 +msgid "For push and pull" +msgstr "" + +#: share/completions/hg.fish:689 +msgid "Revision to tag" +msgstr "" + +#: share/completions/hg.fish:692 +msgid "Use as commit message" +msgstr "" + +#: share/completions/hg.fish:717 +msgid "To new branch head if changesets were unbundled" +msgstr "" + +#: share/completions/hg.fish:727 +#, fuzzy +msgid "Revision" +msgstr "Merge revisions" + +#: share/completions/hg.fish:844 +msgid "Or select an existing template-style (--style)" +msgstr "" + +#: share/completions/hg.fish:845 +msgid "Is set" +msgstr "" + +#: share/completions/history.fish:1 +msgid "Match history items that start with the given prefix" +msgstr "" + +#: share/completions/history.fish:2 +msgid "Match history items that contain the given string" +msgstr "" #: share/completions/ifconfig.fish:1 msgid "Stop interface" @@ -4514,7 +5484,8 @@ msgstr "Stop interface" msgid "Start interface" msgstr "Start interface" -#: share/completions/ifconfig.fish:25 +#: share/completions/ifconfig.fish:25 share/completions/ifdown.fish:1 +#: share/completions/ifup.fish:1 msgid "Network interface" msgstr "Network interface" @@ -4522,15 +5493,10 @@ msgstr "Network interface" msgid "Buffer space" msgstr "Buffer space" -#: share/completions/locate.fish:22 -msgid "Search the file name databases in these directories" +#: share/completions/lsusb.fish:2 +msgid "Show only devices with specified device and/or bus numbers (in decimal)" msgstr "" -#: share/completions/locate.fish:23 -#, fuzzy -msgid "Limit the number of matches" -msgstr "Only print number of matches" - #: share/completions/make.fish:12 msgid "Target" msgstr "Target" @@ -4591,6 +5557,10 @@ msgstr "Starting string delimiter" msgid "Line width" msgstr "Line width" +#: share/completions/mosh.fish:20 +msgid "Controls use of speculative local echo" +msgstr "" + #: share/completions/mount.fish:19 msgid "Mount partition with specified label" msgstr "Mount partition with specified label" @@ -4600,7 +5570,8 @@ msgid "Mount partition with specified UID" msgstr "Mount partition with specified UID" #: share/completions/mount.fish:21 -msgid "Exclude filesystems" +#, fuzzy +msgid "Exclude file systems" msgstr "Exclude filesystems" #: share/completions/mount.fish:22 @@ -4612,7 +5583,8 @@ msgid "Move a subtree to a new position" msgstr "Move a subtree to a new position" #: share/completions/mount.fish:24 -msgid "Filesystem" +#, fuzzy +msgid "File system" msgstr "Filesystem" #: share/completions/mount.fish:26 @@ -4635,54 +5607,97 @@ msgstr "Video output" msgid "Audio output" msgstr "Audio output" -#: share/completions/mutt.fish:14 +#: share/completions/msgfmt.fish:5 +#, fuzzy +msgid "Generate a Java ResourceBundle class" +msgstr "Generate source index file" + +#: share/completions/msgfmt.fish:6 +msgid "Like --java, and assume Java2 (JDK 1.2 or higher)" +msgstr "" + +#: share/completions/msgfmt.fish:7 +#, fuzzy +msgid "Generate a .NET .dll file" +msgstr "Generate master file" + +#: share/completions/msgfmt.fish:8 +#, fuzzy +msgid "Generate a .NET .resources file" +msgstr "Generate source index file" + +#: share/completions/msgfmt.fish:9 +#, fuzzy +msgid "Generate a tcl/msgcat .msg file" +msgstr "Generate master file" + +#: share/completions/msgfmt.fish:10 +#, fuzzy +msgid "Generate a Qt .qm file" +msgstr "Generate master file" + +#: share/completions/msgfmt.fish:17 +#, fuzzy +msgid "Resource name" +msgstr "Set volume name" + +#: share/completions/msgfmt.fish:18 +msgid "Locale name, either language or language_COUNTRY" +msgstr "" + +#: share/completions/msgfmt.fish:19 +#, fuzzy +msgid "Base directory for output" +msgstr "File descriptor for input" + +#: share/completions/mutt.fish:18 msgid "An expanded version of the given alias is passed to stdout" msgstr "" -#: share/completions/mutt.fish:15 +#: share/completions/mutt.fish:19 msgid "Attach a file to your message using MIME" msgstr "" -#: share/completions/mutt.fish:16 +#: share/completions/mutt.fish:20 msgid "Specify a blind-carbon-copy (BCC) recipient" msgstr "" -#: share/completions/mutt.fish:17 +#: share/completions/mutt.fish:21 msgid "Specify a carbon-copy (CC) recipient" msgstr "" -#: share/completions/mutt.fish:18 -msgid "Run command after processing of initialization files" -msgstr "" - -#: share/completions/mutt.fish:19 -#, fuzzy -msgid "Specify which mailbox to load" -msgstr "Specify sendmail command" - -#: share/completions/mutt.fish:20 -msgid "Specify an initialization file to read instead of ~/.muttrc" -msgstr "" - -#: share/completions/mutt.fish:21 -msgid "Specify a draft file containing header and body for the message" -msgstr "" - #: share/completions/mutt.fish:22 -msgid "Specify a file to include into the body of a message" +msgid "Run command after processing of initialization files" msgstr "" #: share/completions/mutt.fish:23 #, fuzzy +msgid "Specify which mailbox to load" +msgstr "Specify sendmail command" + +#: share/completions/mutt.fish:24 +msgid "Specify an initialization file to read instead of ~/.muttrc" +msgstr "" + +#: share/completions/mutt.fish:25 +msgid "Specify a draft file containing header and body for the message" +msgstr "" + +#: share/completions/mutt.fish:26 +msgid "Specify a file to include into the body of a message" +msgstr "" + +#: share/completions/mutt.fish:27 +#, fuzzy msgid "Specify a default mailbox type" msgstr "Specify destination email" -#: share/completions/mutt.fish:24 +#: share/completions/mutt.fish:28 #, fuzzy msgid "Query a configuration variables value" msgstr "Specify a configuration file" -#: share/completions/mutt.fish:25 +#: share/completions/mutt.fish:29 #, fuzzy msgid "Specify the subject of the message" msgstr "Specify commit message" @@ -4691,25 +5706,152 @@ msgstr "Specify commit message" msgid "Answer for overwrite questions" msgstr "Answer for overwrite questions" -#: share/completions/perl.fish:5 -msgid "Debug option" -msgstr "Debug option" +#: share/completions/perl.fish:6 +msgid "Specify record separator" +msgstr "Specify record separator" -#: share/completions/perl.fish:6 share/completions/ruby.fish:7 -msgid "Execute command" -msgstr "Execute command" +#: share/completions/perl.fish:7 +msgid "Turn on autosplit mode" +msgstr "Turn on autosplit mode" -#: share/completions/python.fish:1 -msgid "Execute argument as command" -msgstr "Execute argument as command" +#: share/completions/perl.fish:8 +msgid "Check syntax" +msgstr "Check syntax" -#: share/completions/python.fish:7 -msgid "Division control" -msgstr "Division control" +#: share/completions/perl.fish:9 +msgid "Control Unicode features" +msgstr "" -#: share/completions/python.fish:13 -msgid "Warning control" -msgstr "Warning control" +#: share/completions/perl.fish:10 +msgid "Debug UTF-8 cache" +msgstr "" + +#: share/completions/perl.fish:11 +msgid "ARGV uses UTF-8" +msgstr "" + +#: share/completions/perl.fish:12 +msgid "Opened filehandles are UTF-8" +msgstr "" + +#: share/completions/perl.fish:13 +msgid "STDERR is UTF-8" +msgstr "" + +#: share/completions/perl.fish:14 +msgid "Filehandles that are read are UTF-8" +msgstr "" + +#: share/completions/perl.fish:15 +msgid "STDIN is UTF-8" +msgstr "" + +#: share/completions/perl.fish:16 +msgid "Enable Unicode conditionally" +msgstr "" + +#: share/completions/perl.fish:17 +msgid "Filehandles written to are UTF-8" +msgstr "" + +#: share/completions/perl.fish:18 +msgid "STDOUT is UTF-8" +msgstr "" + +#: share/completions/perl.fish:19 +msgid "STDOUT, STDIN, and STDERR are UTF-8" +msgstr "" + +#: share/completions/perl.fish:20 +msgid "Debugger" +msgstr "Debugger" + +#: share/completions/perl.fish:25 +#, fuzzy +msgid "Disable sitecustomize.pl" +msgstr "Disable the use of cookies" + +#: share/completions/perl.fish:27 +#, fuzzy +msgid "Show help and exit" +msgstr "Display help and exit" + +#: share/completions/perl.fish:30 +msgid "Automatic line ending processing" +msgstr "Automatic line ending processing" + +#: share/completions/perl.fish:33 +msgid "Loop script" +msgstr "Loop script" + +#: share/completions/perl.fish:34 +#, sh-format +msgid "Loop script, print $_" +msgstr "Loop script, print $_" + +#: share/completions/perl.fish:35 +msgid "Define custom switches" +msgstr "Define custom switches" + +#: share/completions/perl.fish:36 +#, sh-format +msgid "Search $PATH for script" +msgstr "Search $PATH for script" + +#: share/completions/perl.fish:37 +msgid "Taint checking, but only with warnings" +msgstr "" + +#: share/completions/perl.fish:38 +msgid "Taint checking" +msgstr "Taint checking" + +#: share/completions/perl.fish:39 +msgid "Dump core" +msgstr "" + +#: share/completions/perl.fish:40 +msgid "Unsafe mode" +msgstr "Unsafe mode" + +#: share/completions/perl.fish:42 +#, fuzzy +msgid "Display configuration and exit" +msgstr "Display version and exit" + +#: share/completions/perl.fish:43 +#, fuzzy +msgid "Show warnings" +msgstr "Supress warnings" + +#: share/completions/perl.fish:44 +#, fuzzy +msgid "Force warnings" +msgstr "Supress warnings" + +#: share/completions/perl.fish:45 +#, fuzzy +msgid "Disable warnings" +msgstr "Disable warnings about MFC" + +#: share/completions/portmaster.fish:49 +#, fuzzy +msgid "Ports Directory" +msgstr "Directory" + +#: share/completions/portmaster.fish:55 +#, fuzzy +msgid "Installed Package" +msgstr "Install new package" + +#: share/completions/psql.fish:19 +#, fuzzy +msgid "execute commands from file, then exit" +msgstr "Execute command as if part of .wgetrc" + +#: share/completions/psql.fish:63 +msgid "database server port" +msgstr "" #: share/completions/rpm.fish:22 msgid "Add suggested packages to the transaction set when needed" @@ -5145,15 +6287,19 @@ msgstr "" msgid "Set block/file checksum seed (advanced)" msgstr "" +#: share/completions/ruby.fish:7 +msgid "Execute command" +msgstr "Execute command" + #: share/completions/ruby.fish:15 msgid "Require file" msgstr "Require file" -#: share/completions/scp.fish:29 +#: share/completions/scp.fish:40 msgid "Bandwidth limit" msgstr "Bandwidth limit" -#: share/completions/scp.fish:30 share/completions/ssh.fish:36 +#: share/completions/scp.fish:41 share/completions/ssh.fish:39 #: share/completions/sshfs.fish:25 msgid "Port" msgstr "Port" @@ -5198,15 +6344,15 @@ msgstr "Set memory buffer size" msgid "Set temporary directory" msgstr "Set temporary directory" -#: share/completions/ssh.fish:21 +#: share/completions/ssh.fish:24 msgid "Interface to transmit from" msgstr "Interface to transmit from" -#: share/completions/ssh.fish:27 +#: share/completions/ssh.fish:30 msgid "Escape character" msgstr "Escape character" -#: share/completions/ssh.fish:32 +#: share/completions/ssh.fish:35 msgid "User" msgstr "User" @@ -5214,330 +6360,6 @@ msgstr "User" msgid "Pass command to shell" msgstr "Pass command to shell" -#: share/completions/svn.fish:17 -msgid "" -"Put files and directories under version control, scheduling them for " -"addition to repository. They will be added in next commit." -msgstr "" - -#: share/completions/svn.fish:18 share/completions/svn.fish:19 -#: share/completions/svn.fish:20 share/completions/svn.fish:21 -#, fuzzy -msgid "" -"Output the content of specified files or URLs with revision and author " -"information in-line." -msgstr "Output files/URLs with revision and author information inline" - -#: share/completions/svn.fish:22 -#, fuzzy -msgid "Output the content of specified files or URLs." -msgstr "Output content of files/URLs" - -#: share/completions/svn.fish:23 share/completions/svn.fish:24 -#, fuzzy -msgid "Check out a working copy from a repository." -msgstr "Check out a working copy from the repository" - -#: share/completions/svn.fish:25 -msgid "" -"Recursively clean up the working copy, removing locks, resuming unfinished " -"operations, etc." -msgstr "" - -#: share/completions/svn.fish:26 share/completions/svn.fish:27 -#, fuzzy -msgid "Send changes from your working copy to the repository." -msgstr "Send changes from your working copy to the repository" - -#: share/completions/svn.fish:28 share/completions/svn.fish:29 -#, fuzzy -msgid "Duplicate something in working copy or repository, remembering history." -msgstr "Move and/or rename something in working copy or repository" - -#: share/completions/svn.fish:30 share/completions/svn.fish:31 -#: share/completions/svn.fish:32 share/completions/svn.fish:33 -#, fuzzy -msgid "Remove files and directories from version control." -msgstr "Place files or directories under version control" - -#: share/completions/svn.fish:34 share/completions/svn.fish:35 -#, fuzzy -msgid "Display the differences between two revisions or paths." -msgstr "Apply the differences between two sources to a working copy path" - -#: share/completions/svn.fish:36 -msgid "Create an unversioned copy of a tree." -msgstr "" - -#: share/completions/svn.fish:37 share/completions/svn.fish:38 -#: share/completions/svn.fish:39 -#, fuzzy -msgid "Describe the usage of this program or its subcommands." -msgstr "Describe the usage of this program or its subcommands" - -#: share/completions/svn.fish:40 -#, fuzzy -msgid "Commit an unversioned file or tree into the repository." -msgstr "Commit an unversioned file or tree into the repository" - -#: share/completions/svn.fish:41 -#, fuzzy -msgid "Display information about a local or remote item." -msgstr "Display information about a local or remote item" - -#: share/completions/svn.fish:42 share/completions/svn.fish:43 -#, fuzzy -msgid "List directory entries in the repository." -msgstr "List directory entries in the repository" - -#: share/completions/svn.fish:44 -#, fuzzy -msgid "" -"Lock working copy paths or URLs in the repository, so that no other user can " -"commit changes to them." -msgstr "Lock working copy paths or URLs in the repository" - -#: share/completions/svn.fish:45 -#, fuzzy -msgid "Show the log messages for a set of revision(s) and/or file(s)." -msgstr "Show the log messages for a set of revision(s) and/or file(s)" - -#: share/completions/svn.fish:46 -#, fuzzy -msgid "Apply the differences between two sources to a working copy path." -msgstr "Apply the differences between two sources to a working copy path" - -#: share/completions/svn.fish:47 -#, fuzzy -msgid "Create a new directory under version control." -msgstr "Create a new directory under version control" - -#: share/completions/svn.fish:48 share/completions/svn.fish:49 -#: share/completions/svn.fish:50 share/completions/svn.fish:51 -#, fuzzy -msgid "Move and/or rename something in working copy or repository." -msgstr "Move and/or rename something in working copy or repository" - -#: share/completions/svn.fish:52 share/completions/svn.fish:53 -#: share/completions/svn.fish:54 -#, fuzzy -msgid "Remove a property from files, dirs, or revisions." -msgstr "Remove a property from files, dirs, or revisions" - -#: share/completions/svn.fish:55 share/completions/svn.fish:56 -#: share/completions/svn.fish:57 -#, fuzzy -msgid "Edit a property with an external editor." -msgstr "Edit a property with an external editor on targets" - -#: share/completions/svn.fish:58 share/completions/svn.fish:59 -#: share/completions/svn.fish:60 -#, fuzzy -msgid "Print the value of a property on files, dirs, or revisions." -msgstr "Print value of a property on files, dirs, or revisions" - -#: share/completions/svn.fish:61 share/completions/svn.fish:62 -#: share/completions/svn.fish:63 -#, fuzzy -msgid "List all properties on files, dirs, or revisions." -msgstr "List all properties on files, dirs, or revisions" - -#: share/completions/svn.fish:64 share/completions/svn.fish:65 -#: share/completions/svn.fish:66 -#, fuzzy -msgid "Set the value of a property on files, dirs, or revisions." -msgstr "Print value of a property on files, dirs, or revisions" - -#: share/completions/svn.fish:67 -#, fuzzy -msgid "Remove \\conflicted state on working copy files or directories." -msgstr "Remove conflicted state on working copy files or directories" - -#: share/completions/svn.fish:68 -#, fuzzy -msgid "Restore pristine working copy file (undo most local edits)." -msgstr "Restore pristine working copy file" - -#: share/completions/svn.fish:69 share/completions/svn.fish:70 -#: share/completions/svn.fish:71 -#, fuzzy -msgid "Print the status of working copy files and directories." -msgstr "Print the status of working copy files and directories" - -#: share/completions/svn.fish:72 share/completions/svn.fish:73 -#, fuzzy -msgid "Update the working copy to a different URL." -msgstr "Update the working copy to a different URL" - -#: share/completions/svn.fish:74 -#, fuzzy -msgid "Unlock working copy paths or URLs." -msgstr "Unlock working copy paths or URLs" - -#: share/completions/svn.fish:75 share/completions/svn.fish:76 -#, fuzzy -msgid "Bring changes from the repository into the working copy." -msgstr "Bring changes from the repository into the working copy" - -#: share/completions/svn.fish:83 share/completions/svn.fish:194 -#: share/completions/svn.fish:255 share/completions/svn.fish:271 -#: share/completions/svn.fish:287 share/completions/svn.fish:303 -#: share/completions/svn.fish:406 share/completions/svn.fish:446 -#: share/completions/svn.fish:461 share/completions/svn.fish:723 -#: share/completions/svn.fish:738 share/completions/svn.fish:753 -#: share/completions/svn.fish:767 share/completions/svn.fish:775 -#: share/completions/svn.fish:854 -#, fuzzy -msgid "Pass contents of file ARG as additional args" -msgstr "Pass contents of file as additional args" - -#: share/completions/svn.fish:84 share/completions/svn.fish:102 -#: share/completions/svn.fish:116 share/completions/svn.fish:130 -#: share/completions/svn.fish:144 share/completions/svn.fish:155 -#: share/completions/svn.fish:166 share/completions/svn.fish:178 -#: share/completions/svn.fish:187 share/completions/svn.fish:219 -#: share/completions/svn.fish:233 share/completions/svn.fish:247 -#: share/completions/svn.fish:263 share/completions/svn.fish:279 -#: share/completions/svn.fish:295 share/completions/svn.fish:311 -#: share/completions/svn.fish:329 share/completions/svn.fish:347 -#: share/completions/svn.fish:359 share/completions/svn.fish:368 -#: share/completions/svn.fish:375 share/completions/svn.fish:382 -#: share/completions/svn.fish:399 share/completions/svn.fish:413 -#: share/completions/svn.fish:426 share/completions/svn.fish:439 -#: share/completions/svn.fish:453 share/completions/svn.fish:469 -#: share/completions/svn.fish:485 share/completions/svn.fish:499 -#: share/completions/svn.fish:514 share/completions/svn.fish:529 -#: share/completions/svn.fish:544 share/completions/svn.fish:559 -#: share/completions/svn.fish:571 share/completions/svn.fish:583 -#: share/completions/svn.fish:595 share/completions/svn.fish:610 -#: share/completions/svn.fish:625 share/completions/svn.fish:640 -#: share/completions/svn.fish:653 share/completions/svn.fish:666 -#: share/completions/svn.fish:679 share/completions/svn.fish:691 -#: share/completions/svn.fish:703 share/completions/svn.fish:715 -#: share/completions/svn.fish:730 share/completions/svn.fish:745 -#: share/completions/svn.fish:760 share/completions/svn.fish:768 -#: share/completions/svn.fish:776 share/completions/svn.fish:790 -#: share/completions/svn.fish:805 share/completions/svn.fish:820 -#: share/completions/svn.fish:834 share/completions/svn.fish:847 -#: share/completions/svn.fish:859 share/completions/svn.fish:872 -#: share/completions/svn.fish:885 -#, fuzzy -msgid "Read user configuration files from directory ARG" -msgstr "Read user config files from named directory" - -#: share/completions/svn.fish:98 share/completions/svn.fish:112 -#: share/completions/svn.fish:126 share/completions/svn.fish:140 -#: share/completions/svn.fish:151 share/completions/svn.fish:162 -#: share/completions/svn.fish:174 share/completions/svn.fish:215 -#: share/completions/svn.fish:229 share/completions/svn.fish:243 -#: share/completions/svn.fish:259 share/completions/svn.fish:275 -#: share/completions/svn.fish:291 share/completions/svn.fish:307 -#: share/completions/svn.fish:325 share/completions/svn.fish:343 -#: share/completions/svn.fish:355 share/completions/svn.fish:395 -#: share/completions/svn.fish:409 share/completions/svn.fish:422 -#: share/completions/svn.fish:435 share/completions/svn.fish:449 -#: share/completions/svn.fish:465 share/completions/svn.fish:481 -#: share/completions/svn.fish:495 share/completions/svn.fish:510 -#: share/completions/svn.fish:525 share/completions/svn.fish:540 -#: share/completions/svn.fish:555 share/completions/svn.fish:567 -#: share/completions/svn.fish:579 share/completions/svn.fish:591 -#: share/completions/svn.fish:603 share/completions/svn.fish:618 -#: share/completions/svn.fish:633 share/completions/svn.fish:649 -#: share/completions/svn.fish:662 share/completions/svn.fish:675 -#: share/completions/svn.fish:687 share/completions/svn.fish:699 -#: share/completions/svn.fish:711 share/completions/svn.fish:725 -#: share/completions/svn.fish:740 share/completions/svn.fish:755 -#: share/completions/svn.fish:786 share/completions/svn.fish:801 -#: share/completions/svn.fish:816 share/completions/svn.fish:830 -#: share/completions/svn.fish:843 share/completions/svn.fish:855 -#: share/completions/svn.fish:868 share/completions/svn.fish:881 -#, fuzzy -msgid "Specify a username ARG" -msgstr "Specify a username" - -#: share/completions/svn.fish:99 share/completions/svn.fish:113 -#: share/completions/svn.fish:127 share/completions/svn.fish:141 -#: share/completions/svn.fish:152 share/completions/svn.fish:163 -#: share/completions/svn.fish:175 share/completions/svn.fish:216 -#: share/completions/svn.fish:230 share/completions/svn.fish:244 -#: share/completions/svn.fish:260 share/completions/svn.fish:276 -#: share/completions/svn.fish:292 share/completions/svn.fish:308 -#: share/completions/svn.fish:326 share/completions/svn.fish:344 -#: share/completions/svn.fish:356 share/completions/svn.fish:396 -#: share/completions/svn.fish:410 share/completions/svn.fish:423 -#: share/completions/svn.fish:436 share/completions/svn.fish:450 -#: share/completions/svn.fish:466 share/completions/svn.fish:482 -#: share/completions/svn.fish:496 share/completions/svn.fish:511 -#: share/completions/svn.fish:526 share/completions/svn.fish:541 -#: share/completions/svn.fish:556 share/completions/svn.fish:568 -#: share/completions/svn.fish:580 share/completions/svn.fish:592 -#: share/completions/svn.fish:604 share/completions/svn.fish:619 -#: share/completions/svn.fish:634 share/completions/svn.fish:650 -#: share/completions/svn.fish:663 share/completions/svn.fish:676 -#: share/completions/svn.fish:688 share/completions/svn.fish:700 -#: share/completions/svn.fish:712 share/completions/svn.fish:726 -#: share/completions/svn.fish:741 share/completions/svn.fish:756 -#: share/completions/svn.fish:787 share/completions/svn.fish:802 -#: share/completions/svn.fish:817 share/completions/svn.fish:831 -#: share/completions/svn.fish:844 share/completions/svn.fish:856 -#: share/completions/svn.fish:869 share/completions/svn.fish:882 -#, fuzzy -msgid "Specify a password ARG" -msgstr "Specify a password" - -#: share/completions/svn.fish:186 share/completions/svn.fish:479 -#: share/completions/svn.fish:828 share/completions/svn.fish:841 -#: share/completions/svn.fish:867 share/completions/svn.fish:880 -#, fuzzy -msgid "Use ARG as merge command" -msgstr "Specify merge command" - -#: share/completions/svn.fish:213 share/completions/svn.fish:227 -#: share/completions/svn.fish:241 share/completions/svn.fish:257 -#: share/completions/svn.fish:273 share/completions/svn.fish:289 -#: share/completions/svn.fish:305 share/completions/svn.fish:392 -#: share/completions/svn.fish:493 share/completions/svn.fish:508 -#: share/completions/svn.fish:523 share/completions/svn.fish:538 -#: share/completions/svn.fish:553 share/completions/svn.fish:608 -#: share/completions/svn.fish:623 share/completions/svn.fish:638 -#, fuzzy -msgid "Use ARG as external editor" -msgstr "Specify external editor" - -#: share/completions/svn.fish:214 share/completions/svn.fish:228 -#: share/completions/svn.fish:242 share/completions/svn.fish:258 -#: share/completions/svn.fish:274 share/completions/svn.fish:290 -#: share/completions/svn.fish:306 share/completions/svn.fish:393 -#: share/completions/svn.fish:448 share/completions/svn.fish:494 -#: share/completions/svn.fish:509 share/completions/svn.fish:524 -#: share/completions/svn.fish:539 share/completions/svn.fish:554 -#: share/completions/svn.fish:607 share/completions/svn.fish:622 -#: share/completions/svn.fish:637 share/completions/svn.fish:722 -#: share/completions/svn.fish:737 share/completions/svn.fish:752 -msgid "Treat value as being in charset encoding ARG" -msgstr "" - -#: share/completions/svn.fish:318 share/completions/svn.fish:336 -msgid "Use ARG as the older target" -msgstr "" - -#: share/completions/svn.fish:319 share/completions/svn.fish:337 -msgid "Use ARG as the newer target" -msgstr "" - -#: share/completions/svn.fish:320 share/completions/svn.fish:338 -#, fuzzy -msgid "Use ARG as diff command" -msgstr "Undo an edit command" - -#: share/completions/svn.fish:360 -msgid "Use a different EOL marker than the standard" -msgstr "" - -#: share/completions/svn.fish:470 -msgid "Maximum number of log entries" -msgstr "Maximum number of log entries" - #: share/completions/sylpheed.fish:8 msgid "Open composition window with address" msgstr "" @@ -5672,6 +6494,20 @@ msgstr "User interface similar to rlogin" msgid "Use Kerberos realm for authentication" msgstr "Use Kerberos realm for authentication" +#: share/completions/tmux.fish:1 +#, fuzzy +msgid "available sessions" +msgstr "Evaluate expression" + +#: share/completions/tmux.fish:5 +msgid "connected clients" +msgstr "" + +#: share/completions/tmux.fish:9 +#, fuzzy +msgid "window panes" +msgstr "Window size change" + #: share/completions/totem.fish:18 msgid "Tell any running totem instance: Add to playlist" msgstr "" @@ -5761,26 +6597,41 @@ msgstr "" msgid "Remove all temporarily added virtual overlays from the eix database" msgstr "" +#: share/completions/vagrant.fish:3 +#, fuzzy +msgid "Test if vagrant has yet to be given the main command" +msgstr "Test if apt has yet to be given the subcommand" + +#: share/completions/vagrant.fish:34 +#, fuzzy +msgid "Lists all available Vagrant boxes" +msgstr "List names of available signals" + #: share/completions/valgrind.fish:12 msgid "Skin" msgstr "Skin" -#: share/completions/valgrind.fish:71 +#: share/completions/valgrind.fish:78 msgid "The number of bytes of heap overhead per allocation" msgstr "The number of bytes of heap overhead per allocation" -#: share/completions/valgrind.fish:72 +#: share/completions/valgrind.fish:79 msgid "Profile stack usage" msgstr "Profile stack usage" -#: share/completions/valgrind.fish:73 +#: share/completions/valgrind.fish:80 msgid "Depth of call chain" msgstr "Depth of call chain" -#: share/completions/valgrind.fish:74 +#: share/completions/valgrind.fish:81 msgid "Profiling output format" msgstr "Profiling output format" +#: share/completions/vim-addons.fish:8 +#, fuzzy +msgid "Test if vim-addons has yet to be given the subcommand" +msgstr "Test if apt has yet to be given the subcommand" + #: share/completions/w.fish:6 msgid "Username" msgstr "Username" @@ -6300,6 +7151,210 @@ msgstr "Include only the following names" msgid "Don't compress files with these suffixes" msgstr "Don't compress files with these suffixes" +#: share/completions/zypper.fish:30 +#, fuzzy +msgid "Print help" +msgstr "Print the URIs" + +#: share/completions/zypper.fish:31 +msgid "Accept multiple commands at once" +msgstr "" + +#: share/completions/zypper.fish:32 +msgid "List all defined repositories" +msgstr "" + +#: share/completions/zypper.fish:33 +#, fuzzy +msgid "Add a new repository" +msgstr "Update the repository" + +#: share/completions/zypper.fish:34 +#, fuzzy +msgid "Remove specified repository" +msgstr "Specify the repository URL" + +#: share/completions/zypper.fish:35 +#, fuzzy +msgid "Rename specified repository" +msgstr "Repair the corrupted repository" + +#: share/completions/zypper.fish:36 +#, fuzzy +msgid "Modify specified repository" +msgstr "Specify the repository URL" + +#: share/completions/zypper.fish:37 +#, fuzzy +msgid "Refresh all repositories" +msgstr "Read-only repository mode" + +#: share/completions/zypper.fish:38 +#, fuzzy +msgid "Clean local caches" +msgstr "Clean local caches and packages" + +#: share/completions/zypper.fish:39 +msgid "List all defined services" +msgstr "" + +#: share/completions/zypper.fish:40 +#, fuzzy +msgid "Add a new service" +msgstr "Add a new key" + +#: share/completions/zypper.fish:41 +#, fuzzy +msgid "Modify specified service" +msgstr "Use specified keyserver" + +#: share/completions/zypper.fish:42 +#, fuzzy +msgid "Remove specified service" +msgstr "Use specified keyserver" + +#: share/completions/zypper.fish:43 +msgid "Refresh all services" +msgstr "" + +#: share/completions/zypper.fish:44 +#, fuzzy +msgid "Install packages" +msgstr "Install new package" + +#: share/completions/zypper.fish:46 +#, fuzzy +msgid "Verify integrity of package dependencies" +msgstr "Install/remove packages for dependencies" + +#: share/completions/zypper.fish:47 +#, fuzzy +msgid "Install source packages and their build dependencies" +msgstr "Install/remove packages for dependencies" + +#: share/completions/zypper.fish:48 +#, fuzzy +msgid "Install newly added packages recommended by installed packages" +msgstr "" +"Install the packages even if they replace files from other, already " +"installed, packages" + +#: share/completions/zypper.fish:49 +#, fuzzy +msgid "Update installed packages with newer versions" +msgstr "Updates packages to the best version available" + +#: share/completions/zypper.fish:50 +#, fuzzy +msgid "List available updates" +msgstr "Print available list" + +#: share/completions/zypper.fish:51 +#, fuzzy +msgid "Install needed patches" +msgstr "Install new package" + +#: share/completions/zypper.fish:52 +#, fuzzy +msgid "List needed patches" +msgstr "Print byte offset of matches" + +#: share/completions/zypper.fish:53 +#, fuzzy +msgid "Perform a distribution upgrade" +msgstr "Create a distribution tarball" + +#: share/completions/zypper.fish:54 +#, fuzzy +msgid "Check for patches" +msgstr "Create compressed patches" + +#: share/completions/zypper.fish:55 +#, fuzzy +msgid "Search for packages matching a pattern" +msgstr "Search package containing pattern" + +#: share/completions/zypper.fish:56 +#, fuzzy +msgid "Show full information for specified packages" +msgstr "Display change information for the package" + +#: share/completions/zypper.fish:57 +msgid "Show full information for specified patches" +msgstr "" + +#: share/completions/zypper.fish:58 +#, fuzzy +msgid "Show full information for specified patterns" +msgstr "Exclude files that match pattern" + +#: share/completions/zypper.fish:59 +msgid "Show full information for specified products" +msgstr "" + +#: share/completions/zypper.fish:60 +#, fuzzy +msgid "List all available patches" +msgstr "List names of available signals" + +#: share/completions/zypper.fish:61 +#, fuzzy +msgid "List all available packages" +msgstr "Reinstall packages" + +#: share/completions/zypper.fish:62 +#, fuzzy +msgid "List all available patterns" +msgstr "List names of available signals" + +#: share/completions/zypper.fish:63 +#, fuzzy +msgid "List all available products" +msgstr "List names of available signals" + +#: share/completions/zypper.fish:64 +#, fuzzy +msgid "List packages providing specified capability" +msgstr "Query all packages that provide the specified capability" + +#: share/completions/zypper.fish:65 +#, fuzzy +msgid "Add a package lock" +msgstr "Rebuild a package" + +#: share/completions/zypper.fish:66 +#, fuzzy +msgid "Remove a package lock" +msgstr "Remove packages" + +#: share/completions/zypper.fish:67 +#, fuzzy +msgid "List current package locks" +msgstr "List bugs from packages" + +#: share/completions/zypper.fish:68 +#, fuzzy +msgid "Remove unused locks" +msgstr "Remove source packages" + +#: share/completions/zypper.fish:69 +msgid "Compare two version strings" +msgstr "" + +#: share/completions/zypper.fish:70 +#, fuzzy +msgid "Print the target operating system ID string" +msgstr "Print operating system" + +#: share/completions/zypper.fish:71 +msgid "Print report about licenses and EULAs of installed packages" +msgstr "" + +#: share/completions/zypper.fish:72 +#, fuzzy +msgid "Download source rpms for all installed packages to a local directory" +msgstr "Do not ever ascend to the parent directory" + #: share/functions/N_.fish:3 msgid "No-op" msgstr "" @@ -6309,10 +7364,23 @@ msgstr "" msgid "Alias for the gettext command" msgstr "Help for the specified command" -#: share/functions/_.fish:9 seq:17 +#: share/functions/_.fish:9 msgid "fish" msgstr "fish" +#: share/functions/__fish_complete_abook_formats.fish:1 +msgid "Complete abook formats" +msgstr "" + +#: share/functions/__fish_complete_atool.fish:1 +msgid "Complete atool" +msgstr "" + +#: share/functions/__fish_complete_atool_archive_contents.fish:1 +#, fuzzy +msgid "List archive contents" +msgstr "List archive" + #: share/functions/__fish_complete_bittorrent.fish:9 msgid "IP to report to the tracker" msgstr "IP to report to the tracker" @@ -6325,14 +7393,264 @@ msgstr "Minimum port to listen to" msgid "Maximum port to listen to" msgstr "Maximum port to listen to" -#: share/functions/__fish_complete_command.fish:2 +#: share/functions/__fish_complete_command.fish:1 msgid "Complete using all available commands" msgstr "" +#: share/functions/__fish_complete_convert_options.fish:1 +#, fuzzy +msgid "Complete Convert options" +msgstr "Tolerate sloppy mount options" + +#: share/functions/__fish_complete_diff.fish:3 +msgid "Ignore case differences" +msgstr "Ignore case differences" + +#: share/functions/__fish_complete_diff.fish:4 +msgid "Ignore case when comparing file names" +msgstr "Ignore case when comparing file names" + +#: share/functions/__fish_complete_diff.fish:5 +msgid "Consider case when comparing file names" +msgstr "Consider case when comparing file names" + +#: share/functions/__fish_complete_diff.fish:6 +msgid "Ignore changes due to tab expansion" +msgstr "Ignore changes due to tab expansion" + +#: share/functions/__fish_complete_diff.fish:7 +msgid "Ignore changes in the amount of white space" +msgstr "Ignore changes in the amount of white space" + +#: share/functions/__fish_complete_diff.fish:8 +msgid "Ignore all white space" +msgstr "Ignore all white space" + +#: share/functions/__fish_complete_diff.fish:9 +msgid "Ignore changes whose lines are all blank" +msgstr "Ignore changes whose lines are all blank" + +#: share/functions/__fish_complete_diff.fish:11 +msgid "Treat all files as text" +msgstr "Treat all files as text" + +#: share/functions/__fish_complete_diff.fish:12 +msgid "Recursively compare subdirectories" +msgstr "Recursively compare subdirectories" + +#: share/functions/__fish_complete_diff.fish:13 +msgid "Treat absent files as empty" +msgstr "Treat absent files as empty" + +#: share/functions/__fish_complete_diff.fish:15 +msgid "Output 3 lines of copied context" +msgstr "Output 3 lines of copied context" + +#: share/functions/__fish_complete_diff.fish:17 +msgid "Output 3 lines of unified context" +msgstr "Output 3 lines of unified context" + +#: share/functions/__fish_complete_diff.fish:18 +msgid "Output only whether the files differ" +msgstr "Output only whether the files differ" + +#: share/functions/__fish_complete_diff.fish:19 +msgid "Output a normal diff" +msgstr "Output a normal diff" + +#: share/functions/__fish_complete_diff.fish:20 +msgid "Output in two columns" +msgstr "Output in two columns" + +#: share/functions/__fish_complete_diff.fish:22 +msgid "Try to find a smaller set of changes" +msgstr "Try to find a smaller set of changes" + +#: share/functions/__fish_complete_diff.fish:25 +msgid "Pass the output through 'pr'" +msgstr "Pass the output through “prâ€" + +#: share/functions/__fish_complete_grep.fish:2 +msgid "Print NUM lines of trailing context" +msgstr "Print NUM lines of trailing context" + +#: share/functions/__fish_complete_grep.fish:3 +msgid "Process binary file as text" +msgstr "Process binary file as text" + +#: share/functions/__fish_complete_grep.fish:4 +msgid "Print NUM lines of leading context" +msgstr "Print NUM lines of leading context" + +#: share/functions/__fish_complete_grep.fish:5 +msgid "Print NUM lines of context" +msgstr "Print NUM lines of context" + +#: share/functions/__fish_complete_grep.fish:6 +#, fuzzy +msgid "Print byte offset of matches" +msgstr "Only print number of matches" + +#: share/functions/__fish_complete_grep.fish:7 +msgid "Assume data type for binary files" +msgstr "Assume data type for binary files" + +#: share/functions/__fish_complete_grep.fish:10 +#, fuzzy +msgid "Only print number of matches" +msgstr "Only print number of matches" + +#: share/functions/__fish_complete_grep.fish:13 +msgid "Pattern is extended regexp" +msgstr "Pattern is extended regexp" + +#: share/functions/__fish_complete_grep.fish:14 +msgid "Pattern is a regexp" +msgstr "Pattern is a regexp" + +#: share/functions/__fish_complete_grep.fish:15 +msgid "Read pattern list from file. Skip files whose base name matches list" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:16 +#, fuzzy +msgid "Exclude matching directories from recursive searches" +msgstr "Search directories for source" + +#: share/functions/__fish_complete_grep.fish:17 +msgid "Pattern is a fixed string" +msgstr "Pattern is a fixed string" + +#: share/functions/__fish_complete_grep.fish:19 +msgid "Pattern is basic regex" +msgstr "Pattern is basic regex" + +#: share/functions/__fish_complete_grep.fish:20 +msgid "Print filename" +msgstr "Print filename" + +#: share/functions/__fish_complete_grep.fish:21 +#, fuzzy +msgid "Suppress printing filename" +msgstr "Supress printing filename" + +#: share/functions/__fish_complete_grep.fish:23 +msgid "Skip binary files" +msgstr "Skip binary files" + +#: share/functions/__fish_complete_grep.fish:24 +msgid "Ignore case" +msgstr "Ignore case" + +#: share/functions/__fish_complete_grep.fish:25 +msgid "Print first non-matching file" +msgstr "Print first non-matching file" + +#: share/functions/__fish_complete_grep.fish:26 +msgid "Print first matching file" +msgstr "Print first matching file" + +#: share/functions/__fish_complete_grep.fish:27 +msgid "Stop reading after NUM matches" +msgstr "Stop reading after NUM matches" + +#: share/functions/__fish_complete_grep.fish:28 +msgid "Use the mmap system call to read input" +msgstr "Use the mmap system call to read input" + +#: share/functions/__fish_complete_grep.fish:29 +#, fuzzy +msgid "Print line number" +msgstr "Print linenumber" + +#: share/functions/__fish_complete_grep.fish:30 +msgid "Show only matching part" +msgstr "Show only matching part" + +#: share/functions/__fish_complete_grep.fish:31 +msgid "Rename stdin" +msgstr "Rename stdin" + +#: share/functions/__fish_complete_grep.fish:32 +msgid "Use line buffering" +msgstr "Use line buffering" + +#: share/functions/__fish_complete_grep.fish:33 +#, fuzzy +msgid "Pattern is a Perl regexp (PCRE) string" +msgstr "Pattern is a regexp" + +#: share/functions/__fish_complete_grep.fish:34 +#: share/functions/__fish_complete_grep.fish:35 +msgid "Do not write anything" +msgstr "Do not write anything" + +#: share/functions/__fish_complete_grep.fish:36 +#: share/functions/__fish_complete_grep.fish:37 +#, fuzzy +msgid "Read files under each directory, recursively" +msgstr "List subdirectory recursively" + +#: share/functions/__fish_complete_grep.fish:38 +#, fuzzy +msgid "Search only files matching PATTERN" +msgstr "Recurse, search file matching PATTERN" + +#: share/functions/__fish_complete_grep.fish:39 +#, fuzzy +msgid "Skip files matching PATTERN" +msgstr "Recurse, skip file matching PATTERN" + +#: share/functions/__fish_complete_grep.fish:40 +msgid "Suppress error messages" +msgstr "Suppress error messages" + +#: share/functions/__fish_complete_grep.fish:41 +msgid "Ensure first character of actual line content lies on a tab stop" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:42 +msgid "Treat files as binary" +msgstr "Treat files as binary" + +#: share/functions/__fish_complete_grep.fish:43 +msgid "Report Unix-style byte offsets" +msgstr "Report Unix-style byte offsets" + +#: share/functions/__fish_complete_grep.fish:45 +msgid "Invert the sense of matching" +msgstr "Invert the sense of matching" + +#: share/functions/__fish_complete_grep.fish:46 +msgid "Only whole matching words" +msgstr "Only whole matching words" + +#: share/functions/__fish_complete_grep.fish:47 +msgid "Only whole matching lines" +msgstr "Only whole matching lines" + +#: share/functions/__fish_complete_grep.fish:48 +#, fuzzy +msgid "Obsolete synonym for -i" +msgstr "Synonym for -i" + +#: share/functions/__fish_complete_grep.fish:49 +msgid "treat input as a set of lines each terminated by a zero byte" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:50 +msgid "Output a zero byte after filename" +msgstr "Output a zero byte after filename" + #: share/functions/__fish_complete_groups.fish:2 msgid "Print a list of local groups, with group members as the description" msgstr "" +#: share/functions/__fish_complete_lpr_option.fish:1 +#, fuzzy +msgid "Complete lpr option" +msgstr "Tolerate sloppy mount options" + #: share/functions/__fish_complete_ls.fish:16 msgid "Show hidden" msgstr "Show hidden" @@ -6535,12 +7853,46 @@ msgstr "Display each file's MAC label" msgid "Include the file flags in a long (-l) output" msgstr "Include the file flags in a long (-l) output" +#: share/functions/__fish_complete_ppp_peer.fish:1 +msgid "Complete isp name for pon/poff" +msgstr "" + +#: share/functions/__fish_complete_proc.fish:1 +#, fuzzy +msgid "Complete by list of running processes" +msgstr "Print a list of running screen sessions" + +#: share/functions/__fish_complete_python.fish:2 +#: share/functions/__fish_complete_python.fish:28 +#: share/functions/__fish_complete_vi.fish:54 +msgid "Don\\t" +msgstr "" + +#: share/functions/__fish_complete_python.fish:12 +msgid "Disable import of site module" +msgstr "Disable import of site module" + +#: share/functions/__fish_complete_python.fish:13 +msgid "Unbuffered input and output" +msgstr "Unbuffered input and output" + +#: share/functions/__fish_complete_python.fish:24 +msgid "Warn on mixed tabs and spaces" +msgstr "Warn on mixed tabs and spaces" + +#: share/functions/__fish_complete_setxkbmap.fish:1 +#, fuzzy +msgid "Complete setxkb options" +msgstr "Tolerate sloppy mount options" + #: share/functions/__fish_complete_ssh.fish:4 -msgid "Protocoll version 1 only" +#, fuzzy +msgid "Protocol version 1 only" msgstr "Protocoll version 1 only" #: share/functions/__fish_complete_ssh.fish:5 -msgid "Protocoll version 2 only" +#, fuzzy +msgid "Protocol version 2 only" msgstr "Protocoll version 2 only" #: share/functions/__fish_complete_ssh.fish:6 @@ -6571,6 +7923,340 @@ msgstr "Identity file" msgid "Options" msgstr "Options" +#: share/functions/__fish_complete_svn.fish:48 +msgid "" +"Put files and directories under version control, scheduling them for " +"addition to repository. They will be added in next commit." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:49 +#: share/functions/__fish_complete_svn.fish:51 +#, fuzzy +msgid "" +"Output the content of specified files or URLs with revision and author " +"information in-line." +msgstr "Output files/URLs with revision and author information inline" + +#: share/functions/__fish_complete_svn.fish:50 +#, fuzzy +msgid "Output the content of specified files or URLs." +msgstr "Output content of files/URLs" + +#: share/functions/__fish_complete_svn.fish:52 +#, fuzzy +msgid "Check out a working copy from a repository." +msgstr "Check out a working copy from the repository" + +#: share/functions/__fish_complete_svn.fish:53 +msgid "" +"Recursively clean up the working copy, removing locks, resuming unfinished " +"operations, etc." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:54 +#, fuzzy +msgid "Send changes from your working copy to the repository." +msgstr "Send changes from your working copy to the repository" + +#: share/functions/__fish_complete_svn.fish:55 +#, fuzzy +msgid "Duplicate something in working copy or repository, remembering history." +msgstr "Move and/or rename something in working copy or repository" + +#: share/functions/__fish_complete_svn.fish:56 +#, fuzzy +msgid "Display the differences between two revisions or paths." +msgstr "Apply the differences between two sources to a working copy path" + +#: share/functions/__fish_complete_svn.fish:57 +msgid "Create an unversioned copy of a tree." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:58 +#, fuzzy +msgid "Describe the usage of this program or its subcommands." +msgstr "Describe the usage of this program or its subcommands" + +#: share/functions/__fish_complete_svn.fish:59 +#, fuzzy +msgid "Commit an unversioned file or tree into the repository." +msgstr "Commit an unversioned file or tree into the repository" + +#: share/functions/__fish_complete_svn.fish:60 +#, fuzzy +msgid "Display information about a local or remote item." +msgstr "Display information about a local or remote item" + +#: share/functions/__fish_complete_svn.fish:61 +#, fuzzy +msgid "List directory entries in the repository." +msgstr "List directory entries in the repository" + +#: share/functions/__fish_complete_svn.fish:62 +#, fuzzy +msgid "" +"Lock working copy paths or URLs in the repository, so that no other user can " +"commit changes to them." +msgstr "Lock working copy paths or URLs in the repository" + +#: share/functions/__fish_complete_svn.fish:63 +#, fuzzy +msgid "Show the log messages for a set of revision(s) and/or file(s)." +msgstr "Show the log messages for a set of revision(s) and/or file(s)" + +#: share/functions/__fish_complete_svn.fish:64 +#, fuzzy +msgid "Apply the differences between two sources to a working copy path." +msgstr "Apply the differences between two sources to a working copy path" + +#: share/functions/__fish_complete_svn.fish:65 +#, fuzzy +msgid "Display information related to merges" +msgstr "Display change information for the package" + +#: share/functions/__fish_complete_svn.fish:66 +#, fuzzy +msgid "Create a new directory under version control." +msgstr "Create a new directory under version control" + +#: share/functions/__fish_complete_svn.fish:67 +#, fuzzy +msgid "Move and/or rename something in working copy or repository." +msgstr "Move and/or rename something in working copy or repository" + +#: share/functions/__fish_complete_svn.fish:68 +#, fuzzy +msgid "Apply a unidiff patch to the working copy" +msgstr "Display unrecorded changes in the working copy" + +#: share/functions/__fish_complete_svn.fish:69 +#, fuzzy +msgid "Remove a property from files, dirs, or revisions." +msgstr "Remove a property from files, dirs, or revisions" + +#: share/functions/__fish_complete_svn.fish:70 +#, fuzzy +msgid "Edit a property with an external editor." +msgstr "Edit a property with an external editor on targets" + +#: share/functions/__fish_complete_svn.fish:71 +#, fuzzy +msgid "Print the value of a property on files, dirs, or revisions." +msgstr "Print value of a property on files, dirs, or revisions" + +#: share/functions/__fish_complete_svn.fish:72 +#, fuzzy +msgid "List all properties on files, dirs, or revisions." +msgstr "List all properties on files, dirs, or revisions" + +#: share/functions/__fish_complete_svn.fish:73 +#, fuzzy +msgid "Set the value of a property on files, dirs, or revisions." +msgstr "Print value of a property on files, dirs, or revisions" + +#: share/functions/__fish_complete_svn.fish:74 +#, fuzzy +msgid "Rewrite working copy url metadata" +msgstr "Delete working copy if release succeeds" + +#: share/functions/__fish_complete_svn.fish:75 +#, fuzzy +msgid "Remove files and directories from version control." +msgstr "Place files or directories under version control" + +#: share/functions/__fish_complete_svn.fish:76 +#, fuzzy +msgid "Remove conflicts on working copy files or directories." +msgstr "Remove conflicted state on working copy files or directories" + +#: share/functions/__fish_complete_svn.fish:77 +#, fuzzy +msgid "Remove \\conflicted state on working copy files or directories." +msgstr "Remove conflicted state on working copy files or directories" + +#: share/functions/__fish_complete_svn.fish:78 +#, fuzzy +msgid "Restore pristine working copy file (undo most local edits)." +msgstr "Restore pristine working copy file" + +#: share/functions/__fish_complete_svn.fish:79 +#, fuzzy +msgid "Print the status of working copy files and directories." +msgstr "Print the status of working copy files and directories" + +#: share/functions/__fish_complete_svn.fish:80 +#, fuzzy +msgid "Update the working copy to a different URL." +msgstr "Update the working copy to a different URL" + +#: share/functions/__fish_complete_svn.fish:81 +#, fuzzy +msgid "Unlock working copy paths or URLs." +msgstr "Unlock working copy paths or URLs" + +#: share/functions/__fish_complete_svn.fish:82 +#, fuzzy +msgid "Bring changes from the repository into the working copy." +msgstr "Bring changes from the repository into the working copy" + +#: share/functions/__fish_complete_svn.fish:83 +msgid "Upgrade the metadata storage format for a working copy." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:90 +#, fuzzy +msgid "Do not cache authentication tokens" +msgstr "Don't cache auth tokens" + +#: share/functions/__fish_complete_svn.fish:91 +msgid "Do no interactive prompting" +msgstr "Do no interactive prompting" + +#: share/functions/__fish_complete_svn.fish:92 +msgid "" +"Accept SSL server certificates from unknown authorities (ony with --non-" +"interactive)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:103 +#, fuzzy +msgid "Specify log message" +msgstr "Specify email address" + +#: share/functions/__fish_complete_svn.fish:105 +#, fuzzy +msgid "Read log message from file" +msgstr "Read log message from file" + +#: share/functions/__fish_complete_svn.fish:106 +#, fuzzy +msgid "Force validity of log message source" +msgstr "Force log message source validity" + +#: share/functions/__fish_complete_svn.fish:118 +#, fuzzy +msgid "Print nothing, or only summary information" +msgstr "Print out history information for files" + +#: share/functions/__fish_complete_svn.fish:122 +msgid "Force operation to run" +msgstr "Force operation to run" + +#: share/functions/__fish_complete_svn.fish:126 +#, fuzzy +msgid "Process contents of file ARG as additional args" +msgstr "Pass contents of file as additional args" + +#: share/functions/__fish_complete_svn.fish:130 +msgid "Operate only on members of changelist" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:134 +#, fuzzy +msgid "Output in xml" +msgstr "Output in XML" + +#: share/functions/__fish_complete_svn.fish:138 +#, fuzzy +msgid "Retrieve revision property" +msgstr "Operate on revision property" + +#: share/functions/__fish_complete_svn.fish:150 +msgid "Ignore externals definitions" +msgstr "Ignore externals definitions" + +#: share/functions/__fish_complete_svn.fish:154 +#, fuzzy +msgid "Print extra information" +msgstr "Print extra info" + +#: share/functions/__fish_complete_svn.fish:158 +#, fuzzy +msgid "Operate on a revision property (use with -r)" +msgstr "Operate on revision property" + +#: share/functions/__fish_complete_svn.fish:162 +msgid "Add intermediate parents" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:189 +#, fuzzy +msgid "Try operation but make no changes" +msgstr "Try to find a smaller set of changes" + +#: share/functions/__fish_complete_svn.fish:193 +#, fuzzy +msgid "Ignore ancestry when calculating merges" +msgstr "Ignore ancestry when calculating merge" + +#: share/functions/__fish_complete_svn.fish:197 +msgid "Override diff-cmd specified in config file" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:198 +#, fuzzy +msgid "Use external diff command" +msgstr "Undo an edit command" + +#: share/functions/__fish_complete_svn.fish:202 +msgid "Disable automatic properties" +msgstr "Disable automatic properties" + +#: share/functions/__fish_complete_svn.fish:206 +#, fuzzy +msgid "Set new working copy depth" +msgstr "Set RAW writing mode" + +#: share/functions/__fish_complete_svn.fish:230 +msgid "don\\t" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:241 +msgid "Use ARG as the older target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:242 +msgid "Use ARG as the newer target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:243 +#, fuzzy +msgid "Do not print differences for deleted files" +msgstr "Do not print lines without delimiter" + +#: share/functions/__fish_complete_svn.fish:244 +#, fuzzy +msgid "Notice ancestry when calculating differences" +msgstr "Ignore ancestry when calculating merge" + +#: share/functions/__fish_complete_svn.fish:245 +msgid "Show a summary of the results" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:257 +#, fuzzy +msgid "Do not cross copies while traversing history" +msgstr "Do not cross copies" + +#: share/functions/__fish_complete_svn.fish:259 +#, fuzzy +msgid "Produce diff output" +msgstr "Audio output" + +#: share/functions/__fish_complete_svn.fish:279 +msgid "Use strict semantics" +msgstr "Use strict semantics" + +#: share/functions/__fish_complete_svn.fish:306 +#, fuzzy +msgid "Relocate via URL-rewriting" +msgstr "Relocate VIA URL-rewriting" + +#: share/functions/__fish_complete_svn_diff.fish:1 +#, fuzzy +msgid "Complete \"svn diff\" arguments" +msgstr "Count the number of arguments" + #: share/functions/__fish_complete_tar.fish:14 #: share/functions/__fish_complete_tar.fish:21 #: share/functions/__fish_complete_tar.fish:28 @@ -6583,183 +8269,187 @@ msgstr "Archive file" msgid "Print a list of local users, with the real user name as a description" msgstr "" -#: share/functions/__fish_complete_vi.fish:45 +#: share/functions/__fish_complete_vi.fish:37 #, fuzzy msgid "Start in Arabic mode" msgstr "Start interface" -#: share/functions/__fish_complete_vi.fish:46 +#: share/functions/__fish_complete_vi.fish:38 #, fuzzy msgid "Start in binary mode" msgstr "Standard mode" -#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:39 msgid "Behave mostly like vi" msgstr "" -#: share/functions/__fish_complete_vi.fish:48 +#: share/functions/__fish_complete_vi.fish:40 #, fuzzy msgid "Start in diff mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:49 +#: share/functions/__fish_complete_vi.fish:41 #, fuzzy msgid "Debugging mode" msgstr "Debug mode" -#: share/functions/__fish_complete_vi.fish:50 +#: share/functions/__fish_complete_vi.fish:42 #, fuzzy msgid "Start in Ex mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:51 +#: share/functions/__fish_complete_vi.fish:43 #, fuzzy msgid "Start in improved Ex mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:52 -#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:44 +#: share/functions/__fish_complete_vi.fish:67 #, fuzzy msgid "Start in foreground mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:53 +#: share/functions/__fish_complete_vi.fish:45 #, fuzzy msgid "Start in Farsi mode" msgstr "Standard mode" -#: share/functions/__fish_complete_vi.fish:54 +#: share/functions/__fish_complete_vi.fish:46 #, fuzzy msgid "Start in GUI mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:55 -#: share/functions/__fish_complete_vi.fish:77 +#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:69 #, fuzzy msgid "Print help message and exit" msgstr "Load the media and exit" -#: share/functions/__fish_complete_vi.fish:56 +#: share/functions/__fish_complete_vi.fish:48 #, fuzzy msgid "Start in Hebrew mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:57 +#: share/functions/__fish_complete_vi.fish:49 msgid "List swap files" msgstr "" -#: share/functions/__fish_complete_vi.fish:58 +#: share/functions/__fish_complete_vi.fish:50 #, fuzzy msgid "Start in lisp mode" msgstr "Start in folder index" -#: share/functions/__fish_complete_vi.fish:59 +#: share/functions/__fish_complete_vi.fish:51 #, fuzzy msgid "Disable file modification" msgstr "Don't trust the file modification times" -#: share/functions/__fish_complete_vi.fish:60 +#: share/functions/__fish_complete_vi.fish:52 #, fuzzy msgid "Disallow file modification" msgstr "Show last modification only" -#: share/functions/__fish_complete_vi.fish:61 +#: share/functions/__fish_complete_vi.fish:53 msgid "Reset compatibility mode" msgstr "" #: share/functions/__fish_complete_vi.fish:62 -msgid "Don\\t" -msgstr "" - -#: share/functions/__fish_complete_vi.fish:70 #, fuzzy msgid "Start in easy mode" msgstr "Start interface" -#: share/functions/__fish_complete_vi.fish:71 +#: share/functions/__fish_complete_vi.fish:63 #, fuzzy msgid "Start in restricted mode" msgstr "Restricted mode" -#: share/functions/__fish_complete_vi.fish:73 +#: share/functions/__fish_complete_vi.fish:65 msgid "Become an editor server for NetBeans" msgstr "" -#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:68 msgid "Echo the Window ID on stdout (GTK GUI only)" msgstr "" -#: share/functions/__fish_complete_vi.fish:78 +#: share/functions/__fish_complete_vi.fish:70 #, fuzzy msgid "Do not expand wildcards" msgstr "Do not expand pattern" -#: share/functions/__fish_complete_vi.fish:79 +#: share/functions/__fish_complete_vi.fish:71 msgid "Skip loading plugins" msgstr "" -#: share/functions/__fish_complete_vi.fish:80 -#: share/functions/__fish_complete_vi.fish:83 -#: share/functions/__fish_complete_vi.fish:84 -#: share/functions/__fish_complete_vi.fish:85 +#: share/functions/__fish_complete_vi.fish:72 +#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:77 #, fuzzy msgid "Edit files on Vim server" msgstr "Edit files in place" -#: share/functions/__fish_complete_vi.fish:81 +#: share/functions/__fish_complete_vi.fish:73 #, fuzzy msgid "Evaluate expr on Vim server" msgstr "Evaluate expression" -#: share/functions/__fish_complete_vi.fish:82 +#: share/functions/__fish_complete_vi.fish:74 #, fuzzy msgid "Send keys to Vim server" msgstr "Send mail to user" -#: share/functions/__fish_complete_vi.fish:86 +#: share/functions/__fish_complete_vi.fish:78 msgid "List all Vim servers that can be found" msgstr "" -#: share/functions/__fish_complete_vi.fish:87 +#: share/functions/__fish_complete_vi.fish:79 #, fuzzy msgid "Set server name" msgstr "Service name" -#: share/functions/__fish_complete_vi.fish:88 +#: share/functions/__fish_complete_vi.fish:80 #, fuzzy msgid "Print version information and exit" msgstr "Ignore all version information" -#: share/functions/__fish_complete_vi.fish:99 +#: share/functions/__fish_complete_vi.fish:91 msgid "Suppress all interactive user feedback" msgstr "" -#: share/functions/__fish_complete_vi.fish:100 -#: share/functions/__fish_complete_vi.fish:107 +#: share/functions/__fish_complete_vi.fish:92 +#: share/functions/__fish_complete_vi.fish:99 msgid "Encrypt/decrypt text" msgstr "" -#: share/functions/__fish_complete_vi.fish:101 +#: share/functions/__fish_complete_vi.fish:93 msgid "Set up for editing LISP programs" msgstr "" -#: share/functions/__fish_complete_vi.fish:102 +#: share/functions/__fish_complete_vi.fish:94 msgid "List saved file names after crash" msgstr "" -#: share/functions/__fish_complete_vi.fish:103 +#: share/functions/__fish_complete_vi.fish:95 #, fuzzy -msgid "Readonly mode" +msgid "Read-only mode" msgstr "Read only" -#: share/functions/__fish_complete_vi.fish:104 +#: share/functions/__fish_complete_vi.fish:96 msgid "Use linear search for tags if tag file not sorted" msgstr "" -#: share/functions/__fish_complete_vi.fish:105 +#: share/functions/__fish_complete_vi.fish:97 msgid "Start in display editing state" msgstr "" +#: share/functions/__fish_complete_wvdial_peers.fish:1 +msgid "Complete wvdial peers" +msgstr "" + +#: share/functions/__fish_complete_xsum.fish:1 +msgid "Complete md5sum sha1 etc" +msgstr "" + #: share/functions/__fish_config_interactive.fish:65 #, sh-format msgid "" @@ -6769,62 +8459,139 @@ msgid "" "\\n" msgstr "" -#: share/functions/__fish_config_interactive.fish:81 +#: share/functions/__fish_config_interactive.fish:82 #, fuzzy msgid "Welcome to fish, the friendly interactive shell" msgstr "Welcome to fish, the friendly interactive shell" -#: share/functions/__fish_config_interactive.fish:82 +#: share/functions/__fish_config_interactive.fish:83 #, fuzzy msgid "Type %shelp%s for instructions on how to use fish" msgstr "Type %shelp%s for instructions on how to use fish" -#: share/functions/__fish_config_interactive.fish:98 -msgid "Commands to execute when fish exits" -msgstr "Commands to execute when fish exits" - -#: share/functions/__fish_config_interactive.fish:99 -msgid "Good bye\\n" -msgstr "Good bye\\n" - -#: share/functions/__fish_config_interactive.fish:163 +#: share/functions/__fish_config_interactive.fish:173 msgid "Event handler, repaints the prompt when fish_color_cwd changes" msgstr "Event handler, repaints the prompt when fish_color_cwd changes" -#: share/functions/__fish_config_interactive.fish:170 +#: share/functions/__fish_config_interactive.fish:180 #, fuzzy msgid "Event handler, repaints the prompt when fish_color_cwd_root changes" msgstr "Event handler, repaints the prompt when fish_color_cwd changes" -#: share/functions/__fish_config_interactive.fish:182 +#: share/functions/__fish_config_interactive.fish:192 msgid "Start service" msgstr "Start service" -#: share/functions/__fish_config_interactive.fish:183 +#: share/functions/__fish_config_interactive.fish:193 msgid "Stop service" msgstr "Stop service" -#: share/functions/__fish_config_interactive.fish:184 +#: share/functions/__fish_config_interactive.fish:194 msgid "Print service status" msgstr "Print service status" -#: share/functions/__fish_config_interactive.fish:185 +#: share/functions/__fish_config_interactive.fish:195 msgid "Stop and then start service" msgstr "Stop and then start service" -#: share/functions/__fish_config_interactive.fish:186 +#: share/functions/__fish_config_interactive.fish:196 msgid "Reload service configuration" msgstr "Reload service configuration" +#: share/functions/__fish_config_interactive.fish:228 +#, sh-format +msgid "Notify VTE of change to $PWD" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:173 +msgid "Helper function for __fish_git_prompt" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:244 +msgid "svn_upstream" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:348 +#, fuzzy +msgid "Prompt function for Git" +msgstr "Current functions are: " + +#: share/functions/__fish_git_prompt.fish:458 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has staged " +"files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:471 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has " +"tracked, modified files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:526 +msgid "__fish_git_prompt helper, returns the current Git operation and branch" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:639 +msgid "__fish_git_prompt helper, checks char variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:690 +msgid "__fish_git_prompt helper, checks color variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:730 +#, fuzzy +msgid "Event handler, repaints prompt when functionality changes" +msgstr "Event handler, repaints the prompt when fish_color_cwd changes" + +#: share/functions/__fish_git_prompt.fish:748 +#, fuzzy +msgid "Event handler, repaints prompt when any color changes" +msgstr "Event handler, repaints the prompt when fish_color_cwd changes" + +#: share/functions/__fish_git_prompt.fish:768 +#, fuzzy +msgid "Event handler, repaints prompt when any char changes" +msgstr "Event handler, repaints the prompt when fish_color_cwd changes" + +#: share/functions/__fish_is_token_n.fish:1 +msgid "Test if current token is on Nth place" +msgstr "" + +#: share/functions/__fish_make_completion_signals.fish:1 +msgid "Make list of kill signals for completion" +msgstr "" + #: share/functions/__fish_move_last.fish:9 msgid "Hit end of history...\\n" msgstr "Hit end of history...\\n" +#: share/functions/__fish_print_abook_emails.fish:1 +#, fuzzy +msgid "Print email addresses (abook)" +msgstr "Print dead processes" + #: share/functions/__fish_print_addresses.fish:1 #, fuzzy msgid "Print a list of known network addresses" msgstr "Print a list of running screen sessions" +#: share/functions/__fish_print_arch_daemons.fish:1 +#, fuzzy +msgid "Print arch daemons" +msgstr "Print all names" + +#: share/functions/__fish_print_commands.fish:1 +#, fuzzy +msgid "Print a list of documented fish commands" +msgstr "Print a list of all accepted color names" + +#: share/functions/__fish_print_debian_services.fish:1 +#, fuzzy +msgid "Prints services installed" +msgstr "Print service status" + #: share/functions/__fish_print_help.fish:2 #, fuzzy msgid "Print help message for the specified fish function or builtin" @@ -6835,25 +8602,93 @@ msgstr "Print all completions for the specified commandline" msgid "Print a list of known network interfaces" msgstr "Print a list of all accepted color names" +#: share/functions/__fish_print_lpr_options.fish:1 +#, fuzzy +msgid "Print lpr options" +msgstr "Print all versions" + +#: share/functions/__fish_print_lpr_printers.fish:1 +#, fuzzy +msgid "Print lpr printers" +msgstr "Print full records" + +#: share/functions/__fish_print_lsblk_columns.fish:1 +#, fuzzy +msgid "Print available lsblk columns" +msgstr "Print available list" + +#: share/functions/__fish_print_mounted.fish:1 +#, fuzzy +msgid "Print mounted devices" +msgstr "Print important dependencies" + +#: share/functions/__fish_print_svn_rev.fish:1 +#, fuzzy +msgid "Print svn revisions" +msgstr "Print only given revisions" + #: share/functions/__fish_print_users.fish:2 #, fuzzy msgid "Print a list of local users" msgstr "Print a list of all accepted color names" +#: share/functions/__fish_print_xdg_mimeapps.fish:1 +msgid "Print xdg mime applications" +msgstr "" + +#: share/functions/__fish_print_xdg_mimetypes.fish:1 +#, fuzzy +msgid "Print XDG mime types" +msgstr "Print command type" + +#: share/functions/__fish_print_xrandr_modes.fish:1 +#, fuzzy +msgid "Print xrandr modes" +msgstr "Print raw entry names" + +#: share/functions/__fish_print_xrandr_outputs.fish:1 +#, fuzzy +msgid "Print xrandr outputs" +msgstr "Print word counts" + +#: share/functions/__fish_print_xwindows.fish:1 +#, fuzzy +msgid "Print X windows" +msgstr "Print APM info" + +#: share/functions/__fish_pwd.fish:3 share/functions/__fish_pwd.fish:7 +#, fuzzy +msgid "Show current path" +msgstr "Show source package" + #: share/functions/__fish_test_arg.fish:2 msgid "Test if the token under the cursor matches the specified wildcard" msgstr "" +#: share/functions/__fish_urlencode.fish:1 +#, fuzzy +msgid "URL-encode stdin" +msgstr "Rename stdin" + +#: share/functions/__terlar_git_prompt.fish:23 +#, fuzzy +msgid "Write out the git prompt" +msgstr "Write out the prompt" + #: share/functions/alias.fish:2 msgid "" "Legacy function for creating shellscript functions using an alias-like syntax" msgstr "" -#: share/functions/alias.fish:26 +#: share/functions/alias.fish:34 #, fuzzy msgid "%s: Expected one or two arguments, got %d\\n" msgstr "%s: Expected 1, 2 or 3 arguments, got %d\\n" +#: share/functions/contains_seq.fish:1 +msgid "Return true if array contains a sequence" +msgstr "" + #: share/functions/dirh.fish:2 msgid "Print the current directory history (the back- and fwd- lists)" msgstr "Print the current directory history (the back- and fwd- lists)" @@ -6862,64 +8697,86 @@ msgstr "Print the current directory history (the back- and fwd- lists)" msgid "Print directory stack" msgstr "Print directory stack" +#: share/functions/fish_config.fish:1 +msgid "Launch fish's web based configuration" +msgstr "" + +#: share/functions/fish_indent.fish:1 +msgid "Indenter and prettifier for fish code" +msgstr "" + #: share/functions/fish_prompt.fish:5 msgid "Write out the prompt" msgstr "Write out the prompt" -#: share/functions/funced.fish:2 +#: share/functions/fish_update_completions.fish:1 +#, fuzzy +msgid "Update man-page based completions" +msgstr "Edit command specific completions" + +#: share/functions/funced.fish:1 #, fuzzy msgid "Edit function definition" msgstr "function definition block" -#: share/functions/funced.fish:11 share/functions/nextd.fish:21 -#: share/functions/prevd.fish:21 share/functions/vared.fish:16 +#: share/functions/funced.fish:24 share/functions/nextd.fish:22 +#: share/functions/prevd.fish:22 share/functions/vared.fish:15 msgid "%s: Unknown option %s\\n" msgstr "%s: Unknown option %s\\n" -#: share/functions/funced.fish:38 +#: share/functions/funced.fish:36 #, fuzzy -msgid "" -"%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%sfunced%s " -"FUNCTION\\n" -msgstr "" -"%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " -"VARIABLE\\n" +msgid "funced: You must specify one function name\n" +msgstr "%ls: Expected exactly one function name\n" #: share/functions/funcsave.fish:2 msgid "Save the current definition of all specified functions to file" msgstr "" -#: share/functions/funcsave.fish:24 +#: share/functions/funcsave.fish:11 +#, fuzzy +msgid "%s: Expected function name\\n" +msgstr "%ls: Expected function name\n" + +#: share/functions/funcsave.fish:26 #, fuzzy msgid "%s: Could not create configuration directory\\n" msgstr "%ls: Could not find home directory\n" -#: share/functions/funcsave.fish:35 +#: share/functions/funcsave.fish:37 #, fuzzy msgid "%s: Unknown function '%s'\\n" msgstr "%s: Unknown option “%sâ€\\n" -#: share/functions/help.fish:10 +#: share/functions/help.fish:1 msgid "Show help for the fish shell" msgstr "Show help for the fish shell" -#: share/functions/help.fish:68 +#: share/functions/help.fish:76 msgid "%s: Could not find a web browser.\\n" msgstr "%s: Could not find a web browser.\\n" -#: share/functions/help.fish:69 -#, sh-format +#: share/functions/help.fish:77 +#, fuzzy, sh-format msgid "" -"Please set the variable $BROWSER to a suitable browser and try again\\n\\n" +"Please set the variable $BROWSER to a suitable browser and try again.\\n\\n" msgstr "" "Please set the variable $BROWSER to a suitable browser and try again\\n\\n" -#: share/functions/help.fish:105 -msgid "help: Help is being displayed in your default browser\\n" +#: share/functions/help.fish:129 +msgid "help: Help is being displayed in your default browser.\\n" msgstr "" -#: share/functions/help.fish:108 -msgid "help: Help is being displayed in %s\\n" +#: share/functions/help.fish:132 +msgid "help: Help is being displayed in %s.\\n" +msgstr "" + +#: share/functions/history.fish:5 +msgid "Deletes an item from history" +msgstr "" + +#: share/functions/hostname.fish:7 +msgid "Show or set the system's host name\r" msgstr "" #: share/functions/la.fish:4 @@ -6938,16 +8795,25 @@ msgstr "List contents of directory using long format" msgid "List contents of directory" msgstr "List contents of directory" +#: share/functions/man.fish:1 +#, fuzzy +msgid "Format and display the on-line manual pages" +msgstr "Display change information for the package" + #: share/functions/math.fish:2 #, fuzzy msgid "Perform math calculations in bc" msgstr "Perform a simulation" +#: share/functions/mimedb.fish:8 +msgid "Look up file information via the mimedb database" +msgstr "" + #: share/functions/nextd.fish:2 msgid "Move forward in the directory history" msgstr "Move forward in the directory history" -#: share/functions/nextd.fish:27 +#: share/functions/nextd.fish:28 msgid "%s: The number of positions to skip must be a non-negative integer\\n" msgstr "%s: The number of positions to skip must be a non-negative integer\\n" @@ -6968,12 +8834,14 @@ msgstr "%s: Directory stack is empty..." msgid "Move back in the directory history" msgstr "Move back in the directory history" -#: share/functions/prevd.fish:27 +#: share/functions/prevd.fish:28 msgid "The number of positions to skip must be a non-negative integer\\n" msgstr "The number of positions to skip must be a non-negative integer\\n" -#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:12 -msgid "Print the current working directory, shortend to fit the prompt" +#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:7 +#: share/functions/prompt_pwd.fish:11 +#, fuzzy +msgid "Print the current working directory, shortened to fit the prompt" msgstr "Print the current working directory, shortend to fit the prompt" #: share/functions/psub.fish:3 @@ -6988,9 +8856,22 @@ msgstr "" msgid "Push directory to stack" msgstr "Push directory to stack" -#: share/functions/pwd.fish:9 share/functions/pwd.fish:14 -msgid "Print working directory" -msgstr "Print working directory" +#: share/functions/seq.fish:7 +#, fuzzy +msgid "Print sequences of numbers" +msgstr "Print name, not number" + +#: share/functions/seq.fish:11 +msgid "Fallback implementation of the seq command" +msgstr "" + +#: share/functions/seq.fish:31 +msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" +msgstr "%s: Expected 1, 2 or 3 arguments, got %d\\n" + +#: share/functions/seq.fish:38 +msgid "%s: '%s' is not a number\\n" +msgstr "%s: “%s†is not a number\\n" #: share/functions/setenv.fish:2 msgid "Set global variable. Alias for set -g, made for csh compatibility" @@ -7000,32 +8881,35 @@ msgstr "" msgid "Print the type of a command" msgstr "Print the type of a command" -#: share/functions/type.fish:73 +#: share/functions/type.fish:84 #, fuzzy msgid "%s is a function with definition\\n" msgstr "%ls: Missing function definition information." -#: share/functions/type.fish:77 -msgid "function\\n" +#: share/functions/type.fish:88 +#, fuzzy +msgid "function" msgstr "function\\n" -#: share/functions/type.fish:94 +#: share/functions/type.fish:105 msgid "%s is a builtin\\n" msgstr "%s is a builtin\\n" -#: share/functions/type.fish:97 -msgid "builtin\\n" +#: share/functions/type.fish:108 +#, fuzzy +msgid "builtin" msgstr "builtin\\n" -#: share/functions/type.fish:115 +#: share/functions/type.fish:132 msgid "%s is %s\\n" msgstr "%s is %s\\n" -#: share/functions/type.fish:118 -msgid "file\\n" +#: share/functions/type.fish:135 +#, fuzzy +msgid "file" msgstr "file\\n" -#: share/functions/type.fish:129 +#: share/functions/type.fish:147 msgid "%s: Could not find '%s'\\n" msgstr "%s: Could not find “%sâ€\\n" @@ -7038,15 +8922,15 @@ msgstr "%s: Invalid mask “%sâ€\\n" msgid "Set default file permission mask" msgstr "Set default file permission mask" -#: share/functions/umask.fish:204 +#: share/functions/umask.fish:212 msgid "%s: Too many arguments\\n" msgstr "%s: Too many arguments\\n" -#: share/functions/vared.fish:7 +#: share/functions/vared.fish:6 msgid "Edit variable value" msgstr "Edit variable value" -#: share/functions/vared.fish:42 +#: share/functions/vared.fish:41 msgid "" "%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of " "%s\\n" @@ -7054,7 +8938,7 @@ msgstr "" "%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of " "%s\\n" -#: share/functions/vared.fish:46 +#: share/functions/vared.fish:45 msgid "" "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " "VARIABLE\\n" @@ -7062,17 +8946,230 @@ msgstr "" "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " "VARIABLE\\n" -#: seq:15 -msgid "^/dev/null" -msgstr "^/dev/null" +#~ msgid "%ls: Missing function definition information." +#~ msgstr "%ls: Missing function definition information." -#: seq:36 -msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" -msgstr "%s: Expected 1, 2 or 3 arguments, got %d\\n" +#~ msgid "%ls: Command only available in interactive sessions" +#~ msgstr "%ls: Command only available in interactive sessions" -#: seq:43 -msgid "%s: '%s' is not a number\\n" -msgstr "%s: “%s†is not a number\\n" +#~ msgid "Procces\n" +#~ msgstr "Procces\n" + +#~ msgid "This is a bug. " +#~ msgstr "This is a bug. " + +#~ msgid "Could not create child process - exiting" +#~ msgstr "Could not create child process - exiting" + +#~ msgid "Failed to close file descriptor %d" +#~ msgstr "Failed to close file descriptor %d" + +#~ msgid "Failed to execute process '%ls'" +#~ msgstr "Failed to execute process “%lsâ€" + +#~ msgid "" +#~ "Could not send process %d, '%ls' in job %d, '%ls' from group %d to group " +#~ "%d" +#~ msgstr "" +#~ "Could not send process %d, “%ls†in job %d, “%ls†from group %d to group " +#~ "%d" + +#~ msgid "%s: Unknown error\n" +#~ msgstr "%s: Unknown error\n" + +#~ msgid "Maximum recursion depth reached. Accidental infinite loop?" +#~ msgstr "Maximum recursion depth reached. Accidental infinite loop?" + +#~ msgid "Maximum number of nested blocks reached." +#~ msgstr "Maximum number of nested blocks reached." + +#~ msgid "" +#~ "Warning: No match for wildcard '%ls'. The command will not be executed." +#~ msgstr "" +#~ "Warning: No match for wildcard “%lsâ€. The command will not be executed." + +#~ msgid "Tried to evaluate null pointer." +#~ msgstr "Tried to evaluate null pointer." + +#~ msgid "in . (source) call of file '%ls',\n" +#~ msgstr "in . (source) call of file “%lsâ€,\n" + +#~ msgid "Unknown command '%ls'" +#~ msgstr "Unknown command “%lsâ€" + +#~ msgid "Job command" +#~ msgstr "Job command" + +#~ msgid "Job list pointer" +#~ msgstr "Job list pointer" + +#~ msgid "Process command" +#~ msgstr "Process command" + +#~ msgid "There are stopped jobs\n" +#~ msgstr "There are stopped jobs\n" + +#~ msgid "Could not convert input. Read %d bytes." +#~ msgstr "Could not convert input. Read %d bytes." + +#~ msgid "Could not read input stream" +#~ msgstr "Could not read input stream" + +#~ msgid "%s: Too many arguments\n" +#~ msgstr "%s: Too many arguments\n" + +#~ msgid "Invalid token" +#~ msgstr "Invalid token" + +#~ msgid "Remove one or more files or directories from the repository" +#~ msgstr "Remove one or more files or directories from the repository" + +#~ msgid "Move/rename one or more files or directories" +#~ msgstr "Move/rename one or more files or directories" + +#~ msgid "Replace a token with a new value for that token" +#~ msgstr "Replace a token with a new value for that token" + +#~ msgid "Revert to the recorded version (safe the first time only)" +#~ msgstr "Revert to the recorded version (safe the first time only)" + +#~ msgid "Save changes in the working copy to the repository as a patch" +#~ msgstr "Save changes in the working copy to the repository as a patch" + +#~ msgid "Tag the contents of the repository with a version name" +#~ msgstr "Tag the contents of the repository with a version name" + +#, fuzzy +#~ msgid "Record an inverse patch without changing the working directory" +#~ msgstr "Record an inverse patch without changing the working copy" + +#, fuzzy +#~ msgid "Gives a changelog-style summary of the repository history" +#~ msgstr "Gives a changelog style summary of the repo history" + +#, fuzzy +#~ msgid "Opposite of pull; unsafe if patch is not in remote repository" +#~ msgstr "Opposite of pull; unsafe if the patch is not in remote repo" + +#~ msgid "Apply patches (from an email bundle) to the repository" +#~ msgstr "Apply patches (from an email bundle) to the repository" + +#~ msgid "Create a local copy of another repository" +#~ msgstr "Create a local copy of another repository" + +#, fuzzy +#~ msgid "Makes a copy of the repository" +#~ msgstr "Create a local copy of another repository" + +#~ msgid "Optimize the repository" +#~ msgstr "Optimize the repository" + +#~ msgid "Check the repository for consistency" +#~ msgstr "Check the repository for consistency" + +#~ msgid "Specify hash of creator patch (see docs)" +#~ msgstr "Specify hash of creator patch (see docs)" + +#, fuzzy +#~ msgid "Name of version" +#~ msgstr "Negate expression" + +#~ msgid "Send to context stored in FILENAME" +#~ msgstr "Send to context stored in FILENAME" + +#~ msgid "Specify sendmail command" +#~ msgstr "Specify sendmail command" + +#~ msgid "Verify that the patch was signed by a key in PUBRING" +#~ msgstr "Verify that the patch was signed by a key in PUBRING" + +#, fuzzy +#~ msgid "Verify using openSSL with authorized keys from file KEYS" +#~ msgstr "Verify using openSSL with authorized keys from specified file" + +#~ msgid "Ignore changes whose lines match the REGEX" +#~ msgstr "Ignore changes whose lines match the REGEX" + +#~ msgid "Output NUM lines of copied context" +#~ msgstr "Output NUM lines of copied context" + +#~ msgid "Output NUM lines of unified context" +#~ msgstr "Output NUM lines of unified context" + +#~ msgid "Output at most NUM print columns" +#~ msgstr "Output at most NUM print columns" + +#~ msgid "Compare FILE2 to all operands" +#~ msgstr "Compare FILE2 to all operands" + +#~ msgid "Action for devices" +#~ msgstr "Action for devices" + +#~ msgid "Action for directories" +#~ msgstr "Action for directories" + +#~ msgid "Use pattern from file" +#~ msgstr "Use pattern from file" + +#, fuzzy +#~ msgid "print information about the working copy" +#~ msgstr "Output extra information about the work being done" + +#, fuzzy +#~ msgid "export the repository via HTTP" +#~ msgstr "Update the repository" + +#~ msgid "Debug option" +#~ msgstr "Debug option" + +#~ msgid "Execute argument as command" +#~ msgstr "Execute argument as command" + +#~ msgid "Division control" +#~ msgstr "Division control" + +#~ msgid "Warning control" +#~ msgstr "Warning control" + +#, fuzzy +#~ msgid "Read user configuration files from directory ARG" +#~ msgstr "Read user config files from named directory" + +#, fuzzy +#~ msgid "Specify a username ARG" +#~ msgstr "Specify a username" + +#, fuzzy +#~ msgid "Specify a password ARG" +#~ msgstr "Specify a password" + +#, fuzzy +#~ msgid "Use ARG as merge command" +#~ msgstr "Specify merge command" + +#, fuzzy +#~ msgid "Use ARG as external editor" +#~ msgstr "Specify external editor" + +#~ msgid "Maximum number of log entries" +#~ msgstr "Maximum number of log entries" + +#~ msgid "Commands to execute when fish exits" +#~ msgstr "Commands to execute when fish exits" + +#~ msgid "Good bye\\n" +#~ msgstr "Good bye\\n" + +#, fuzzy +#~ msgid "" +#~ "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%sfunced%s " +#~ "FUNCTION\\n" +#~ msgstr "" +#~ "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " +#~ "VARIABLE\\n" + +#~ msgid "^/dev/null" +#~ msgstr "^/dev/null" #~ msgid "" #~ "Current function definitions are:\n" @@ -7214,9 +9311,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Automatic yes to prompts" #~ msgstr "Automatic yes to prompts" -#~ msgid "Show upgraded packages" -#~ msgstr "Show upgraded packages" - #~ msgid "Compile source packages" #~ msgstr "Compile source packages" @@ -7229,9 +9323,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Force yes" #~ msgstr "Force yes" -#~ msgid "Print the URIs" -#~ msgstr "Print the URIs" - #~ msgid "Erase obsolete files" #~ msgstr "Erase obsolete files" @@ -7262,21 +9353,12 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Specify apt config file" #~ msgstr "Specify apt config file" -#~ msgid "List bugs from packages" -#~ msgstr "List bugs from packages" - #~ msgid "List bugs in rss format" #~ msgstr "List bugs in rss format" #~ msgid "Read filenames from pipe" #~ msgstr "Read filenames from pipe" -#~ msgid "Select display" -#~ msgstr "Select display" - -#~ msgid "Generate master file" -#~ msgstr "Generate master file" - #~ msgid "Alias for 'get'" #~ msgstr "Alias for “getâ€" @@ -7303,18 +9385,12 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Run in noninteractive mode" #~ msgstr "Run in noninteractive mode" -#~ msgid "Conf file" -#~ msgstr "Conf file" - #~ msgid "File as input" #~ msgstr "File as input" #~ msgid "Mirror-list file" #~ msgstr "Mirror-list file" -#~ msgid "Output sources.list file" -#~ msgstr "Output sources.list file" - #~ msgid "Write top servers to file" #~ msgstr "Write top servers to file" @@ -7459,9 +9535,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Set TAO (Track At Once) writing mode" #~ msgstr "Set TAO (Track At Once) writing mode" -#~ msgid "Set RAW writing mode" -#~ msgstr "Set RAW writing mode" - #~ msgid "Select Set RAW writing, the preferred raw writing mode" #~ msgstr "Select Set RAW writing, the preferred raw writing mode" @@ -7892,27 +9965,15 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Stay on this file system" #~ msgstr "Stay on this file system" -#~ msgid "Dont split mutibyte characters" -#~ msgstr "Dont split mutibyte characters" - -#~ msgid "Do not print lines without delimiter" -#~ msgstr "Do not print lines without delimiter" - #~ msgid "Select output delimiter" #~ msgstr "Select output delimiter" #~ msgid "Kerberos server mode" #~ msgstr "Kerberos server mode" -#~ msgid "Print out history information for files" -#~ msgstr "Print out history information for files" - #~ msgid "Prompt for password for authenticating server" #~ msgstr "Prompt for password for authenticating server" -#~ msgid "Removes entry in .cvspass for remote repository" -#~ msgstr "Removes entry in .cvspass for remote repository" - #~ msgid "Password server mode" #~ msgstr "Password server mode" @@ -7964,9 +10025,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Cause CVS to be really quiet" #~ msgstr "Cause CVS to be really quiet" -#~ msgid "Read-only repository mode" -#~ msgstr "Read-only repository mode" - #~ msgid "Cause CVS to be somewhat quiet" #~ msgstr "Cause CVS to be somewhat quiet" @@ -8051,9 +10109,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Force new revision" #~ msgstr "Force new revision" -#~ msgid "Treat all files as text" -#~ msgstr "Treat all files as text" - #~ msgid "Treat all whitespace as one space" #~ msgstr "Treat all whitespace as one space" @@ -8078,9 +10133,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Set line group format" #~ msgstr "Set line group format" -#~ msgid "Try to find a smaller set of changes" -#~ msgstr "Try to find a smaller set of changes" - #~ msgid "Make output a valid ed script" #~ msgstr "Make output a valid ed script" @@ -8195,15 +10247,9 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print only rcs filename" #~ msgstr "Print only rcs filename" -#~ msgid "Print only given revisions" -#~ msgstr "Print only given revisions" - #~ msgid "Suppress header if no revisions found" #~ msgstr "Suppress header if no revisions found" -#~ msgid "Specify revision states" -#~ msgstr "Specify revision states" - #~ msgid "Same as -h, plus descriptive text" #~ msgstr "Same as -h, plus descriptive text" @@ -8219,9 +10265,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Use unidiff format" #~ msgstr "Use unidiff format" -#~ msgid "Delete working copy if release succeeds" -#~ msgstr "Delete working copy if release succeeds" - #~ msgid "Reset sticky tags, dates, and k-opts" #~ msgstr "Reset sticky tags, dates, and k-opts" @@ -8243,9 +10286,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Neither verbose nor quiet output" #~ msgstr "Neither verbose nor quiet output" -#~ msgid "Name of patch" -#~ msgstr "Name of patch" - #~ msgid "Give patch name and comment in file" #~ msgstr "Give patch name and comment in file" @@ -8271,9 +10311,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Remove the test directory" #~ msgstr "Remove the test directory" -#~ msgid "Create compressed patches" -#~ msgstr "Create compressed patches" - #~ msgid "Don't create compressed patches" #~ msgstr "Don't create compressed patches" @@ -8326,9 +10363,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Make scripts executable" #~ msgstr "Make scripts executable" -#~ msgid "Reply to email-based patch using FROM address" -#~ msgstr "Reply to email-based patch using FROM address" - #~ msgid "Don't verify patch signature" #~ msgstr "Don't verify patch signature" @@ -8362,9 +10396,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Do not sign the patch" #~ msgstr "Do not sign the patch" -#~ msgid "Edit the patch bundle description" -#~ msgstr "Edit the patch bundle description" - #~ msgid "Use a plain pristine tree [DEFAULT]" #~ msgstr "Use a plain pristine tree [DEFAULT]" @@ -8377,9 +10408,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Generate XML formatted output" #~ msgstr "Generate XML formatted output" -#~ msgid "Select changes up to a tag matching REGEXP" -#~ msgstr "Select changes up to a tag matching REGEXP" - #~ msgid "Give output suitable for get --context" #~ msgstr "Give output suitable for get --context" @@ -8455,51 +10483,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print out the previously obtained statistics from the file systems" #~ msgstr "Print out the previously obtained statistics from the file systems" -#~ msgid "Ignore case differences" -#~ msgstr "Ignore case differences" - -#~ msgid "Ignore case when comparing file names" -#~ msgstr "Ignore case when comparing file names" - -#~ msgid "Consider case when comparing file names" -#~ msgstr "Consider case when comparing file names" - -#~ msgid "Ignore changes due to tab expansion" -#~ msgstr "Ignore changes due to tab expansion" - -#~ msgid "Ignore changes in the amount of white space" -#~ msgstr "Ignore changes in the amount of white space" - -#~ msgid "Ignore all white space" -#~ msgstr "Ignore all white space" - -#~ msgid "Ignore changes whose lines are all blank" -#~ msgstr "Ignore changes whose lines are all blank" - -#~ msgid "Recursively compare subdirectories" -#~ msgstr "Recursively compare subdirectories" - -#~ msgid "Treat absent files as empty" -#~ msgstr "Treat absent files as empty" - -#~ msgid "Output 3 lines of copied context" -#~ msgstr "Output 3 lines of copied context" - -#~ msgid "Output 3 lines of unified context" -#~ msgstr "Output 3 lines of unified context" - -#~ msgid "Output only whether the files differ" -#~ msgstr "Output only whether the files differ" - -#~ msgid "Output a normal diff" -#~ msgstr "Output a normal diff" - -#~ msgid "Output in two columns" -#~ msgstr "Output in two columns" - -#~ msgid "Pass the output through 'pr'" -#~ msgstr "Pass the output through “prâ€" - #~ msgid "Write size for all files" #~ msgstr "Write size for all files" @@ -8846,9 +10829,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Use ansi mode" #~ msgstr "Use ansi mode" -#~ msgid "Write prototypes to file" -#~ msgstr "Write prototypes to file" - #~ msgid "Do not recognize asm, inline or typeof keywords" #~ msgstr "Do not recognize asm, inline or typeof keywords" @@ -8933,9 +10913,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Do not emit out-of-line code for inline functions" #~ msgstr "Do not emit out-of-line code for inline functions" -#~ msgid "Disable warnings about MFC" -#~ msgstr "Disable warnings about MFC" - #~ msgid "Disable some built-in functions" #~ msgstr "Disable some built-in functions" @@ -9532,9 +11509,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Display summary" #~ msgstr "Display summary" -#~ msgid "Search directories for source" -#~ msgstr "Search directories for source" - #~ msgid "No annotated source" #~ msgstr "No annotated source" @@ -9598,99 +11572,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print summary" #~ msgstr "Print summary" -#~ msgid "Print NUM lines of trailing context" -#~ msgstr "Print NUM lines of trailing context" - -#~ msgid "Process binary file as text" -#~ msgstr "Process binary file as text" - -#~ msgid "Print NUM lines of leading context" -#~ msgstr "Print NUM lines of leading context" - -#~ msgid "Print NUM lines of context" -#~ msgstr "Print NUM lines of context" - -#~ msgid "Assume data type for binary files" -#~ msgstr "Assume data type for binary files" - -#~ msgid "Pattern is extended regexp" -#~ msgstr "Pattern is extended regexp" - -#~ msgid "Pattern is a regexp" -#~ msgstr "Pattern is a regexp" - -#~ msgid "Pattern is a fixed string" -#~ msgstr "Pattern is a fixed string" - -#~ msgid "Pattern is basic regex" -#~ msgstr "Pattern is basic regex" - -#~ msgid "Print filename" -#~ msgstr "Print filename" - -#~ msgid "Supress printing filename" -#~ msgstr "Supress printing filename" - -#~ msgid "Skip binary files" -#~ msgstr "Skip binary files" - -#~ msgid "Ignore case" -#~ msgstr "Ignore case" - -#~ msgid "Print first non-matching file" -#~ msgstr "Print first non-matching file" - -#~ msgid "Print first matching file" -#~ msgstr "Print first matching file" - -#~ msgid "Stop reading after NUM matches" -#~ msgstr "Stop reading after NUM matches" - -#~ msgid "Use the mmap system call to read input" -#~ msgstr "Use the mmap system call to read input" - -#~ msgid "Print linenumber" -#~ msgstr "Print linenumber" - -#~ msgid "Show only matching part" -#~ msgstr "Show only matching part" - -#~ msgid "Rename stdin" -#~ msgstr "Rename stdin" - -#~ msgid "Use line buffering" -#~ msgstr "Use line buffering" - -#~ msgid "Do not write anything" -#~ msgstr "Do not write anything" - -#~ msgid "Recurse, search file matching PATTERN" -#~ msgstr "Recurse, search file matching PATTERN" - -#~ msgid "Recurse, skip file matching PATTERN" -#~ msgstr "Recurse, skip file matching PATTERN" - -#~ msgid "Suppress error messages" -#~ msgstr "Suppress error messages" - -#~ msgid "Treat files as binary" -#~ msgstr "Treat files as binary" - -#~ msgid "Report Unix-style byte offsets" -#~ msgstr "Report Unix-style byte offsets" - -#~ msgid "Invert the sense of matching" -#~ msgstr "Invert the sense of matching" - -#~ msgid "Only whole matching words" -#~ msgstr "Only whole matching words" - -#~ msgid "Only whole matching lines" -#~ msgstr "Only whole matching lines" - -#~ msgid "Output a zero byte after filename" -#~ msgstr "Output a zero byte after filename" - #~ msgid "List compression information" #~ msgstr "List compression information" @@ -9700,9 +11581,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Save/restore filename" #~ msgstr "Save/restore filename" -#~ msgid "Supress warnings" -#~ msgstr "Supress warnings" - #~ msgid "Recurse directories" #~ msgstr "Recurse directories" @@ -9715,9 +11593,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Use high compression setting" #~ msgstr "Use high compression setting" -#~ msgid "Help for the specified builtin" -#~ msgstr "Help for the specified builtin" - #~ msgid "A short summary of all builtin commands" #~ msgstr "A short summary of all builtin commands" @@ -9727,18 +11602,12 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print all group ids" #~ msgstr "Print all group ids" -#~ msgid "Print name, not number" -#~ msgstr "Print name, not number" - #~ msgid "Print real ID, not effective" #~ msgstr "Print real ID, not effective" #~ msgid "Print effective user ID" #~ msgstr "Print effective user ID" -#~ msgid "Show the process id of each process in the job" -#~ msgstr "Show the process id of each process in the job" - #~ msgid "Show group id of job" #~ msgstr "Show group id of job" @@ -9748,9 +11617,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Only show status for last job to be started" #~ msgstr "Only show status for last job to be started" -#~ msgid "List names of available signals" -#~ msgstr "List names of available signals" - #~ msgid "Search after end of screen" #~ msgstr "Search after end of screen" @@ -9967,9 +11833,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Manual sections" #~ msgstr "Manual sections" -#~ msgid "Display all matches" -#~ msgstr "Display all matches" - #~ msgid "Always reformat" #~ msgstr "Always reformat" @@ -10045,12 +11908,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Ignore module interface version" #~ msgstr "Ignore module interface version" -#~ msgid "List all modules matching the given wildcard" -#~ msgstr "List all modules matching the given wildcard" - -#~ msgid "Insert modules matching the given wildcard" -#~ msgstr "Insert modules matching the given wildcard" - #~ msgid "Restrict wildcards to specified directory" #~ msgstr "Restrict wildcards to specified directory" @@ -10081,9 +11938,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Do not write mtab" #~ msgstr "Do not write mtab" -#~ msgid "Tolerate sloppy mount options" -#~ msgstr "Tolerate sloppy mount options" - #~ msgid "Read/Write mode" #~ msgstr "Read/Write mode" @@ -10299,18 +12153,6 @@ msgstr "%s: “%s†is not a number\\n" #~ "Set the modification and access times of patched files from time stamps " #~ "given in context diff headers, UTC, GMT" -#~ msgid "Specify record separator" -#~ msgstr "Specify record separator" - -#~ msgid "Turn on autosplit mode" -#~ msgstr "Turn on autosplit mode" - -#~ msgid "Check syntax" -#~ msgstr "Check syntax" - -#~ msgid "Debugger" -#~ msgstr "Debugger" - #~ msgid "Set regexp used to split input" #~ msgstr "Set regexp used to split input" @@ -10320,30 +12162,9 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Include path" #~ msgstr "Include path" -#~ msgid "Automatic line ending processing" -#~ msgstr "Automatic line ending processing" - -#~ msgid "Loop script" -#~ msgstr "Loop script" - -#~ msgid "Loop script, print $_" -#~ msgstr "Loop script, print $_" - #~ msgid "Invoke CPP" #~ msgstr "Invoke CPP" -#~ msgid "Define custom switches" -#~ msgstr "Define custom switches" - -#~ msgid "Search $PATH for script" -#~ msgstr "Search $PATH for script" - -#~ msgid "Taint checking" -#~ msgstr "Taint checking" - -#~ msgid "Unsafe mode" -#~ msgstr "Unsafe mode" - #~ msgid "Extract script" #~ msgstr "Extract script" @@ -10368,9 +12189,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Open folder read-only" #~ msgstr "Open folder read-only" -#~ msgid "Set configuration file" -#~ msgstr "Set configuration file" - #~ msgid "Set global configuration file" #~ msgstr "Set global configuration file" @@ -10553,15 +12371,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Enable optimizations" #~ msgstr "Enable optimizations" -#~ msgid "Disable import of site module" -#~ msgstr "Disable import of site module" - -#~ msgid "Warn on mixed tabs and spaces" -#~ msgstr "Warn on mixed tabs and spaces" - -#~ msgid "Unbuffered input and output" -#~ msgstr "Unbuffered input and output" - #~ msgid "Ignore first line of input" #~ msgstr "Ignore first line of input" @@ -10704,9 +12513,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Define key" #~ msgstr "Define key" -#~ msgid "Merge sorted files" -#~ msgstr "Merge sorted files" - #~ msgid "Stabilize sort" #~ msgstr "Stabilize sort" @@ -10825,72 +12631,27 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Recursively clean up the working copy" #~ msgstr "Recursively clean up the working copy" -#~ msgid "Specify revision" -#~ msgstr "Specify revision" - #~ msgid "Print as little as possible" #~ msgstr "Print as little as possible" -#~ msgid "Force operation to run" -#~ msgstr "Force operation to run" - #~ msgid "Enable automatic properties" #~ msgstr "Enable automatic properties" -#~ msgid "Disable automatic properties" -#~ msgstr "Disable automatic properties" - -#~ msgid "Print extra info" -#~ msgstr "Print extra info" - -#~ msgid "Don't cache auth tokens" -#~ msgstr "Don't cache auth tokens" - -#~ msgid "Do no interactive prompting" -#~ msgstr "Do no interactive prompting" - #~ msgid "Don't unlock targets" #~ msgstr "Don't unlock targets" -#~ msgid "Read commit message from file" -#~ msgstr "Read commit message from file" - -#~ msgid "Force log message source validity" -#~ msgstr "Force log message source validity" - #~ msgid "Descend recursively" #~ msgstr "Descend recursively" #~ msgid "Give output suitable for concatenation" #~ msgstr "Give output suitable for concatenation" -#~ msgid "Output in XML" -#~ msgstr "Output in XML" - -#~ msgid "Operate on revision property" -#~ msgstr "Operate on revision property" - -#~ msgid "Use strict semantics" -#~ msgstr "Use strict semantics" - -#~ msgid "Ignore externals definitions" -#~ msgstr "Ignore externals definitions" - -#~ msgid "Do not cross copies" -#~ msgstr "Do not cross copies" - #~ msgid "Make no changes" #~ msgstr "Make no changes" -#~ msgid "Ignore ancestry when calculating merge" -#~ msgstr "Ignore ancestry when calculating merge" - #~ msgid "Disregard ignores" #~ msgstr "Disregard ignores" -#~ msgid "Relocate VIA URL-rewriting" -#~ msgstr "Relocate VIA URL-rewriting" - #~ msgid "Print client version info" #~ msgstr "Print client version info" @@ -11143,9 +12904,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Change access time" #~ msgstr "Change access time" -#~ msgid "Do not create file" -#~ msgstr "Do not create file" - #~ msgid "Change modification time" #~ msgstr "Change modification time" @@ -11164,9 +12922,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Supress function and builtin lookup" #~ msgstr "Supress function and builtin lookup" -#~ msgid "Print command type" -#~ msgstr "Print command type" - #~ msgid "Print path to command, or nothing if name is not a command" #~ msgstr "Print path to command, or nothing if name is not a command" @@ -11261,9 +13016,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print hardware platform" #~ msgstr "Print hardware platform" -#~ msgid "Print operating system" -#~ msgstr "Print operating system" - #~ msgid "Print number of occurences" #~ msgstr "Print number of occurences" @@ -11318,12 +13070,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Debugger command" #~ msgstr "Debugger command" -#~ msgid "File descriptor for input" -#~ msgstr "File descriptor for input" - -#~ msgid "Check for memory leaks" -#~ msgstr "Check for memory leaks" - #~ msgid "Show reachable leaked memory" #~ msgstr "Show reachable leaked memory" @@ -11368,9 +13114,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print length of longest line" #~ msgstr "Print length of longest line" -#~ msgid "Print word counts" -#~ msgstr "Print word counts" - #~ msgid "Dont print header" #~ msgstr "Dont print header" @@ -11386,9 +13129,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Go to background immediately after startup" #~ msgstr "Go to background immediately after startup" -#~ msgid "Execute command as if part of .wgetrc" -#~ msgstr "Execute command as if part of .wgetrc" - #~ msgid "Log all messages to logfile" #~ msgstr "Log all messages to logfile" @@ -11507,9 +13247,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Disable server-side cache" #~ msgstr "Disable server-side cache" -#~ msgid "Disable the use of cookies" -#~ msgstr "Disable the use of cookies" - #~ msgid "Load cookies from file" #~ msgstr "Load cookies from file" @@ -11634,9 +13371,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Print time of last boot" #~ msgstr "Print time of last boot" -#~ msgid "Print dead processes" -#~ msgstr "Print dead processes" - #~ msgid "Print line of headings" #~ msgstr "Print line of headings" @@ -11751,9 +13485,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Examine property updates forever" #~ msgstr "Examine property updates forever" -#~ msgid "Set format" -#~ msgstr "Set format" - #~ msgid "Append input to selection" #~ msgstr "Append input to selection" @@ -11976,9 +13707,6 @@ msgstr "%s: “%s†is not a number\\n" #~ msgid "Set block size" #~ msgstr "Set block size" -#~ msgid "List format" -#~ msgstr "List format" - #~ msgid "Select quoting style" #~ msgstr "Select quoting style" diff --git a/po/fr.po b/po/fr.po index 1216a87db..f1d2499fd 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,4 +1,4 @@ -# translation of fr.po to Français +# translation of fr.po to Français # FRENCH TRANSLATION FOR FISH # Copyright (C) 2006 Xavier Douville # This file is distributed under the GNU General Public License, version 2 or later. @@ -6,1508 +6,1758 @@ # msgid "" msgstr "" -"Project-Id-Version: 1.2.8" -"POT-Creation-Date: 2006-07-10 13:44-0400\n" +"Project-Id-Version: 1.2.8POT-Creation-Date: 2006-07-10 13:44-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-03-13 21:29+0800\n" "PO-Revision-Date: 2006-07-25 20:16-0400\n" "Last-Translator: Xavier Douville \n" -"Language-Team: Français \n" +"Language-Team: Français \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.10.2\n" "X-Poedit-Language: French\n" -#: builtin.c:84 +#: autoload.cpp:113 +#, c-format +msgid "Could not autoload item '%ls', it is already being autoloaded. " +msgstr "" + +#: builtin.cpp:83 #, c-format msgid "Send job %d, '%ls' to foreground\n" -msgstr "Mettre la tâche %d, '%ls' en premier plan\n" +msgstr "Mettre la tâche %d, '%ls' en premier plan\n" -#: builtin.c:414 +#: builtin.cpp:344 +#, c-format +msgid "" +"%ls: Type 'help %ls' for related documentation\n" +"\n" +msgstr "" + +#: builtin.cpp:484 +#, c-format +msgid "%ls: No key with name '%ls' found\n" +msgstr "" + +#: builtin.cpp:490 +#, fuzzy, c-format +msgid "%ls: Key with name '%ls' does not have any mapping\n" +msgstr "%ls: La fonction '%ls' n'existe pas\n" + +#: builtin.cpp:496 +#, fuzzy, c-format +msgid "%ls: Unknown error trying to bind to key named '%ls'\n" +msgstr "%ls: Option '%ls' inconnue\n" + +#: builtin.cpp:668 +#, fuzzy, c-format +msgid "%ls: Expected zero or two parameters, got %d\n" +msgstr "%ls: Zéro ou un argument attendu, %d obtenu(s)\n" + +#: builtin.cpp:692 +#, fuzzy, c-format +msgid "%ls: Invalid state\n" +msgstr "%ls: Option invalide -- %lc\n" + +#: builtin.cpp:796 #, c-format msgid "%ls: Can not specify scope when removing block\n" -msgstr "%ls: Ne peut pas indiquer la portée en enlevant le bloc\n" +msgstr "%ls: Ne peut pas indiquer la portée en enlevant le bloc\n" -#: builtin.c:420 +#: builtin.cpp:802 #, c-format msgid "%ls: No blocks defined\n" -msgstr "%ls: Aucun bloc défini\n" +msgstr "%ls: Aucun bloc défini\n" -#: builtin.c:821 -#: builtin.h:28 +#: builtin.cpp:1312 builtin.h:32 #, c-format msgid "%ls: Invalid combination of options\n" msgstr "%ls: Combinaison d'options invalide\n" -#: builtin.c:844 +#: builtin.cpp:1334 #, c-format msgid "%ls: Expected exactly one function name\n" msgstr "%ls: Exactement un nom de fonction est attendu\n" -#: builtin.c:854 +#: builtin.cpp:1344 builtin.cpp:1406 #, c-format msgid "%ls: Function '%ls' does not exist\n" msgstr "%ls: La fonction '%ls' n'existe pas\n" -#: builtin.c:910 +#: builtin.cpp:1394 +#, fuzzy, c-format msgid "" -"Current function definitions are:\n" -"\n" -msgstr "" -"Définitions de fonctions courantes:\n" -"\n" +"%ls: Expected exactly two names (current function name, and new function " +"name)\n" +msgstr "%ls: Exactement un nom de fonction est attendu\n" -#: builtin.c:1057 +#: builtin.cpp:1417 builtin.cpp:1952 builtin.cpp:2259 +#, c-format +msgid "%ls: Illegal function name '%ls'\n" +msgstr "%ls: Nom de fonction illégal '%ls'\n" + +#: builtin.cpp:1428 +#, fuzzy, c-format +msgid "%ls: Function '%ls' already exists. Cannot create copy '%ls'\n" +msgstr "%ls: La fonction '%ls' n'existe pas\n" + +#: builtin.cpp:1809 builtin.cpp:2114 #, c-format msgid "%ls: Unknown signal '%ls'\n" msgstr "%ls: Signal inconnu '%ls'\n" -#: builtin.c:1081 +#: builtin.cpp:1824 builtin.cpp:1984 builtin.cpp:2129 builtin.cpp:2291 #, c-format msgid "%ls: Invalid variable name '%ls'\n" msgstr "%ls: Nom de variable invalide '%ls'\n" -#: builtin.c:1134 +#: builtin.cpp:1877 builtin.cpp:2182 #, c-format msgid "%ls: Cannot find calling job for event handler\n" -msgstr "%ls: Impossible de trouver la tâche parente pour le gestionnaire d'événements\n" +msgstr "" +"%ls: Impossible de trouver la tâche parente pour le gestionnaire " +"d'événements\n" -#: builtin.c:1152 +#: builtin.cpp:1895 builtin.cpp:2200 #, c-format msgid "%ls: Invalid process id %ls\n" msgstr "%ls: id de processus invalide %ls\n" -#: builtin.c:1193 -#, c-format -msgid "%ls: Expected one argument, got %d\n" -msgstr "%ls: Un argument attendu, %d obtenu(s)\n" +#: builtin.cpp:1945 builtin.cpp:2252 +#, fuzzy, c-format +msgid "%ls: Expected function name\n" +msgstr "%ls: Exactement un nom de fonction est attendu\n" -#: builtin.c:1201 -#, c-format -msgid "%ls: Illegal function name '%ls'\n" -msgstr "%ls: Nom de fonction illégal '%ls'\n" - -#: builtin.c:1211 +#: builtin.cpp:1962 builtin.cpp:2269 #, c-format msgid "" "%ls: The name '%ls' is reserved,\n" "and can not be used as a function name\n" msgstr "" -"%ls: Le nom '%ls' est réservé,\n" -"et ne peut pas être utilisé comme nom de fonction\n" +"%ls: Le nom '%ls' est réservé,\n" +"et ne peut pas être utilisé comme nom de fonction\n" -#: builtin.c:1226 +#: builtin.cpp:1970 builtin.cpp:2277 builtin.cpp:3824 +#, fuzzy, c-format +msgid "%ls: No function name given\n" +msgstr "%ls: Nom de fonction illégal '%ls'\n" + +#: builtin.cpp:1997 builtin.cpp:2304 +#, c-format +msgid "%ls: Expected one argument, got %d\n" +msgstr "%ls: Un argument attendu, %d obtenu(s)\n" + +#: builtin.cpp:2319 msgid "Current functions are: " msgstr "Les fonctions courantes sont: " -#: builtin.c:1359 +#: builtin.cpp:2459 #, c-format msgid "%ls: Seed value '%ls' is not a valid number\n" msgstr "%ls: La valeur germe '%ls' n'est pas un nombre valide\n" -#: builtin.c:1373 +#: builtin.cpp:2473 #, c-format msgid "%ls: Expected zero or one argument, got %d\n" -msgstr "%ls: Zéro ou un argument attendu, %d obtenu(s)\n" +msgstr "%ls: Zéro ou un argument attendu, %d obtenu(s)\n" -#: builtin.c:1807 -#: main.c:336 -#: parser.c:1255 +#: builtin.cpp:2981 fish.cpp:518 parser.cpp:1095 msgid "Standard input" -msgstr "Entrée standard" +msgstr "Entrée standard" -#: builtin.c:1850 +#: builtin.cpp:3024 msgid "This is a login shell\n" msgstr "Ceci est un shell de connexion\n" -#: builtin.c:1852 +#: builtin.cpp:3026 msgid "This is not a login shell\n" msgstr "Ceci n'est pas un shell de connexion\n" -#: builtin.c:1854 +#: builtin.cpp:3028 #, c-format msgid "Job control: %ls\n" -msgstr "Contrôle des tâches: %ls\n" +msgstr "Contrôle des tâches: %ls\n" -#: builtin.c:1855 +#: builtin.cpp:3029 msgid "Only on interactive jobs" -msgstr "Seulement sur les tâches interactives" +msgstr "Seulement sur les tâches interactives" -#: builtin.c:1856 +#: builtin.cpp:3030 msgid "Never" msgstr "Jamais" -#: builtin.c:1856 +#: builtin.cpp:3030 msgid "Always" msgstr "Toujours" -#: builtin.c:1911 -#: builtin.c:2634 +#: builtin.cpp:3066 builtin.cpp:3995 #, c-format msgid "%ls: Argument '%ls' must be an integer\n" -msgstr "%ls: L'argument '%ls' doit être un entier\n" +msgstr "%ls: L'argument '%ls' doit être un entier\n" -#: builtin.c:1967 +#: builtin.cpp:3108 #, c-format msgid "%ls: Could not find home directory\n" -msgstr "%ls: Répertoire personnel introuvable\n" +msgstr "%ls: Répertoire personnel introuvable\n" -#: builtin.c:1979 -#, c-format -msgid "%ls: '%ls' is not a directory or you do not have permission to enter it\n" -msgstr "%ls: '%ls' n'est pas un répertoire ou vous n'avez pas l'autorisation d'y entrer\n" - -#: builtin.c:1993 +#: builtin.cpp:3128 builtin.cpp:3182 #, c-format msgid "%ls: '%ls' is not a directory\n" -msgstr "%ls: '%ls' n'est pas un répertoire\n" +msgstr "%ls: '%ls' n'est pas un répertoire\n" -#: builtin.c:2009 +#: builtin.cpp:3135 +#, fuzzy, c-format +msgid "%ls: The directory '%ls' does not exist\n" +msgstr "%ls: La fonction '%ls' n'existe pas\n" + +#: builtin.cpp:3142 +#, fuzzy, c-format +msgid "%ls: '%ls' is a rotten symlink\n" +msgstr "%ls: '%ls' n'est pas un fichier\n" + +#: builtin.cpp:3150 +#, fuzzy, c-format +msgid "%ls: Unknown error trying to locate directory '%ls'\n" +msgstr "%ls: Option '%ls' inconnue\n" + +#: builtin.cpp:3173 +#, fuzzy, c-format +msgid "%ls: Permission denied: '%ls'\n" +msgstr "%ls: Nom de fonction illégal '%ls'\n" + +#: builtin.cpp:3197 #, c-format msgid "%ls: Could not set PWD variable\n" -msgstr "%ls: Définition de la variable PWD impossible\n" +msgstr "%ls: Définition de la variable PWD impossible\n" -#: builtin.c:2033 -#, c-format -msgid "%ls: Expected at least one argument, got %d\n" -msgstr "%ls: Au moins un argument attendu, %d obtenu\n" +#: builtin.cpp:3284 +#, fuzzy, c-format +msgid "%ls: Key not specified\n" +msgstr "Utiliser une étiquette spécifiée" -#: builtin.c:2046 +#: builtin.cpp:3328 builtin.cpp:3336 +#, fuzzy, c-format +msgid "%ls: Error encountered while sourcing file '%ls':\n" +msgstr "%ls: Erreur de lecture sur le fichier '%ls'\n" + +#: builtin.cpp:3344 #, c-format msgid "%ls: '%ls' is not a file\n" msgstr "%ls: '%ls' n'est pas un fichier\n" -#: builtin.c:2084 +#: builtin.cpp:3363 #, c-format msgid "%ls: Error while reading file '%ls'\n" msgstr "%ls: Erreur de lecture sur le fichier '%ls'\n" -#: builtin.c:2147 -#: builtin.c:2311 +#: builtin.cpp:3419 builtin.cpp:3599 #, c-format msgid "%ls: There are no suitable jobs\n" -msgstr "%ls: Aucune tâche appropriée\n" +msgstr "%ls: Aucune tâche appropriée\n" -#: builtin.c:2165 +#: builtin.cpp:3448 #, c-format msgid "%ls: Ambiguous job\n" -msgstr "%ls: Tâche ambiguë\n" +msgstr "%ls: Tâche ambiguë\n" -#: builtin.c:2171 -#: builtin_jobs.c:302 +#: builtin.cpp:3454 builtin.cpp:3622 builtin_jobs.cpp:301 #, c-format msgid "%ls: '%ls' is not a job\n" -msgstr "%ls: '%ls' n'est pas une tâche\n" +msgstr "%ls: '%ls' n'est pas une tâche\n" -#: builtin.c:2188 -#, c-format -msgid "%ls: Argument must be a number: %ls\n" -msgstr "%ls: L'argument doit être un nombre: %ls\n" - -#: builtin.c:2199 -#: builtin_jobs.c:317 +#: builtin.cpp:3485 builtin_jobs.cpp:316 #, c-format msgid "%ls: No suitable job: %d\n" -msgstr "%ls: Aucune tâche appropriée: %d\n" +msgstr "%ls: Aucune tâche appropriée: %d\n" -#: builtin.c:2208 +#: builtin.cpp:3494 #, c-format -msgid "%ls: Can't put job %d, '%ls' to foreground because it is not under job control\n" -msgstr "%ls: Ne peut mettre la tâche %d, '%ls' en premier plan parce qu'elle n'est pas gérée par le contrôleur de tâches\n" +msgid "" +"%ls: Can't put job %d, '%ls' to foreground because it is not under job " +"control\n" +msgstr "" +"%ls: Ne peut mettre la tâche %d, '%ls' en premier plan parce qu'elle n'est " +"pas gérée par le contrôleur de tâches\n" -#: builtin.c:2262 +#: builtin.cpp:3547 #, c-format msgid "%ls: Unknown job '%ls'\n" -msgstr "%ls: Tâche inconnue: '%ls'\n" +msgstr "%ls: Tâche inconnue: '%ls'\n" -#: builtin.c:2271 +#: builtin.cpp:3556 #, c-format -msgid "%ls: Can't put job %d, '%ls' to background because it is not under job control\n" -msgstr "%ls: Ne peut mettre la tâche %d, '%ls' en arrière-plan parce qu'elle n'est pas gérée par le contrôleur de tâches\n" +msgid "" +"%ls: Can't put job %d, '%ls' to background because it is not under job " +"control\n" +msgstr "" +"%ls: Ne peut mettre la tâche %d, '%ls' en arrière-plan parce qu'elle n'est " +"pas gérée par le contrôleur de tâches\n" -#: builtin.c:2281 +#: builtin.cpp:3566 #, c-format msgid "Send job %d '%ls' to background\n" -msgstr "Envoyer la tâche %d '%ls' en arrière-plan\n" +msgstr "Envoyer la tâche %d '%ls' en arrière-plan\n" -#: builtin.c:2317 +#: builtin.cpp:3605 msgid "(default)" -msgstr "(défaut)" +msgstr "(défaut)" -#: builtin.c:2344 -#, c-format -msgid "%ls: Expected at least two arguments, got %d\n" -msgstr "%ls: Au moins deux arguments attendus, %d obtenu\n" - -#: builtin.c:2352 -#, c-format -msgid "%ls: '%ls' is not a valid variable name\n" -msgstr "%ls: '%ls' est un nom de variable invalide\n" - -#: builtin.c:2422 +#: builtin.cpp:3737 #, c-format msgid "%ls: Not inside of block\n" -msgstr "%ls: À l'extérieur du bloc\n" +msgstr "%ls: À l'extérieur du bloc\n" -#: builtin.c:2542 +#: builtin.cpp:3884 #, c-format msgid "%ls: Not inside of 'if' block\n" -msgstr "%ls: À l'extérieur du bloc 'if'\n" +msgstr "%ls: À l'extérieur du bloc 'if'\n" -#: builtin.c:2594 +#: builtin.cpp:3938 #, c-format msgid "%ls: Not inside of loop\n" -msgstr "%ls: À l'extérieur de la boucle\n" +msgstr "%ls: À l'extérieur de la boucle\n" -#: builtin.c:2645 -#: builtin_complete.c:528 -#: builtin.h:65 +#: builtin.cpp:4005 builtin_complete.cpp:539 builtin_set_color.cpp:140 +#: builtin.h:83 #, c-format msgid "%ls: Too many arguments\n" msgstr "%ls: Trop d'arguments\n" -#: builtin.c:2661 +#: builtin.cpp:4023 #, c-format msgid "%ls: Not inside of function\n" -msgstr "%ls: À l'extérieur de la fonction\n" +msgstr "%ls: À l'extérieur de la fonction\n" -#: builtin.c:2690 +#: builtin.cpp:4059 #, c-format msgid "%ls: Expected exactly one argument, got %d\n" msgstr "%ls: Exactement un argument attendu, %d obtenu(s)\n" -#: builtin.c:2721 +#: builtin.cpp:4090 #, c-format msgid "%ls: 'case' command while not in switch block\n" msgstr "%ls: commande 'case' sans bloc 'switch'\n" -#: builtin.c:2762 -msgid "Exit the shell" -msgstr "Quitter le shell" +#: builtin.cpp:4317 builtin.cpp:4360 +#, fuzzy +msgid "Test a condition" +msgstr "Définir une option de config" -#: builtin.c:2766 -msgid "Temporarily block delivery of events" -msgstr "Bloquer temporairement la distribution des événements" +#: builtin.cpp:4318 +msgid "Try out the new parser" +msgstr "" -#: builtin.c:2770 -msgid "Run a builtin command instead of a function" -msgstr "Exécuter une commande interne au lieu d'une fonction" +#: builtin.cpp:4319 +msgid "Execute command if previous command suceeded" +msgstr "Exécuter la commande si la précédente a réussi" -#: builtin.c:2774 -msgid "Change working directory" -msgstr "Changer le répertoire de travail" +#: builtin.cpp:4320 +msgid "Create a block of code" +msgstr "Créer un bloc de code" -#: builtin.c:2778 -msgid "Define a new function" -msgstr "Définir une nouvelle fonction" - -#: builtin.c:2782 -msgid "List or remove functions" -msgstr "Lister ou enlever des fonctions" - -#: builtin.c:2786 -msgid "Edit command specific completions" -msgstr "Éditer les complétions spécifiques aux commandes" - -#: builtin.c:2790 -msgid "End a block of commands" -msgstr "Termine un bloc de commandes" - -#: builtin.c:2794 -msgid "Evaluate block if condition is false" -msgstr "Évalue le bloc si la condition est fausse" - -#: builtin.c:2798 -msgid "Evaluate parameters as a command" -msgstr "Évaluer le paramètre comme une commande" - -#: builtin.c:2802 -msgid "Perform a set of commands multiple times" -msgstr "Exécuter un ensemble de commandes plusieurs fois" - -#: builtin.c:2806 -msgid "Evaluate contents of file" -msgstr "Évaluer le contenu d'un fichier" - -#: builtin.c:2810 -msgid "Handle environment variables" -msgstr "Gérer les variables d'environnement" - -#: builtin.c:2814 -msgid "Send job to foreground" -msgstr "Mettre la tâche en premier plan" - -#: builtin.c:2818 +#: builtin.cpp:4321 msgid "Send job to background" -msgstr "Mettre la tâche en arrière-plan" +msgstr "Mettre la tâche en arrière-plan" -#: builtin.c:2822 -msgid "Print currently running jobs" -msgstr "Afficher les tâches en cours d'exécution" +#: builtin.cpp:4322 +msgid "Handle fish key bindings" +msgstr "Gérer les raccourcis clavier de fish" -#: builtin.c:2826 -msgid "Read a line of input into variables" -msgstr "Lire une ligne d'entrée dans des variables" +#: builtin.cpp:4323 +msgid "Temporarily block delivery of events" +msgstr "Bloquer temporairement la distribution des événements" -#: builtin.c:2830 +#: builtin.cpp:4324 msgid "Stop the innermost loop" -msgstr "Arrêter la boucle interne" +msgstr "Arrêter la boucle interne" -#: builtin.c:2834 +#: builtin.cpp:4325 +msgid "" +"Temporarily halt execution of a script and launch an interactive debug prompt" +msgstr "" + +#: builtin.cpp:4326 +msgid "Run a builtin command instead of a function" +msgstr "Exécuter une commande interne au lieu d'une fonction" + +#: builtin.cpp:4327 builtin.cpp:4359 +msgid "Conditionally execute a block of commands" +msgstr "Exécuter conditionnellement un bloc de commandes" + +#: builtin.cpp:4328 +msgid "Change working directory" +msgstr "Changer le répertoire de travail" + +#: builtin.cpp:4329 +msgid "Run a program instead of a function or builtin" +msgstr "Exécuter un programme au lieu d'une fonction ou d'une commande interne" + +#: builtin.cpp:4330 +msgid "Set or get the commandline" +msgstr "Définir ou obtenir la ligne de commande" + +#: builtin.cpp:4331 +msgid "Edit command specific completions" +msgstr "Éditer les complétions spécifiques aux commandes" + +#: builtin.cpp:4332 +msgid "Search for a specified string in a list" +msgstr "" + +#: builtin.cpp:4333 msgid "Skip the rest of the current lap of the innermost loop" msgstr "Sauter le reste de la boucle interne" -#: builtin.c:2838 -msgid "Stop the currently evaluated function" -msgstr "Arrêter la fonction en évaluation" +#: builtin.cpp:4334 +#, fuzzy +msgid "Count the number of arguments" +msgstr "Finir après un nombre de serveurs" -#: builtin.c:2842 -msgid "Set or get the commandline" -msgstr "Définir ou obtenir la ligne de commande" +#: builtin.cpp:4335 +#, fuzzy +msgid "Print arguments" +msgstr "Liste des arguments du processus" -#: builtin.c:2846 -#: builtin.c:2850 -msgid "Conditionally execute a block of commands" -msgstr "Exécuter conditionnellement un bloc de commandes" +#: builtin.cpp:4336 +msgid "Evaluate block if condition is false" +msgstr "Évalue le bloc si la condition est fausse" -#: builtin.c:2854 -msgid "Handle fish key bindings" -msgstr "Gérer les raccourcis clavier de fish" +#: builtin.cpp:4337 +#, fuzzy +msgid "Emit an event" +msgstr "Omettre la version Debian" -#: builtin.c:2858 -msgid "Generate random number" -msgstr "Génère un nombre aléatoire" +#: builtin.cpp:4338 +msgid "End a block of commands" +msgstr "Termine un bloc de commandes" -#: builtin.c:2862 -msgid "Return status information about fish" -msgstr "Retourner l'information sur l'état de fish" - -#: builtin.c:2866 -msgid "Set or get the shells resource usage limits" -msgstr "Définir ou obtenir les limites d'utilisation des ressources du shell" - -#: builtin.c:2876 -msgid "Run a program instead of a function or builtin" -msgstr "Exécuter un programme au lieu d'une fonction ou d'une commande interne" - -#: builtin.c:2880 -msgid "Evaluate block if condition is true" -msgstr "Évaluer le bloc si la condition est vraie" - -#: builtin.c:2884 -msgid "Perform a command multiple times" -msgstr "Exécuter une commande plusieurs fois" - -#: builtin.c:2888 -msgid "Negate exit status of job" -msgstr "Inverser l'état de sortie de la tâche" - -#: builtin.c:2892 -msgid "Execute command if previous command suceeded" -msgstr "Exécuter la commande si la précédente a réussi" - -#: builtin.c:2896 -msgid "Execute command if previous command failed" -msgstr "Exécuter la commande si la précédente a échoué" - -#: builtin.c:2900 +#: builtin.cpp:4339 msgid "Run command in current process" -msgstr "Exécuter la commande dans le processus courant" +msgstr "Exécuter la commande dans le processus courant" -#: builtin.c:2904 -msgid "Create a block of code" -msgstr "Créer un bloc de code" +#: builtin.cpp:4340 +msgid "Exit the shell" +msgstr "Quitter le shell" -#: builtin.c:3010 +#: builtin.cpp:4341 +msgid "Send job to foreground" +msgstr "Mettre la tâche en premier plan" + +#: builtin.cpp:4342 +msgid "Perform a set of commands multiple times" +msgstr "Exécuter un ensemble de commandes plusieurs fois" + +#: builtin.cpp:4343 +msgid "Define a new function" +msgstr "Définir une nouvelle fonction" + +#: builtin.cpp:4344 +msgid "List or remove functions" +msgstr "Lister ou enlever des fonctions" + +#: builtin.cpp:4345 +msgid "History of commands executed by user" +msgstr "" + +#: builtin.cpp:4346 +msgid "Evaluate block if condition is true" +msgstr "Évaluer le bloc si la condition est vraie" + +#: builtin.cpp:4347 +msgid "Print currently running jobs" +msgstr "Afficher les tâches en cours d'exécution" + +#: builtin.cpp:4348 +msgid "Negate exit status of job" +msgstr "Inverser l'état de sortie de la tâche" + +#: builtin.cpp:4349 +msgid "Execute command if previous command failed" +msgstr "Exécuter la commande si la précédente a échoué" + +#: builtin.cpp:4350 +msgid "Prints formatted text" +msgstr "" + +#: builtin.cpp:4351 +#, fuzzy +msgid "Print the working directory" +msgstr "Changer le répertoire de travail" + +#: builtin.cpp:4352 +msgid "Generate random number" +msgstr "Génère un nombre aléatoire" + +#: builtin.cpp:4353 +msgid "Read a line of input into variables" +msgstr "Lire une ligne d'entrée dans des variables" + +#: builtin.cpp:4354 +msgid "Stop the currently evaluated function" +msgstr "Arrêter la fonction en évaluation" + +#: builtin.cpp:4355 +msgid "Handle environment variables" +msgstr "Gérer les variables d'environnement" + +#: builtin.cpp:4356 +msgid "Set the terminal color" +msgstr "" + +#: builtin.cpp:4357 +msgid "Evaluate contents of file" +msgstr "Évaluer le contenu d'un fichier" + +#: builtin.cpp:4358 +msgid "Return status information about fish" +msgstr "Retourner l'information sur l'état de fish" + +#: builtin.cpp:4361 +msgid "Set or get the shells resource usage limits" +msgstr "Définir ou obtenir les limites d'utilisation des ressources du shell" + +#: builtin.cpp:4362 +msgid "Perform a command multiple times" +msgstr "Exécuter une commande plusieurs fois" + +#: builtin.cpp:4442 parser.cpp:53 #, c-format msgid "Unknown builtin '%ls'" msgstr "Commande interne inconnue '%ls'" -#: builtin_complete.c:270 -#, c-format -msgid "%ls: Command only available in interactive sessions" -msgstr "%ls: Commande disponible seulement dans les sessions interactives" +#: builtin_commandline.cpp:411 +#, fuzzy, c-format +msgid "%ls: Unknown input function '%ls'\n" +msgstr "%ls: Option '%ls' inconnue\n" -#: builtin_jobs.c:88 +#: builtin_jobs.cpp:87 msgid "Job\tGroup\t" -msgstr "Tâche\tGroupe\t" +msgstr "Tâche\tGroupe\t" -#: builtin_jobs.c:90 +#: builtin_jobs.cpp:89 msgid "CPU\t" msgstr "CPU\t" -#: builtin_jobs.c:92 +#: builtin_jobs.cpp:91 msgid "State\tCommand\n" -msgstr "État\tCommande\n" +msgstr "État\tCommande\n" -#: builtin_jobs.c:101 -#: proc.c:596 +#: builtin_jobs.cpp:99 proc.cpp:751 msgid "stopped" -msgstr "arrêtée" +msgstr "arrêtée" -#: builtin_jobs.c:101 +#: builtin_jobs.cpp:99 msgid "running" -msgstr "en cours d'exécution" +msgstr "en cours d'exécution" -#: builtin_jobs.c:116 +#: builtin_jobs.cpp:113 msgid "Group\n" msgstr "Groupe\n" -#: builtin_jobs.c:129 -msgid "Procces\n" -msgstr "Processus\n" +#: builtin_jobs.cpp:126 +#, fuzzy +msgid "Process\n" +msgstr "Processus" -#: builtin_jobs.c:146 +#: builtin_jobs.cpp:143 msgid "Command\n" msgstr "Commande\n" -#: builtin_jobs.c:343 +#: builtin_jobs.cpp:344 #, c-format msgid "%ls: There are no jobs\n" -msgstr "%ls: Il n'y a aucune tâche\n" +msgstr "%ls: Il n'y a aucune tâche\n" -#: builtin_set.c:158 -#, c-format -msgid "%ls: Tried to change the read-only variable '%ls'\n" -msgstr "%ls: Impossible de changer la valeur de la variable en lecture seule '%ls'\n" - -#: builtin_set.c:208 -#, c-format -msgid "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" -msgstr "%ls: Plusieurs noms de variable spécifiés dans un seul appel (%ls and %.*ls)\n" - -#: builtin_set.c:229 -#, c-format -msgid "%ls: Invalid index starting at '%ls'\n" -msgstr "%ls: Index invalide commençant à '%ls'\n" - -#: builtin_set.c:590 +#: builtin_printf.cpp:175 #, c-format msgid "" -"%ls: Erase needs a variable name\n" -"%ls\n" +"warning: %ls: character(s) following character constant have been ignored" +msgstr "" + +#: builtin_printf.cpp:256 +#, fuzzy, c-format +msgid "%ls: expected a numeric value" +msgstr "%s: Un argument attendu\n" + +#: builtin_printf.cpp:258 +#, c-format +msgid "%ls: value not completely converted" +msgstr "" + +#: builtin_printf.cpp:359 +msgid "missing hexadecimal number in escape" +msgstr "" + +#: builtin_printf.cpp:387 +msgid "Missing hexadecimal number in Unicode escape" +msgstr "" + +#: builtin_printf.cpp:401 +#, c-format +msgid "Unicode character out of range: \\%c%0*x" +msgstr "" + +#: builtin_printf.cpp:668 +#, c-format +msgid "invalid field width: %ls" +msgstr "" + +#: builtin_printf.cpp:706 +#, fuzzy, c-format +msgid "invalid precision: %ls" +msgstr "%ls: id de processus invalide %ls\n" + +#: builtin_printf.cpp:737 +#, fuzzy, c-format +msgid "%.*ls: invalid conversion specification" +msgstr "%ls: Combinaison d'options invalide\n" + +#: builtin_printf.cpp:769 +msgid "printf: not enough arguments" +msgstr "" + +#: builtin_set.cpp:155 +#, c-format +msgid "%ls: Tried to change the read-only variable '%ls'\n" +msgstr "" +"%ls: Impossible de changer la valeur de la variable en lecture seule '%ls'\n" + +#: builtin_set.cpp:162 +#, fuzzy, c-format +msgid "%ls: Unknown error" +msgstr "%s: Erreur inconnue\n" + +#: builtin_set.cpp:214 +#, c-format +msgid "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" +msgstr "" +"%ls: Plusieurs noms de variable spécifiés dans un seul appel (%ls and " +"%.*ls)\n" + +#: builtin_set.cpp:241 +#, c-format +msgid "%ls: Invalid index starting at '%ls'\n" +msgstr "%ls: Index invalide commençant à '%ls'\n" + +#: builtin_set.cpp:640 +#, fuzzy, c-format +msgid "%ls: Erase needs a variable name\n" msgstr "" "%ls: 'Erase' requiert un nom de variable\n" "%ls\n" -#: builtin_set.c:733 -#, c-format -msgid "" -"%ls: Values cannot be specfied with erase\n" -"%ls\n" +#: builtin_set.cpp:684 +#, fuzzy, c-format +msgid "%ls: Can not specify scope when erasing array slice\n" +msgstr "%ls: Ne peut pas indiquer la portée en enlevant le bloc\n" + +#: builtin_set.cpp:783 +#, fuzzy, c-format +msgid "%ls: Values cannot be specfied with erase\n" msgstr "" -"%ls: 'erase' ne peut pas spécifier des valeurs\n" +"%ls: 'erase' ne peut pas spécifier des valeurs\n" "%ls\n" -#: complete.c:59 -msgid "User home" -msgstr "Répertoire personnel" +#: builtin_set_color.cpp:149 +#, fuzzy, c-format +msgid "%ls: Expected an argument\n" +msgstr "%s: Un argument attendu\n" -#: complete.c:64 -msgid "Variable: " +#: builtin_set_color.cpp:157 builtin_set_color.cpp:164 +#, fuzzy, c-format +msgid "%ls: Unknown color '%ls'\n" +msgstr "%s: Couleur inconnue '%s'\n" + +#: builtin_set_color.cpp:171 +#, fuzzy, c-format +msgid "%ls: Could not set up terminal\n" +msgstr "Paramétrage du terminal impossible" + +#: common.cpp:1882 +msgid "This is a bug. Break on bugreport to debug." +msgstr "" + +#: common.cpp:1901 +msgid "empty" +msgstr "vide" + +#: complete.cpp:61 +#, c-format +msgid "Home for %ls" +msgstr "" + +#: complete.cpp:66 +#, fuzzy, c-format +msgid "Variable: %ls" msgstr "Variable: " -#: complete.c:69 -msgid "Executable" -msgstr "Exécutable" - -#: complete.c:73 -msgid "Executable link" -msgstr "Lien exécutable" - -#: complete.c:78 -msgid "File" -msgstr "Fichier" - -#: complete.c:82 -msgid "Character device" -msgstr "Périphérique de caractères" - -#: complete.c:86 -msgid "Block device" -msgstr "Périphérique de blocs" - -#: complete.c:90 -msgid "Fifo" -msgstr "Fifo" - -#: complete.c:94 -msgid "Symbolic link" -msgstr "Lien symbolique" - -#: complete.c:98 -msgid "Rotten symbolic link" -msgstr "Lien symbolique brisé" - -#: complete.c:102 -msgid "Symbolic link loop" -msgstr "Boucle de liens symboliques" - -#: complete.c:106 -msgid "Socket" -msgstr "Socket" - -#: complete.c:110 -msgid "Directory" -msgstr "Répertoire" - -#: complete.c:115 -msgid "Function" -msgstr "Fonction" - -#: complete.c:119 -msgid "Builtin" -msgstr "Commande interne" - -#: complete.c:776 -#: complete.c:794 +#: complete.cpp:907 complete.cpp:925 msgid "Unknown option: " msgstr "Option inconnue: " -#: complete.c:799 +#: complete.cpp:929 msgid "Multiple matches for option: " msgstr "Plusieurs correspondances pour l'option: " -#: env.c:220 +#: env.cpp:251 msgid "Could not get user information" msgstr "Obtention des informations utilisateur impossible." -#: env.c:311 -#: env.c:319 +#: env.cpp:362 msgid "Changing language to English" -msgstr "Changement de langue à français" +msgstr "Changement de langue à français" -#: env.c:1097 +#: env.cpp:1252 msgid "Tried to pop empty environment stack." -msgstr "Impossible de dépiler une pile d'environnement vide" +msgstr "Impossible de dépiler une pile d'environnement vide" -#: event.c:212 +#: env_universal_common.cpp:529 +#, c-format +msgid "Could not convert message '%s' to wide character string" +msgstr "" + +#: event.cpp:168 #, c-format msgid "signal handler for %ls (%ls)" msgstr "gestionnaire de signaux pour %ls (%ls)" -#: event.c:216 +#: event.cpp:172 #, c-format msgid "handler for variable '%ls'" msgstr "gestionnaire pour la variable '%ls'" -#: event.c:222 +#: event.cpp:178 #, c-format msgid "exit handler for process %d" msgstr "gestionnaire de sortie pour le processus %d" -#: event.c:228 -#: event.c:239 +#: event.cpp:184 event.cpp:195 #, c-format msgid "exit handler for job %d, '%ls'" -msgstr "gestionnaire de sortie pour la tâche %d, '%ls'" +msgstr "gestionnaire de sortie pour la tâche %d, '%ls'" -#: event.c:230 +#: event.cpp:186 #, c-format msgid "exit handler for job with process group %d" -msgstr "gestionnaire de sortie pour la tâche avec le groupe de processus %d" +msgstr "gestionnaire de sortie pour la tâche avec le groupe de processus %d" -#: event.c:241 +#: event.cpp:197 #, c-format msgid "exit handler for job with job id %d" -msgstr "gestionnaire de sortie pour la tâche %d" +msgstr "gestionnaire de sortie pour la tâche %d" -#: event.c:551 +#: event.cpp:203 +#, fuzzy, c-format +msgid "handler for generic event '%ls'" +msgstr "gestionnaire pour la variable '%ls'" + +#: event.cpp:207 +#, fuzzy, c-format +msgid "Unknown event type '0x%x'" +msgstr "Type de redirection d'entrée inconnu: %d" + +#: event.cpp:621 msgid "Signal list overflow. Signals have been ignored." -msgstr "Débordement de la liste des signaux. Des signaux ont été ignorés." +msgstr "Débordement de la liste des signaux. Des signaux ont été ignorés." -#: exec.c:58 +#: exec.cpp:57 #, c-format msgid "An error occurred while redirecting file descriptor %d" -msgstr "Une erreur s'est produite pendant la redirection du descripteur de fichier %d" +msgstr "" +"Une erreur s'est produite pendant la redirection du descripteur de fichier %d" -#: exec.c:62 -#, c-format -msgid "An error occurred while redirecting file '%ls'" +#: exec.cpp:62 +#, fuzzy +msgid "An error occurred while writing output" +msgstr "Une erreur est survenue lors du paramétrage du tube" + +#: exec.cpp:67 +#, fuzzy, c-format +msgid "An error occurred while redirecting file '%s'" msgstr "Une erreur est survenue pendant la redirection du fichier '%ls'" -#: exec.c:66 -msgid "Could not create child process - exiting" -msgstr "Impossible de créer le processus fils - fermeture" - -#: exec.c:427 -#, c-format -msgid "Failed to execute process '%ls'" -msgstr "L'exécution du processus '%ls' a échoué" - -#: exec.c:606 -#, c-format -msgid "Could not send process %d from group %d to group %d" -msgstr "Déplacement du processus %d du groupe %d au groupe %d impossible" - -#: exec.c:624 -#: proc.c:844 -#: proc.c:856 -#, c-format -msgid "Could not send job %d ('%ls') to foreground" -msgstr "Mise en premier plan de la tâche %d ('%ls') impossible" - -#: exec.c:791 +#: exec.cpp:912 #, c-format msgid "Unknown function '%ls'" msgstr "Fonction inconnue '%ls'" -#: exec.c:892 +#: exec.cpp:1063 #, c-format msgid "Unknown input redirection type %d" -msgstr "Type de redirection d'entrée inconnu: %d" +msgstr "Type de redirection d'entrée inconnu: %d" -#: exec.c:1220 -#, 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 "Commande nulle envoyé au sous-shell. Ceci est un bogue de fish. S'il peut être reproduit, envoyez un rapport de bogue à %s." - -#: expand.c:52 +#: expand.cpp:59 msgid "Child process" msgstr "Processus fils" -#: expand.c:57 +#: expand.cpp:64 msgid "Process" msgstr "Processus" -#: expand.c:62 +#: expand.cpp:69 msgid "Job" -msgstr "Tâche" +msgstr "Tâche" -#: expand.c:67 -msgid "Job: " -msgstr "Tâche: " +#: expand.cpp:74 +#, fuzzy, c-format +msgid "Job: %ls" +msgstr "Tâche: " -#: expand.c:72 +#: expand.cpp:79 msgid "Shell process" msgstr "Processus shell" -#: expand.c:77 +#: expand.cpp:84 msgid "Last background job" -msgstr "Dernière tâche mise en arrière-plan" +msgstr "Dernière tâche mise en arrière-plan" -#: expand.c:1051 +#: expand.cpp:1306 msgid "Mismatched brackets" msgstr "Les crochets ne concordent pas" -#: input.c:435 -msgid "Invalid Control sequence" -msgstr "Séquence de contrôle invalide" - -#: input.c:547 -#, c-format -msgid "Could not parse sequence '%ls'" -msgstr "Analyse de la séquence '%ls' impossible" - -#: input.c:713 -msgid "Invalid sequence - no dash after control\n" -msgstr "Séquence invalide - pas de tiret après CTRL\n" - -#: input.c:743 -msgid "Invalid sequence - Control-nothing?\n" -msgstr "Séquence invalide - CTRL-rien?\n" - -#: input.c:758 -msgid "Invalid sequence - no dash after meta\n" -msgstr "Séquence invalide - pas de tiret après méta\n" - -#: input.c:763 -msgid "Invalid sequence - Meta-nothing?" -msgstr "Séquence invalide - Méta-rien?" - -#: input.c:808 -#, c-format -msgid "Invalid sequence - '%ls' expanded to zero characters" -msgstr "Séquence invalide - '%ls' ne contient aucun caractère" - -#: input.c:872 -msgid "Mismatched $endif in inputrc file" -msgstr "Les $endif ne concordent pas dans le fichier inputrc" - -#: input.c:924 -msgid "Mismatched quote" -msgstr "Apostrophe non-concordante" - -#: input.c:938 -msgid "Expected a ':'" -msgstr "Attendu ':'" - -#: input.c:983 -#, c-format -msgid "I don't know what '%ls' means" -msgstr "Je ne sais pas ce que '%ls' veut dire" - -#: input.c:987 -#, c-format -msgid "Expected end of line, got '%ls'" -msgstr "Fin de ligne attendu, '%ls' obtenu" - -#: input.c:992 -msgid "Syntax: set KEY VALUE" -msgstr "Syntaxe: set CLÉ VALEUR" - -#: input.c:1058 -msgid "Unable to parse key binding" -msgstr "Incapable d'analyser le raccourci clavier" - -#: input.c:1084 -#, c-format -msgid "I don't know what %ls means" -msgstr "Je ne sais pas ce que %ls veut dire" - -#: input.c:1110 -#, c-format -msgid "Error while reading input information from file '%ls'" -msgstr "Erreur lors de la lecture d'information d'entrée du fichier '%ls'" - -#: input.c:1363 -msgid "Could not set up terminal" -msgstr "Paramétrage du terminal impossible" - -#: io.c:80 -#, c-format -msgid "An error occured while reading output from code block on file descriptor %d" -msgstr "Une erreur est survenue lors de la lecture de la sortie du bloc de code sur le descripteur de fichier %d" - -#: main.c:204 +#: fish.cpp:320 #, c-format msgid "Invalid value '%s' for debug level switch" -msgstr "Valeur '%s' invalide comme interrupteur au niveau de débogage" +msgstr "Valeur '%s' invalide comme interrupteur au niveau de débogage" -#: main.c:232 -#: mimedb.c:1274 -#: set_color.c:223 +#: fish.cpp:361 mimedb.cpp:1335 #, c-format msgid "%s, version %s\n" msgstr "%s, version %s\n" -#: main.c:257 +#: fish.cpp:416 msgid "Can not use the no-execute mode when running an interactive session" -msgstr "Le mode no-execute ne peut pas être utilisé dans une session interactive" +msgstr "" +"Le mode no-execute ne peut pas être utilisé dans une session interactive" -#: main.c:335 +#: fish.cpp:517 #, c-format msgid "Error while reading file %ls\n" msgstr "Erreur lors de la lecture du fichier %ls\n" -#: mimedb.c:161 -#: mimedb.c:175 -#: mimedb.c:1094 +#: fish_indent.cpp:345 +#, fuzzy, c-format +msgid "%ls, version %s\n" +msgstr "%s, version %s\n" + +#: fish_pager.cpp:113 +#, fuzzy, c-format +msgid "%ls: Argument '%s' is not a valid file descriptor\n" +msgstr "%ls: '%ls' est un nom de variable invalide\n" + +#: fish_pager.cpp:703 +#, c-format +msgid " %d to %d of %d" +msgstr "" + +#: fish_pager.cpp:1012 +msgid "Could not set up output file descriptors for pager" +msgstr "" + +#: fish_pager.cpp:1018 +#, fuzzy +msgid "Could not set up input file descriptors for pager" +msgstr "Impossible de définir le mode du terminal pour le shell" + +#: fish_pager.cpp:1024 +#, fuzzy +msgid "Could not open tty for pager" +msgstr "Impossible de remettre le shell en premier plan" + +#: fish_pager.cpp:1031 +msgid "Could not initialize result pipe" +msgstr "" + +#: fish_pager.cpp:1075 input.cpp:384 input.cpp:394 +msgid "Could not set up terminal" +msgstr "Paramétrage du terminal impossible" + +#: fish_pager.cpp:1110 input.cpp:436 +#, fuzzy +msgid "Error while closing terminfo" +msgstr "Erreur lors de la fermeture du flux d'entrée" + +#: fish_pager.cpp:1306 +#, fuzzy +msgid "Unspecified file descriptors" +msgstr "Redirige vers un descripteur de fichier" + +#: fish_pager.cpp:1318 +#, fuzzy +msgid "Could not read completions" +msgstr "Commande à ajouter une complétion" + +#: fishd.cpp:766 path.cpp:358 +msgid "" +"Unable to create a configuration directory for fish. Your personal settings " +"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " +"where the current user has write access." +msgstr "" + +#: input.cpp:387 +#, c-format +msgid "Check that your terminal type, '%ls', is supported on this system" +msgstr "" + +#: input.cpp:389 +#, c-format +msgid "Attempting to use '%ls' instead" +msgstr "" + +#: io.cpp:110 +#, c-format +msgid "" +"An error occured while reading output from code block on file descriptor %d" +msgstr "" +"Une erreur est survenue lors de la lecture de la sortie du bloc de code sur " +"le descripteur de fichier %d" + +#: mimedb.cpp:173 mimedb.cpp:187 mimedb.cpp:1177 #, c-format msgid "%s: Out of memory\n" -msgstr "%s: Mémoire pleine\n" +msgstr "%s: Mémoire pleine\n" -#: mimedb.c:410 +#: mimedb.cpp:462 #, c-format msgid "%s: Unknown error in munge()\n" msgstr "%s: Erreur inconnue dans munge()\n" -#: mimedb.c:428 +#: mimedb.cpp:480 #, c-format msgid "%s: Locale string too long\n" -msgstr "%s: Chaîne de caractères de locale trop longue\n" +msgstr "%s: Chaîne de caractères de locale trop longue\n" -#: mimedb.c:490 -#, c-format -msgid "%s: Could not compile regular expressions\n" -msgstr "%s: Compilation impossible de l'expression régulière\n" +#: mimedb.cpp:550 mimedb.cpp:558 +#, fuzzy, c-format +msgid "%s: Could not compile regular expressions %s with error %s\n" +msgstr "%s: Compilation impossible de l'expression régulière\n" -#: mimedb.c:596 +#: mimedb.cpp:674 #, c-format msgid "%s: No description for type %s\n" msgstr "%s: Aucune description pour le type %s\n" -#: mimedb.c:660 +#: mimedb.cpp:742 #, c-format msgid "%s: Could not parse launcher string '%s'\n" -msgstr "%s: Analyse impossible de la chaîne de lancement '%s'\n" +msgstr "%s: Analyse impossible de la chaîne de lancement '%s'\n" -#: mimedb.c:693 +#: mimedb.cpp:778 #, c-format msgid "%s: Default launcher '%s' does not specify how to start\n" -msgstr "%s: Le lanceur par défaut '%s' ne spécifie pas comment démarrer\n" +msgstr "%s: Le lanceur par défaut '%s' ne spécifie pas comment démarrer\n" -#: mimedb.c:1073 +#: mimedb.cpp:1156 #, c-format msgid "%s: Unsupported switch '%c' in launch string '%s'\n" -msgstr "%s: Commutateur '%c' non supporté dans la chaîne de démarrage '%s'\n" +msgstr "%s: Commutateur '%c' non supporté dans la chaîne de démarrage '%s'\n" -#: mimedb.c:1285 +#: mimedb.cpp:1346 #, c-format msgid "%s: Can not launch a mimetype\n" msgstr "%s: Impossible de lancer un type Mime\n" -#: mimedb.c:1317 +#: mimedb.cpp:1374 #, c-format msgid "%s: Could not parse mimetype from argument '%s'\n" -msgstr "%s: Analyse impossible du type Mime à partir de l'argument '%s'\n" +msgstr "%s: Analyse impossible du type Mime à partir de l'argument '%s'\n" -#: mimedb.c:1395 +#: mimedb.cpp:1394 signal.cpp:407 signal.cpp:422 +msgid "Unknown" +msgstr "Inconnu" + +#: pager.cpp:24 +#, fuzzy +msgid "search: " +msgstr "Définir l'architecture" + +#: parse_execution.cpp:526 parse_execution.cpp:961 parser.cpp:1404 #, c-format -msgid "%s: Unknown error\n" -msgstr "%s: Erreur inconnue\n" +msgid "Could not expand string '%ls'" +msgstr "Développement de la chaîne '%ls' impossible" -#: parser.c:63 +#: parse_execution.cpp:549 +#, fuzzy, c-format +msgid "switch: Expected exactly one argument, got %lu\n" +msgstr "%ls: Exactement un argument attendu, %d obtenu(s)\n" + +#: parse_execution.cpp:749 parser.cpp:2053 +#, fuzzy, c-format +msgid "" +"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'." +msgstr "" +"Commande '%ls' inconnue. Vouliez-vous dire 'set VARIABLE VALEUR'? Pour de " +"l'information sur l'attribution de valeurs à des variables, lisez l'aide sur " +"la commande 'set' en tapant 'help set'." + +#: parse_execution.cpp:774 parser.cpp:2078 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function like " +"'function %ls; %ls $argv; end' or use the eval builtin instead, like 'eval " +"%ls'. See the help section for the function command by typing 'help " +"function'." +msgstr "" +"Les variables ne peuvent pas être utilisées comme des commandes. À la place, " +"définissez une fonction 'function %ls; %ls $argv; end'. Lisez l'aide pour la " +"commande 'function' en tapant 'help function'." + +#: parse_execution.cpp:783 parser.cpp:2087 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function or use the " +"eval builtin instead, like 'eval %ls'. See the help section for the function " +"command by typing 'help function'." +msgstr "" +"Les variables ne peuvent pas être utilisées comme des commandes. À la place, " +"définissez une fonction. Lisez l'aide pour la commande 'function' en tapant " +"'help function'." + +#: parse_execution.cpp:791 parser.cpp:2095 #, c-format -msgid "If this error can be reproduced, please send a bug report to %s." -msgstr "Si cette erreur peut être reproduite, envoyez un rapport de bogue à %s." +msgid "" +"Commands may not contain variables. Use the eval builtin instead, like 'eval " +"%ls'. See the help section for the eval command by typing 'help eval'." +msgstr "" +"Les commandes ne peuvent pas contenir des variables. Utilisez la commande " +"interne 'eval', comme 'eval %ls'. Lisez l'aide sur la commande 'eval' en " +"tapant 'help eval'." -#: parser.c:68 +#: parse_execution.cpp:798 parser.cpp:2102 +#, c-format +msgid "The file '%ls' is not executable by this user" +msgstr "" + +#: parse_execution.cpp:1029 +#, fuzzy, c-format +msgid "Invalid redirection target: %ls" +msgstr "Redirection invalide" + +#: parse_execution.cpp:1053 +#, fuzzy, c-format +msgid "Requested redirection to '%ls', which is not a valid file descriptor" +msgstr "" +"Redirection demandée à quelque chose qui n'est pas un descripteur de fichier " +"%ls" + +#: parse_util.cpp:47 +#, fuzzy, c-format +msgid "The '%ls' command can not be used in a pipeline" +msgstr "Cette commande ne peut pas être utilisée dans un pipeline" + +#: parser.cpp:58 msgid "This command can not be used in a pipeline" -msgstr "Cette commande ne peut pas être utilisée dans un pipeline" +msgstr "Cette commande ne peut pas être utilisée dans un pipeline" -#: parser.c:74 +#: parser.cpp:64 #, c-format msgid "Tokenizer error: '%ls'" msgstr "Erreur d'analyseur lexical: '%ls'" -#: parser.c:79 -msgid "Pipe or short circuit command requires additional command" -msgstr "Le tube ou la commande court-circuit exige une commande additionnelle" +#: parser.cpp:69 +msgid "An additional command is required" +msgstr "" -#: parser.c:84 -msgid "Maximum recursion depth reached. Accidental infinite loop?" -msgstr "Profondeur maximale de récursion atteinte. Boucle infinie accidentelle?" +#: parser.cpp:74 +msgid "" +"The function calls itself immediately, which would result in an infinite " +"loop." +msgstr "" -#: parser.c:89 -msgid "Could not locate end of block. The 'end' command is missing, misspelled or a ';' is missing." -msgstr "Fin de bloc introuvable. La commande 'end' est manquante, mal écrite ou un ';' est manquant." +#: parser.cpp:79 +msgid "" +"Could not locate end of block. The 'end' command is missing, misspelled or a " +"';' is missing." +msgstr "" +"Fin de bloc introuvable. La commande 'end' est manquante, mal écrite ou un " +"';' est manquant." -#: parser.c:94 -msgid "Maximum number of nested blocks reached." -msgstr "Nombre maximum de blocs imbriqués atteint." - -#: parser.c:99 +#: parser.cpp:82 #, c-format msgid "Expected a command name, got token of type '%ls'" -msgstr "Un nom de commande était attendu, un jeton de type '%ls' a été obtenu" +msgstr "Un nom de commande était attendu, un jeton de type '%ls' a été obtenu" -#: parser.c:104 -#, c-format -msgid "Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; or COMMAND'? See the help section for the 'or' builtin command by typing 'help or'." -msgstr "Un nom de commande était attendu, un jeton de type '%ls' a été obtenu. Vouliez-vous dire 'COMMANDE; or COMMANDE'? Lisez l'aide pour la commande interne 'or' en tapant 'help or'." - -#: parser.c:109 -#, c-format -msgid "Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; and COMMAND'? See the help section for the 'and' builtin command by typing 'help and'." -msgstr "Un nom de commande était attendu, un jeton de type '%ls' a été obtenu. Vouliez-vous dire 'COMMANDE; and COMMANDE'? Lisez l'aide pour la commande interne 'and' en tapant 'help and'." - -#: parser.c:114 +#: parser.cpp:87 parse_constants.h:158 #, c-format msgid "Illegal command name '%ls'" -msgstr "Nom de commande illégal '%ls'" +msgstr "Nom de commande illégal '%ls'" -#: parser.c:119 +#: parser.cpp:92 parse_constants.h:164 #, c-format -msgid "Warning: No match for wildcard '%ls'. The command will not be executed." -msgstr "Avertissement: Aucune correspondance pour l'expression générique '%ls'. La commande ne sera pas exécutée." +msgid "Illegal file descriptor in redirection '%ls'" +msgstr "" -#: parser.c:124 +#: parser.cpp:97 parse_constants.h:167 +#, c-format +msgid "No matches for wildcard '%ls'." +msgstr "" + +#: parser.cpp:102 msgid "'case' builtin not inside of switch block" -msgstr "Commande interne 'case' à l'extérieur d'un bloc 'switch'" +msgstr "Commande interne 'case' à l'extérieur d'un bloc 'switch'" -#: parser.c:129 +#: parser.cpp:107 msgid "Loop control command while not inside of loop" -msgstr "Commande de contrôle de boucle à l'extérieur d'une boucle" +msgstr "Commande de contrôle de boucle à l'extérieur d'une boucle" -#: parser.c:134 -msgid "'else' builtin not inside of if block" -msgstr "Commande interne 'else' à l'extérieur d'un bloc 'if'" +#: parser.cpp:112 parse_constants.h:176 +#, fuzzy +msgid "'return' builtin command outside of function definition" +msgstr "Exécuter une commande interne au lieu d'une fonction" -#: parser.c:139 -msgid "'end' command outside of block" -msgstr "Commande interne 'end' à l'extérieur d'un bloc" +#: parser.cpp:117 +#, fuzzy, c-format +msgid "'%ls' builtin not inside of if block" +msgstr "Commande interne 'else' à l'extérieur d'un bloc 'if'" -#: parser.c:144 +#: parser.cpp:122 #, 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 "Commande '%ls' inconnue. Vouliez-vous dire 'set VARIABLE VALEUR'? Pour de l'information sur l'attribution de valeurs à des variables, lisez l'aide sur la commande 'set' en tapant 'help set'." +msgid "'%ls' used past terminating 'else'" +msgstr "" -#: parser.c:149 +#: parser.cpp:127 +msgid "'end' command outside of block" +msgstr "Commande interne 'end' à l'extérieur d'un bloc" + +#: parser.cpp:132 parse_constants.h:179 +#, fuzzy, c-format +msgid "" +"Unknown command '%ls'. Did you mean 'set %ls %ls'? See the help section on " +"the set command by typing 'help set'." +msgstr "" +"Commande '%ls' inconnue. Vouliez-vous dire 'set VARIABLE VALEUR'? Pour de " +"l'information sur l'attribution de valeurs à des variables, lisez l'aide sur " +"la commande 'set' en tapant 'help set'." + +#: parser.cpp:137 #, c-format msgid "Expected redirection specification, got token of type '%ls'" -msgstr "Spécification de redirection attendue, jeton de type '%ls' obtenu" +msgstr "Spécification de redirection attendue, jeton de type '%ls' obtenu" -#: parser.c:154 -msgid "Encountered redirection when expecting a command name. Fish does not allow a redirection operation before a command." -msgstr "Redirection obtenue alors qu'un nom de commande était attendu. Fish ne permet pas une opération de redirection avant une commande." +#: parser.cpp:142 +msgid "" +"Encountered redirection when expecting a command name. Fish does not allow a " +"redirection operation before a command." +msgstr "" +"Redirection obtenue alors qu'un nom de commande était attendu. Fish ne " +"permet pas une opération de redirection avant une commande." -#: parser.c:159 -msgid "Tried to evaluate null pointer." -msgstr "Évaluation de pointeur nul." - -#: parser.c:164 +#: parser.cpp:147 #, c-format msgid "Tried to evaluate commands using invalid block type '%ls'" -msgstr "Évaluation de commandes en utilisant un type de bloc invalide '%ls'" +msgstr "Évaluation de commandes en utilisant un type de bloc invalide '%ls'" -#: parser.c:170 +#: parser.cpp:153 #, c-format msgid "Unexpected token of type '%ls'" msgstr "Jeton de type '%ls' inattendu" -#: parser.c:175 -#, c-format -msgid "Error while searching for command '%ls'" -msgstr "Erreur lors de la recherche de la commande '%ls'" - -#: parser.c:181 +#: parser.cpp:158 parse_constants.h:209 msgid "'while' block" msgstr "bloc 'while'" -#: parser.c:187 +#: parser.cpp:163 parse_constants.h:214 msgid "'for' block" msgstr "bloc 'for'" -#: parser.c:193 +#: parser.cpp:168 parse_constants.h:219 +#, fuzzy +msgid "Block created by breakpoint" +msgstr "bloc créé par la commande interne '.'" + +#: parser.cpp:175 parse_constants.h:226 msgid "'if' conditional block" msgstr "bloc conditionnel 'if'" -#: parser.c:199 +#: parser.cpp:181 parse_constants.h:232 msgid "function definition block" -msgstr "bloc de définition de fonction" +msgstr "bloc de définition de fonction" -#: parser.c:205 +#: parser.cpp:187 parse_constants.h:238 msgid "function invocation block" msgstr "bloc d'invocation de fonction" -#: parser.c:211 +#: parser.cpp:192 parse_constants.h:243 +#, fuzzy +msgid "function invocation block with no variable shadowing" +msgstr "bloc d'invocation de fonction" + +#: parser.cpp:198 parse_constants.h:249 msgid "'switch' block" msgstr "bloc 'switch'" -#: parser.c:217 +#: parser.cpp:204 parse_constants.h:255 msgid "unexecutable block" -msgstr "bloc inexécutable" +msgstr "bloc inexécutable" -#: parser.c:223 +#: parser.cpp:210 parse_constants.h:261 msgid "global root block" msgstr "bloc racine global" -#: parser.c:229 +#: parser.cpp:216 parse_constants.h:267 msgid "command substitution block" msgstr "bloc de substitution de commande" -#: parser.c:235 +#: parser.cpp:222 parse_constants.h:273 msgid "'begin' unconditional block" msgstr "bloc inconditionnel 'begin'" -#: parser.c:241 +#: parser.cpp:228 parse_constants.h:279 msgid "Block created by the . builtin" -msgstr "bloc créé par la commande interne '.'" +msgstr "bloc créé par la commande interne '.'" -#: parser.c:246 +#: parser.cpp:233 parse_constants.h:284 msgid "event handler block" -msgstr "bloc de gestion d'événement" +msgstr "bloc de gestion d'événement" -#: parser.c:252 +#: parser.cpp:239 parse_constants.h:290 msgid "unknown/invalid block" msgstr "bloc inconnu/invalide" -#: parser.c:893 +#: parser.cpp:645 #, c-format msgid "Could not write profiling information to file '%s'" -msgstr "Écriture des informations de profilage dans le fichier '%s' impossible" +msgstr "Écriture des informations de profilage dans le fichier '%s' impossible" -#: parser.c:899 +#: parser.cpp:651 msgid "Time\tSum\tCommand\n" msgstr "Temps\tSomme\tCommande\n" -#: parser.c:1025 +#: parser.cpp:811 #, c-format msgid "in event handler: %ls\n" -msgstr "dans le gestionnaire d'événement: %ls\n" +msgstr "dans le gestionnaire d'événement: %ls\n" -#: parser.c:1039 -#, c-format -msgid "in . (source) call of file '%ls',\n" -msgstr "dans . (source) appel du fichier '%ls',\n" +#: parser.cpp:839 +#, fuzzy, c-format +msgid "from sourcing file %ls\n" +msgstr "Erreur lors de la lecture du fichier %ls\n" -#: parser.c:1044 -#, c-format -msgid "in function '%ls',\n" +#: parser.cpp:845 +#, fuzzy, c-format +msgid "in function '%ls'\n" msgstr "dans la fonction '%ls',\n" -#: parser.c:1049 +#: parser.cpp:850 msgid "in command substitution\n" msgstr "dans la substitution de commande\n" -#: parser.c:1059 -#, c-format -msgid "\tcalled on line %d of file '%ls',\n" -msgstr "\tappelé à la ligne %d du fichier '%ls',\n" +#: parser.cpp:863 +#, fuzzy, c-format +msgid "\tcalled on line %d of file %ls\n" +msgstr "\tappelé à la ligne %d du fichier '%ls',\n" -#: parser.c:1066 -msgid "\tcalled on standard input,\n" -msgstr "\tappelé sur l'entrée standard,\n" +#: parser.cpp:869 +#, fuzzy +msgid "\tcalled during startup\n" +msgstr "\tappelé sur l'entrée standard,\n" -#: parser.c:1080 +#: parser.cpp:873 +#, fuzzy +msgid "\tcalled on standard input\n" +msgstr "\tappelé sur l'entrée standard,\n" + +#: parser.cpp:890 #, c-format msgid "\twith parameter list '%ls'\n" -msgstr "\tavec la liste de paramètres '%ls'\n" +msgstr "\tavec la liste de paramètres '%ls'\n" -#: parser.c:1249 +#: parser.cpp:1087 #, c-format msgid "%ls (line %d): " msgstr "%ls (ligne %d): " -#: parser.c:1457 -#, c-format -msgid "Could not expand string '%ls'" -msgstr "Développement de la chaîne '%ls' impossible" +#: parser.cpp:1091 +msgid "Startup" +msgstr "" -#: parser.c:1560 +#: parser.cpp:1197 +msgid "Job inconsistency" +msgstr "Inconsistance de tâche" + +#: parser.cpp:1520 msgid "Invalid IO redirection" msgstr "Redirection E/S invalide" -#: parser.c:1603 +#: parser.cpp:1541 #, c-format msgid "Requested redirection to something that is not a file descriptor %ls" -msgstr "Redirection demandée à quelque chose qui n'est pas un descripteur de fichier %ls" +msgstr "" +"Redirection demandée à quelque chose qui n'est pas un descripteur de fichier " +"%ls" -#: parser.c:2025 -#, c-format -msgid "Variables may not be used as commands. Instead, define a function like 'function %ls; %ls $argv; end'. See the help section for the function command by typing 'help function'." -msgstr "Les variables ne peuvent pas être utilisées comme des commandes. À la place, définissez une fonction 'function %ls; %ls $argv; end'. Lisez l'aide pour la commande 'function' en tapant 'help function'." - -#: parser.c:2033 -msgid "Variables may not be used as commands. Instead, define a function. See the help section for the function command by typing 'help function'." -msgstr "Les variables ne peuvent pas être utilisées comme des commandes. À la place, définissez une fonction. Lisez l'aide pour la commande 'function' en tapant 'help function'." - -#: parser.c:2040 -#, c-format -msgid "Commands may not contain variables. Use the eval builtin instead, like 'eval %ls'. See the help section for the eval command by typing 'help eval'." -msgstr "Les commandes ne peuvent pas contenir des variables. Utilisez la commande interne 'eval', comme 'eval %ls'. Lisez l'aide sur la commande 'eval' en tapant 'help eval'." - -#: parser.c:2047 -#, c-format -msgid "Unknown command '%ls'" -msgstr "Commande inconnue '%ls'" - -#: parser.c:2489 +#: parser.cpp:2667 parser.cpp:2750 msgid "End of block mismatch. Program terminating." -msgstr "Fin du bloc incohérente. Fin du programme." +msgstr "Fin du bloc incohérente. Fin du programme." -#: proc.c:137 -msgid "Job inconsistency" -msgstr "Inconsistance de tâche" +#: parser.cpp:3034 +#, fuzzy, c-format +msgid "%ls (line %lu): " +msgstr "%ls (ligne %d): " -#: proc.c:455 +#: path.cpp:24 +#, c-format +msgid "Error while searching for command '%ls'" +msgstr "Erreur lors de la recherche de la commande '%ls'" + +#: proc.cpp:615 #, c-format msgid "Job %d, '%ls' has %ls" -msgstr "La tâche %d, '%ls' a %ls" +msgstr "La tâche %d, '%ls' a %ls" -#: proc.c:541 +#: proc.cpp:699 #, c-format msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "%ls: Tâche %d, '%ls' terminée par le signal %ls (%ls)" +msgstr "%ls: Tâche %d, '%ls' terminée par le signal %ls (%ls)" -#: proc.c:549 +#: proc.cpp:707 #, c-format -msgid "%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "%ls: Processus %d, '%ls' de la tâche %d, '%ls' terminé par le signal %ls (%ls)" +msgid "" +"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "" +"%ls: Processus %d, '%ls' de la tâche %d, '%ls' terminé par le signal %ls " +"(%ls)" -#: proc.c:580 +#: proc.cpp:736 msgid "ended" -msgstr "terminé" +msgstr "terminé" -#: proc.c:804 +#: proc.cpp:969 msgid "An error occured while reading output from code block" -msgstr "Une erreur est survenue lors de la lecture de la sortie du bloc de code" +msgstr "" +"Une erreur est survenue lors de la lecture de la sortie du bloc de code" -#: proc.c:981 -#: proc.c:991 -#: proc.c:1001 +#: proc.cpp:998 proc.cpp:1010 +#, c-format +msgid "Could not send job %d ('%ls') to foreground" +msgstr "Mise en premier plan de la tâche %d ('%ls') impossible" + +#: proc.cpp:1030 proc.cpp:1040 proc.cpp:1055 msgid "Could not return shell to foreground" msgstr "Impossible de remettre le shell en premier plan" -#: proc.c:1024 -msgid "Job command" -msgstr "Commande de tâche" - -#: proc.c:1027 -#: proc.c:1054 +#: proc.cpp:1280 proc.cpp:1304 msgid "Process list pointer" msgstr "Pointeur de la liste des processus" -#: proc.c:1030 -msgid "Job list pointer" -msgstr "Pointeur de la liste des tâches" - -#: proc.c:1041 +#: proc.cpp:1291 #, c-format msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" -msgstr "Plus d'une tâche en premier plan: tâche 1: '%ls' tâche 2: '%ls'" +msgstr "Plus d'une tâche en premier plan: tâche 1: '%ls' tâche 2: '%ls'" -#: proc.c:1052 +#: proc.cpp:1302 msgid "Process argument list" msgstr "Liste des arguments du processus" -#: proc.c:1053 +#: proc.cpp:1303 msgid "Process name" msgstr "Nom du processus" -#: proc.c:1055 -msgid "Process command" -msgstr "Commande du processus" - -#: proc.c:1060 +#: proc.cpp:1309 #, c-format msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" -msgstr "Tâche '%ls', le processus '%ls' a un état inconsistant 'arrêté'=%d" +msgstr "Tâche '%ls', le processus '%ls' a un état inconsistant 'arrêté'=%d" -#: proc.c:1070 +#: proc.cpp:1319 #, c-format msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" -msgstr "Tâche '%ls', le processus '%ls' a un état inconsistant 'complété'=%d" +msgstr "Tâche '%ls', le processus '%ls' a un état inconsistant 'complété'=%d" -#: reader.c:328 +#: reader.cpp:453 msgid "Could not set terminal mode for new job" -msgstr "Impossible de définir le mode du terminal pour la nouvelle tâche" +msgstr "Impossible de définir le mode du terminal pour la nouvelle tâche" -#: reader.c:352 +#: reader.cpp:477 msgid "Could not set terminal mode for shell" -msgstr "Impossible de définir le mode du terminal pour le shell" +msgstr "Impossible de définir le mode du terminal pour le shell" -#: reader.c:1636 +#: reader.cpp:2133 +msgid "No TTY for interactive shell (tcgetpgrp failed)" +msgstr "" + +#: reader.cpp:2148 +#, c-format +msgid "" +"I appear to be an orphaned process, so I am quitting politely. My pid is %d." +msgstr "" + +#: reader.cpp:2179 msgid "Couldn't put the shell in its own process group" msgstr "Mise impossible du shell dans son propre groupe de processus" -#: reader.c:1646 +#: reader.cpp:2189 msgid "Couldn't grab control of terminal" -msgstr "Ne peut pas saisir le contrôle du terminal" +msgstr "Ne peut pas saisir le contrôle du terminal" -#: reader.c:2151 +#: reader.cpp:2703 msgid "Pop null reader block" msgstr "Pop null reader block" -#: reader.c:2300 -msgid "There are stopped jobs\n" -msgstr "Il y a des tâches arrêtées\n" +#: reader.cpp:2956 +msgid "" +"There are stopped jobs. A second attempt to exit will enforce their " +"termination.\n" +msgstr "" -#: reader.c:2846 +#: reader.cpp:4069 #, c-format msgid "Unknown keybinding %d" msgstr "Raccourci clavier inconnu %d" -#: reader.c:2921 -msgid "Error while reading commands" -msgstr "Erreur lors de la lecture des commandes" +#: reader.cpp:4210 +#, fuzzy +msgid "Error while reading from file descriptor" +msgstr "Erreur lors de la lecture du fichier %ls\n" -#: reader.c:2940 +#: reader.cpp:4227 msgid "Error while closing input stream" -msgstr "Erreur lors de la fermeture du flux d'entrée" +msgstr "Erreur lors de la fermeture du flux d'entrée" -#: reader.c:2965 -#, c-format -msgid "Could not convert input. Read %d bytes." -msgstr "Impossible de convertir l'entrée. %d octets lus." - -#: reader.c:2971 -msgid "Could not read input stream" -msgstr "Impossible de lire le flux d'entrée" - -#: reader.c:2980 +#: reader.cpp:4248 msgid "Error while opening input stream" -msgstr "Erreur d'ouverture du flux d'entrée" +msgstr "Erreur d'ouverture du flux d'entrée" -#: sanity.c:37 -msgid "Errors detected, shutting down" -msgstr "Erreurs détectées, fermeture" +#: sanity.cpp:37 +#, fuzzy +msgid "Errors detected, shutting down. Break on sanity_lose() to debug." +msgstr "Erreurs détectées, fermeture" -#: sanity.c:65 +#: sanity.cpp:65 #, c-format msgid "The pointer '%ls' is invalid" msgstr "Le pointeur '%ls' est invalide" -#: sanity.c:71 +#: sanity.cpp:71 #, c-format msgid "The pointer '%ls' is null" msgstr "Le pointeur '%ls' est nul" -#: set_color.c:250 -#, c-format -msgid "%s: Too many arguments\n" -msgstr "%s: Trop d'arguments\n" - -#: set_color.c:257 -#, c-format -msgid "%s: Expected an argument\n" -msgstr "%s: Un argument attendu\n" - -#: set_color.c:266 -#: set_color.c:274 -#, c-format -msgid "%s: Unknown color '%s'\n" -msgstr "%s: Couleur inconnue '%s'\n" - -#: signal.c:62 +#: signal.cpp:69 msgid "Terminal hung up" -msgstr "Le terminal a raccroché" +msgstr "Le terminal a raccroché" -#: signal.c:70 +#: signal.cpp:77 msgid "Quit request from job control (^C)" -msgstr "Requête de sortie du contrôle des tâches (^C)" +msgstr "Requête de sortie du contrôle des tâches (^C)" -#: signal.c:78 +#: signal.cpp:85 msgid "Quit request from job control with core dump (^\\)" -msgstr "Requête de sortie du contrôle des tâches avec core dump (^\\)" +msgstr "Requête de sortie du contrôle des tâches avec core dump (^\\)" -#: signal.c:86 +#: signal.cpp:93 msgid "Illegal instruction" -msgstr "Instruction illégale" +msgstr "Instruction illégale" -#: signal.c:94 +#: signal.cpp:101 msgid "Trace or breakpoint trap" -msgstr "Déroutement de suivi/point d'arrêt" +msgstr "Déroutement de suivi/point d'arrêt" -#: signal.c:102 +#: signal.cpp:109 msgid "Abort" msgstr "Abandon" -#: signal.c:110 +#: signal.cpp:117 msgid "Misaligned address error" msgstr "Erreur de mauvaise adresse" -#: signal.c:118 +#: signal.cpp:125 msgid "Floating point exception" msgstr "Exception de virgule flottante" -#: signal.c:126 +#: signal.cpp:133 msgid "Forced quit" -msgstr "Forcé à quitter" +msgstr "Forcé à quitter" -#: signal.c:134 +#: signal.cpp:141 msgid "User defined signal 1" -msgstr "Signal défini par l'utilisateur 1" +msgstr "Signal défini par l'utilisateur 1" -#: signal.c:141 +#: signal.cpp:148 msgid "User defined signal 2" -msgstr "Signal défini par l'utilisateur 2" +msgstr "Signal défini par l'utilisateur 2" -#: signal.c:149 +#: signal.cpp:156 msgid "Address boundary error" -msgstr "Erreur de frontière d'adresse" +msgstr "Erreur de frontière d'adresse" -#: signal.c:157 +#: signal.cpp:164 msgid "Broken pipe" msgstr "tube interrompu" -#: signal.c:165 +#: signal.cpp:172 msgid "Timer expired" msgstr "Expiration de l'horloge" -#: signal.c:173 +#: signal.cpp:180 msgid "Polite quit request" msgstr "Demande polie de quitter" -#: signal.c:181 +#: signal.cpp:188 msgid "Child process status changed" -msgstr "L'état du processus fils a changé" +msgstr "L'état du processus fils a changé" -#: signal.c:189 +#: signal.cpp:196 msgid "Continue previously stopped process" -msgstr "Continuer le processus précédemment arrêté" +msgstr "Continuer le processus précédemment arrêté" -#: signal.c:197 +#: signal.cpp:204 msgid "Forced stop" -msgstr "Arrêt forcé" +msgstr "Arrêt forcé" -#: signal.c:205 +#: signal.cpp:212 msgid "Stop request from job control (^Z)" -msgstr "Demande d'arrêt du contrôle des tâches (^Z)" +msgstr "Demande d'arrêt du contrôle des tâches (^Z)" -#: signal.c:213 +#: signal.cpp:220 msgid "Stop from terminal input" -msgstr "Arrêt de l'entrée du terminal" +msgstr "Arrêt de l'entrée du terminal" -#: signal.c:221 +#: signal.cpp:228 msgid "Stop from terminal output" -msgstr "Arrêt de la sortie du terminal" +msgstr "Arrêt de la sortie du terminal" -#: signal.c:229 +#: signal.cpp:236 msgid "Urgent socket condition" msgstr "Condition urgente de socket" -#: signal.c:237 +#: signal.cpp:244 msgid "CPU time limit exceeded" -msgstr "Limite de temps CPU dépassée" +msgstr "Limite de temps CPU dépassée" -#: signal.c:245 +#: signal.cpp:252 msgid "File size limit exceeded" -msgstr "Limite de taille de fichier dépassée" +msgstr "Limite de taille de fichier dépassée" -#: signal.c:253 +#: signal.cpp:260 msgid "Virtual timer expired" -msgstr "Horloge virtuelle expirée" +msgstr "Horloge virtuelle expirée" -#: signal.c:261 +#: signal.cpp:268 msgid "Profiling timer expired" -msgstr "Horloge de profilage expirée" +msgstr "Horloge de profilage expirée" -#: signal.c:269 -#: signal.c:277 +#: signal.cpp:276 signal.cpp:284 msgid "Window size change" -msgstr "Changement de dimension de fenêtre" +msgstr "Changement de dimension de fenêtre" -#: signal.c:285 +#: signal.cpp:292 msgid "I/O on asynchronous file descriptor is possible" msgstr "E/S sur un descripteur de fichier asynchrone possible" -#: signal.c:293 +#: signal.cpp:300 msgid "Power failure" msgstr "Panne de courant" -#: signal.c:301 +#: signal.cpp:308 msgid "Bad system call" -msgstr "Mauvais appel système" +msgstr "Mauvais appel système" -#: signal.c:309 +#: signal.cpp:316 msgid "Information request" msgstr "Demande d'information" -#: signal.c:317 +#: signal.cpp:324 msgid "Stack fault" msgstr "Faute de pile" -#: signal.c:325 +#: signal.cpp:332 msgid "Emulator trap" -msgstr "Déroutement d'émulation" +msgstr "Déroutement d'émulation" -#: signal.c:333 +#: signal.cpp:340 msgid "Abort (Alias for SIGABRT)" msgstr "Abandon (Alias pour SIGABRT)" -#: signal.c:341 +#: signal.cpp:348 msgid "Unused signal" -msgstr "Signal inutilisé" +msgstr "Signal inutilisé" -#: signal.c:400 -#: signal.c:415 -msgid "Unknown" -msgstr "Inconnu" +#: signal.cpp:684 +msgid "Signal block mismatch" +msgstr "" -#: tokenizer.c:31 -msgid "Unexpected end of token" +#: tokenizer.cpp:32 +#, fuzzy +msgid "Unexpected end of string, quotes are not balanced" msgstr "Fin de jeton inattendue" -#: tokenizer.c:35 -msgid "Parenthesis mismatch" -msgstr "Incohérence de parenthèses" +#: tokenizer.cpp:37 +msgid "Unexpected end of string, parenthesis do not match" +msgstr "" -#: tokenizer.c:39 -msgid "Invalid redirection" +#: tokenizer.cpp:42 +msgid "Unexpected end of string, square brackets do not match" +msgstr "" + +#: tokenizer.cpp:48 +#, fuzzy +msgid "Invalid input/output redirection" msgstr "Redirection invalide" -#: tokenizer.c:43 -msgid "Invalid input" -msgstr "Entrée invalide" - -#: tokenizer.c:48 -msgid "Can not use fd 0 as pipe output" +#: tokenizer.cpp:53 +#, fuzzy +msgid "Cannot use stdin (fd 0) as pipe output" msgstr "Impossible d'utiliser fd 0 comme sortie de tube" -#: tokenizer.c:65 +#: tokenizer.cpp:65 msgid "Tokenizer not yet initialized" -msgstr "Analyseur lexical pas encore initialisé" +msgstr "Analyseur lexical pas encore initialisé" -#: tokenizer.c:66 +#: tokenizer.cpp:66 msgid "Tokenizer error" msgstr "Erreur d'analyseur lexical" -#: tokenizer.c:67 -msgid "Invalid token" -msgstr "Jeton invalide" - -#: tokenizer.c:68 +#: tokenizer.cpp:67 msgid "String" -msgstr "Chaîne" +msgstr "Chaîne" -#: tokenizer.c:69 +#: tokenizer.cpp:68 msgid "Pipe" msgstr "Tube" -#: tokenizer.c:70 +#: tokenizer.cpp:69 msgid "End of command" msgstr "Fin de commande" -#: tokenizer.c:71 +#: tokenizer.cpp:70 msgid "Redirect output to file" msgstr "Redirige la sortie vers un fichier" -#: tokenizer.c:72 +#: tokenizer.cpp:71 msgid "Append output to file" -msgstr "Concatène la sortie à un fichier" +msgstr "Concatène la sortie à un fichier" -#: tokenizer.c:73 +#: tokenizer.cpp:72 msgid "Redirect input to file" -msgstr "Redirige l'entrée depuis un fichier" +msgstr "Redirige l'entrée depuis un fichier" -#: tokenizer.c:74 +#: tokenizer.cpp:73 msgid "Redirect to file descriptor" msgstr "Redirige vers un descripteur de fichier" -#: tokenizer.c:75 -msgid "Run job in background" -msgstr "Exécuter la tâche en arrière-plan" +#: tokenizer.cpp:74 +#, fuzzy +msgid "Redirect output to file if file does not exist" +msgstr "Redirige la sortie vers un fichier" -#: tokenizer.c:76 +#: tokenizer.cpp:75 +msgid "Run job in background" +msgstr "Exécuter la tâche en arrière-plan" + +#: tokenizer.cpp:76 msgid "Comment" msgstr "Commentaire" -#: wgetopt.c:539 +#: tokenizer.cpp:602 +#, fuzzy +msgid "Invalid token type" +msgstr "Jeton invalide" + +#: wgetopt.cpp:536 #, c-format msgid "%ls: Option '%ls' is ambiguous\n" -msgstr "%ls: Option '%ls' ambiguë\n" +msgstr "%ls: Option '%ls' ambiguë\n" -#: wgetopt.c:563 +#: wgetopt.cpp:560 #, c-format msgid "%ls: Option '--%ls' doesn't allow an argument\n" msgstr "%ls: L'option '--%ls' ne permet pas d'argument\n" -#: wgetopt.c:568 +#: wgetopt.cpp:565 #, c-format msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" msgstr "%ls: L'option '%lc%ls' ne permet pas d'argument\n" -#: wgetopt.c:582 +#: wgetopt.cpp:579 #, c-format msgid "%ls: Option '%ls' requires an argument\n" msgstr "%ls: L'option '%ls' exige un argument\n" -#: wgetopt.c:610 +#: wgetopt.cpp:607 #, c-format msgid "%ls: Unrecognized option '--%ls'\n" msgstr "%ls: Option '--%ls' non reconnue\n" -#: wgetopt.c:614 +#: wgetopt.cpp:611 #, c-format msgid "%ls: Unrecognized option '%lc%ls'\n" msgstr "%ls: Option '%lc%ls' non reconnue\n" -#: wgetopt.c:639 +#: wgetopt.cpp:636 #, c-format msgid "%ls: Illegal option -- %lc\n" -msgstr "%ls: Option illégale -- %lc\n" +msgstr "%ls: Option illégale -- %lc\n" -#: wgetopt.c:641 +#: wgetopt.cpp:638 #, c-format msgid "%ls: Invalid option -- %lc\n" msgstr "%ls: Option invalide -- %lc\n" -#: wgetopt.c:675 +#: wgetopt.cpp:673 #, c-format msgid "%ls: Option requires an argument -- %lc\n" msgstr "%ls: L'option exige un argument -- %lc\n" -#: wildcard.c:350 -msgid "empty" -msgstr "vide" +#: wildcard.cpp:58 +msgid "Executable" +msgstr "Exécutable" -#: builtin.h:23 +#: wildcard.cpp:62 +msgid "Executable link" +msgstr "Lien exécutable" + +#: wildcard.cpp:67 share/completions/git.fish:146 +msgid "File" +msgstr "Fichier" + +#: wildcard.cpp:71 +msgid "Character device" +msgstr "Périphérique de caractères" + +#: wildcard.cpp:75 +msgid "Block device" +msgstr "Périphérique de blocs" + +#: wildcard.cpp:79 +msgid "Fifo" +msgstr "Fifo" + +#: wildcard.cpp:83 +msgid "Symbolic link" +msgstr "Lien symbolique" + +#: wildcard.cpp:87 +#, fuzzy +msgid "Symbolic link to directory" +msgstr "Boucle de liens symboliques" + +#: wildcard.cpp:91 +msgid "Rotten symbolic link" +msgstr "Lien symbolique brisé" + +#: wildcard.cpp:95 +msgid "Symbolic link loop" +msgstr "Boucle de liens symboliques" + +#: wildcard.cpp:99 +msgid "Socket" +msgstr "Socket" + +#: wildcard.cpp:103 share/completions/ruby.fish:23 +#: share/functions/__fish_complete_directories.fish:8 +msgid "Directory" +msgstr "Répertoire" + +#: builtin.h:27 #, c-format msgid "%ls: Expected argument\n" msgstr "%ls: Argument attendu\n" -#: builtin.h:33 +#: builtin.h:37 #, c-format msgid "" "%ls: Invalid combination of options,\n" @@ -1516,185 +1766,226 @@ msgstr "" "%ls: Combinaison d'options invalide,\n" "%ls\n" -#: builtin.h:38 -#, c-format -msgid "" -"%ls: Variable scope can only be one of universal, global and local\n" -"%ls\n" +#: builtin.h:42 +#, fuzzy, c-format +msgid "%ls: Variable scope can only be one of universal, global and local\n" msgstr "" -"%ls: La portée des variables peut seulement être universelle, globale ou locale\n" +"%ls: La portée des variables peut seulement être universelle, globale ou " +"locale\n" "%ls\n" -#: builtin.h:43 -#, c-format -msgid "" -"%ls: Variable can't be both exported and unexported\n" -"%ls\n" +#: builtin.h:47 +#, fuzzy, c-format +msgid "%ls: Variable can't be both exported and unexported\n" msgstr "" -"%ls: La variable ne peut pas être et exportée et non exportée\n" +"%ls: La variable ne peut pas être et exportée et non exportée\n" "%ls\n" -#: builtin.h:48 +#: builtin.h:52 #, c-format msgid "%ls: Unknown option '%ls'\n" msgstr "%ls: Option '%ls' inconnue\n" -#: builtin.h:53 +#: builtin.h:57 #, c-format -msgid "%ls: Invalid character '%lc' in variable name. Only alphanumerical characters and underscores are valid in a variable name.\n" -msgstr "%ls: caractère '%lc' invalide dans le nom de variable. Seuls les caractères alphanumériques et '_' sont valides dans un nom de variable.\n" +msgid "" +"%ls: Invalid character '%lc' in variable name. Only alphanumerical " +"characters and underscores are valid in a variable name.\n" +msgstr "" +"%ls: caractère '%lc' invalide dans le nom de variable. Seuls les caractères " +"alphanumériques et '_' sont valides dans un nom de variable.\n" -#: builtin.h:58 +#: builtin.h:62 #, c-format msgid "%ls: Variable name can not be the empty string\n" -msgstr "%ls: Le nom de variable ne peut pas être une chaîne vide\n" +msgstr "%ls: Le nom de variable ne peut pas être une chaîne vide\n" -#: builtin.h:63 +#: builtin.h:67 #, c-format msgid "%ls: Second argument must be 'in'\n" -msgstr "%ls: Le second argument doit être 'in'\n" +msgstr "%ls: Le second argument doit être 'in'\n" -#: exec.h:19 -msgid "An error occurred while setting up pipe" -msgstr "Une erreur est survenue lors du paramétrage du tube" - -#: expand.h:118 +#: builtin.h:72 #, c-format -msgid "The '$' character begins a variable name. The character '%lc', which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'." -msgstr "Le caractère '$' commence un nom de variable. Le caractère '%lc', qui suivait un '$', n'est pas permis dans le nom de variable, et les noms de variables ne peuvent pas avoir une taille de 0. Pour en apprendre plus sur le développement de variables dans fish, tapez 'help expand-variable'." +msgid "%ls: Expected at least two arguments, got %d\n" +msgstr "%ls: Au moins deux arguments attendus, %d obtenu\n" -#: expand.h:123 -msgid "The '$' begins a variable name. It was given at the end of an argument. Variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'." -msgstr "Le caractère '$' commence un nom de variable. Il était donné à la fin d'un argument. Les noms de variables ne peuvent pas avoir une taille de 0. Pour en apprendre plus sur le développement de variables dans fish, tapez 'help expand-variable'." +#: builtin.h:74 +#, c-format +msgid "%ls: '%ls' is not a valid variable name\n" +msgstr "%ls: '%ls' est un nom de variable invalide\n" -#: expand.h:128 -msgid "Did you mean {$VARIABLE}? The '$' character begins a variable name. A bracket, which directly followed a '$', is not allowed as a part of a variable name, and variable names may not be zero characters long. To learn more about variable expansion in fish, type 'help expand-variable'." -msgstr "Vouliez-vous dire {$VARIABLE}? Le caractère '$' commence un nom de variable. Un crochet, qui suivait un '$', n'est pas permis dans le nom de variable, et les noms de variables ne peuvent pas avoir une taille de 0. Pour en apprendre plus sur le développement de variables dans fish, tapez 'help expand-variable'." +#: builtin.h:77 +#, c-format +msgid "%ls: can only take 'if' and then another command as an argument\n" +msgstr "" -#: expand.h:133 -msgid "Did you mean (COMMAND)? In fish, the '$' character is only used for accessing variables. To learn more about command substitution in fish, type 'help expand-command-substitution'." -msgstr "Vouliez-vous dire (COMMANDE)? Dans fish, le caractère '$' est seulement utilisé pour accéder à des variables. Pour en apprendre plus sur la substitution de commande dans fish, tapez 'help expand-command-substitution'." +#: builtin.h:78 +#, fuzzy, c-format +msgid "%ls: any second argument must be 'if'\n" +msgstr "%ls: Le second argument doit être 'in'\n" -#: etc/fish_interactive.fish.in:14 -msgid "Welcome to fish, the friendly interactive shell" -msgstr "Bienvenue dans fish, le shell amical et interactif" +#: builtin.h:88 +#, c-format +msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" +msgstr "" -#: etc/fish_interactive.fish.in:15 -msgid "Type %shelp%s for instructions on how to use fish" -msgstr "Tappez %shelp%s pour des instructions sur l'utilisation de fish" +#: builtin.h:93 +#, fuzzy, c-format +msgid "%ls: Unknown block type '%ls'\n" +msgstr "%ls: Tâche inconnue: '%ls'\n" -#: etc/fish_interactive.fish.in:21 -msgid "Commands to execute when fish exits" -msgstr "Commandes à exécuter à la fermeture de fish" +#: builtin.h:95 +#, fuzzy, c-format +msgid "%ls: Argument '%ls' is not a number\n" +msgstr "%ls: L'argument '%ls' doit être un entier\n" -#: etc/fish_interactive.fish.in:22 -msgid "Good bye\\n" -msgstr "Au revoir\\n" +#: exec.h:21 +msgid "An error occurred while setting up pipe" +msgstr "Une erreur est survenue lors du paramétrage du tube" -#: share/fish:22 -msgid "%s: Warning: The directory %s has been removed from your PATH, because it does not exist\\n" -msgstr "%s: Attention: Le répertoire %s a été enlevé de votre variable PATH, parce qu'il n'existe pas\\n" +#: expand.h:132 +msgid "Array index out of bounds" +msgstr "" -#: share/fish:108 -msgid "Start service" -msgstr "Démarrer le service" +#: output.h:91 +#, c-format +msgid "" +"Tried to use terminfo string %s on line %d of %s, which is undefined in " +"terminal of type \"%ls\". Please report this error to %s" +msgstr "" -#: share/fish:109 -msgid "Stop service" -msgstr "Arrêter le service" +#: parse_constants.h:145 +#, c-format +msgid "" +"The function '%ls' calls itself immediately, which would result in an " +"infinite loop." +msgstr "" -#: share/fish:110 -msgid "Print service status" -msgstr "Afficher l'état du service" +#: parse_constants.h:149 +msgid "" +"The function call stack limit has been exceeded. Do you have an accidental " +"infinite loop?" +msgstr "" -#: share/fish:111 -msgid "Stop and then start service" -msgstr "Redémarrer le service" +#: parse_constants.h:152 +#, fuzzy +msgid "" +"Expected a command, but instead found a pipe. Did you mean 'COMMAND; or " +"COMMAND'? See the help section for the 'or' builtin command by typing 'help " +"or'." +msgstr "" +"Un nom de commande était attendu, un jeton de type '%ls' a été obtenu. " +"Vouliez-vous dire 'COMMANDE; or COMMANDE'? Lisez l'aide pour la commande " +"interne 'or' en tapant 'help or'." -#: share/fish:112 -msgid "Reload service configuration" -msgstr "Recharger la configuration du service" +#: parse_constants.h:155 +#, fuzzy +msgid "" +"Expected a command, but instead found a '&'. Did you mean 'COMMAND; and " +"COMMAND'? See the help section for the 'and' builtin command by typing 'help " +"and'." +msgstr "" +"Un nom de commande était attendu, un jeton de type '%ls' a été obtenu. " +"Vouliez-vous dire 'COMMANDE; and COMMANDE'? Lisez l'aide pour la commande " +"interne 'and' en tapant 'help and'." -#: share/completions/apm.fish:2 -#: share/completions/apropos.fish:20 -#: share/completions/apt-build.fish:29 -#: share/completions/apt-cache.fish:28 -#: share/completions/apt-cdrom.fish:11 -#: share/completions/apt-config.fish:5 -#: share/completions/apt-file.fish:12 -#: share/completions/apt-ftparchive.fish:15 -#: share/completions/apt-get.fish:61 +#: parse_constants.h:161 +#, fuzzy, c-format +msgid "Unable to expand variable name '%ls'" +msgstr "%ls: Nom de variable invalide '%ls'\n" + +#: parse_constants.h:170 +#, fuzzy +msgid "break command while not inside of loop" +msgstr "Commande de contrôle de boucle à l'extérieur d'une boucle" + +#: parse_constants.h:173 +#, fuzzy +msgid "continue command while not inside of loop" +msgstr "Commande de contrôle de boucle à l'extérieur d'une boucle" + +#: parse_constants.h:184 +#, c-format +msgid "" +"The '$' character begins a variable name. The character '%lc', which " +"directly followed a '$', is not allowed as a part of a variable name, and " +"variable names may not be zero characters long. To learn more about variable " +"expansion in fish, type 'help expand-variable'." +msgstr "" +"Le caractère '$' commence un nom de variable. Le caractère '%lc', qui " +"suivait un '$', n'est pas permis dans le nom de variable, et les noms de " +"variables ne peuvent pas avoir une taille de 0. Pour en apprendre plus sur " +"le développement de variables dans fish, tapez 'help expand-variable'." + +#: parse_constants.h:189 +msgid "" +"$? is not a valid variable in fish. If you want the exit status of the last " +"command, try $status." +msgstr "" + +#: parse_constants.h:194 +msgid "" +"The '$' begins a variable name. It was given at the end of an argument. " +"Variable names may not be zero characters long. To learn more about variable " +"expansion in fish, type 'help expand-variable'." +msgstr "" +"Le caractère '$' commence un nom de variable. Il était donné à la fin d'un " +"argument. Les noms de variables ne peuvent pas avoir une taille de 0. Pour " +"en apprendre plus sur le développement de variables dans fish, tapez 'help " +"expand-variable'." + +#: parse_constants.h:199 +#, fuzzy, c-format +msgid "" +"Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A " +"bracket, which directly followed a '$', is not allowed as a part of a " +"variable name, and variable names may not be zero characters long. To learn " +"more about variable expansion in fish, type 'help expand-variable'." +msgstr "" +"Vouliez-vous dire {$VARIABLE}? Le caractère '$' commence un nom de variable. " +"Un crochet, qui suivait un '$', n'est pas permis dans le nom de variable, " +"et les noms de variables ne peuvent pas avoir une taille de 0. Pour en " +"apprendre plus sur le développement de variables dans fish, tapez 'help " +"expand-variable'." + +#: parse_constants.h:204 +msgid "" +"Did you mean (COMMAND)? In fish, the '$' character is only used for " +"accessing variables. To learn more about command substitution in fish, type " +"'help expand-command-substitution'." +msgstr "" +"Vouliez-vous dire (COMMANDE)? Dans fish, le caractère '$' est seulement " +"utilisé pour accéder à des variables. Pour en apprendre plus sur la " +"substitution de commande dans fish, tapez 'help expand-command-substitution'." + +#: share/completions/adb.fish:3 +#, fuzzy +msgid "Test if adb has yet to be given the subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" + +#: share/completions/adb.fish:12 +msgid "Run adb devices and parse output" +msgstr "" + +#: share/completions/adb.fish:24 +msgid "Runs adb with any -s parameters already given on the command line" +msgstr "" + +#: share/completions/apm.fish:2 share/completions/apropos.fish:20 +#: share/completions/apt-build.fish:29 share/completions/apt-cache.fish:28 +#: share/completions/apt-cdrom.fish:11 share/completions/apt-config.fish:5 +#: share/completions/apt-file.fish:12 share/completions/apt-ftparchive.fish:15 #: share/completions/apt-proxy-import.fish:3 #: share/completions/apt-rdepends.fish:12 #: share/completions/apt-show-source.fish:8 -#: share/completions/apt-sortpkgs.fish:4 -#: share/completions/apt-zip-inst.fish:3 -#: share/completions/apt-zip-list.fish:3 -#: share/completions/at.fish:2 -#: share/completions/atq.fish:2 -#: share/completions/atrm.fish:2 -#: share/completions/bc.fish:8 -#: share/completions/bunzip2.fish:15 -#: share/completions/bzip2.fish:17 -#: share/completions/cat.fish:11 -#: share/completions/cdrecord.fish:5 -#: share/completions/chgrp.fish:11 -#: share/completions/chown.fish:10 -#: share/completions/configure.fish:2 -#: share/completions/cut.fish:9 -#: share/completions/cvs.fish:51 -#: share/completions/cvs.fish:73 -#: share/completions/date.fish:10 -#: share/completions/df.fish:29 -#: share/completions/diff.fish:25 -#: share/completions/du.fish:19 -#: share/completions/echo.fish:5 -#: share/completions/fish.fish:3 -#: share/completions/fusermount.fish:14 -#: share/completions/gprof.fish:32 -#: share/completions/grep.fish:43 -#: share/completions/gunzip.fish:18 -#: share/completions/gzip.fish:20 -#: share/completions/id.fish:7 -#: share/completions/less.fish:41 -#: share/completions/make.fish:26 -#: share/completions/mimedb.fish:9 -#: share/completions/modprobe.fish:14 -#: share/completions/mount.fish:8 -#: share/completions/mplayer.fish:83 -#: share/completions/mv.fish:11 -#: share/completions/nice.fish:4 -#: share/completions/patch.fish:34 -#: share/completions/perl.fish:18 -#: share/completions/ping.fish:27 -#: share/completions/ps.fish:34 -#: share/completions/python.fish:12 -#: share/completions/rm.fish:9 -#: share/completions/rmdir.fish:7 -#: share/completions/rpm.fish:5 -#: share/completions/ruby.fish:21 -#: share/completions/sed.fish:28 -#: share/completions/sort.fish:20 -#: share/completions/sshfs.fish:24 -#: share/completions/su.fish:11 -#: share/completions/tar.fish:51 -#: share/completions/test.fish:3 -#: share/completions/time.fish:10 -#: share/completions/top.fish:13 -#: share/completions/touch.fish:11 -#: share/completions/umount.fish:10 -#: share/completions/uname.fish:11 -#: share/completions/uniq.fish:14 -#: share/completions/valgrind.fish:26 -#: share/completions/w.fish:5 -#: share/completions/wc.fish:7 -#: share/completions/wget.fish:5 -#: share/completions/who.fish:19 -#: share/completions/xargs.fish:18 -#: share/completions/xsel.fish:18 -#: share/completions/yum.fish:54 -#: share/completions/zcat.fish:9 -#: share/functions/__fish_complete_ls.fish:91 +#: share/completions/apt-sortpkgs.fish:4 share/completions/apt-zip-inst.fish:3 +#: share/completions/apt-zip-list.fish:3 share/completions/at.fish:2 +#: share/completions/atq.fish:2 share/completions/atrm.fish:2 +#: share/completions/perl.fish:41 share/functions/__fish_complete_diff.fish:26 +#: share/functions/__fish_complete_grep.fish:44 +#: share/functions/__fish_complete_ls.fish:96 +#: share/functions/__fish_complete_python.fish:15 #: share/functions/__fish_complete_tex.fish:5 msgid "Display version and exit" msgstr "Afficher la version et quitter" @@ -1709,7 +2000,7 @@ msgstr "Afficher le temps restant" #: share/completions/apm.fish:5 msgid "Monitor status info" -msgstr "Surveiller l'info sur l'état" +msgstr "Surveiller l'info sur l'état" #: share/completions/apm.fish:6 msgid "Request APM standby mode" @@ -1721,159 +2012,45 @@ msgstr "Demande de suspension APM" #: share/completions/apm.fish:8 msgid "APM status debugging info" -msgstr "Information de débogage de l'état APM" - -#: share/completions/apropos.fish:9 -msgid "whatis entry" -msgstr "whatis entry" - -#: share/completions/apropos.fish:11 -#: share/completions/apt-build.fish:3 -#: share/completions/apt-cache.fish:2 -#: share/completions/apt-cdrom.fish:2 -#: share/completions/apt-config.fish:2 -#: share/completions/apt-extracttemplates.fish:3 -#: share/completions/apt-file.fish:2 -#: share/completions/apt-ftparchive.fish:2 -#: share/completions/apt-get.fish:23 -#: share/completions/apt-listbugs.fish:2 -#: share/completions/apt-listchanges.fish:2 -#: share/completions/apt-proxy-import.fish:2 -#: share/completions/apt-rdepends.fish:2 -#: share/completions/apt-show-source.fish:2 -#: share/completions/apt-show-versions.fish:2 -#: share/completions/apt-sortpkgs.fish:2 -#: share/completions/apt-spy.fish:2 -#: share/completions/apt-src.fish:2 -#: share/completions/apt-zip-inst.fish:2 -#: share/completions/apt-zip-list.fish:2 -#: share/completions/bc.fish:9 -#: share/completions/cat.fish:10 -#: share/completions/chgrp.fish:10 -#: share/completions/chown.fish:9 -#: share/completions/complete.fish:13 -#: share/completions/configure.fish:1 -#: share/completions/cut.fish:8 -#: share/completions/date.fish:9 -#: share/completions/df.fish:28 -#: share/completions/diff.fish:26 -#: share/completions/du.fish:18 -#: share/completions/echo.fish:4 -#: share/completions/emerge.fish:30 -#: share/completions/fish.fish:2 -#: share/completions/functions.fish:4 -#: share/completions/fusermount.fish:13 -#: share/completions/gpg.fish:108 -#: share/completions/gprof.fish:31 -#: share/completions/grep.fish:23 -#: share/completions/gunzip.fish:8 -#: share/completions/gzip.fish:10 -#: share/completions/id.fish:6 -#: share/completions/less.fish:1 -#: share/completions/man.fish:28 -#: share/completions/mimedb.fish:8 -#: share/completions/mount.fish:9 -#: share/completions/mplayer.fish:30 -#: share/completions/mplayer.fish:35 -#: share/completions/mplayer.fish:82 -#: share/completions/mv.fish:10 -#: share/completions/nice.fish:3 -#: share/completions/patch.fish:19 -#: share/completions/pine.fish:3 -#: share/completions/ps.fish:35 -#: share/completions/python.fish:4 -#: share/completions/read.fish:1 -#: share/completions/rm.fish:8 -#: share/completions/rmdir.fish:6 -#: share/completions/rpm.fish:4 -#: share/completions/ruby.fish:8 -#: share/completions/sed.fish:27 -#: share/completions/set.fish:65 -#: share/completions/sort.fish:19 -#: share/completions/sshfs.fish:32 -#: share/completions/su.fish:10 -#: share/completions/sudo.fish:7 -#: share/completions/test.fish:2 -#: share/completions/time.fish:9 -#: share/completions/top.fish:5 -#: share/completions/touch.fish:10 -#: share/completions/trap.fish:4 -#: share/completions/type.fish:2 -#: share/completions/ulimit.fish:13 -#: share/completions/umount.fish:11 -#: share/completions/uname.fish:10 -#: share/completions/uniq.fish:13 -#: share/completions/valgrind.fish:24 -#: share/completions/vared.fish:2 -#: share/completions/wc.fish:6 -#: share/completions/wget.fish:6 -#: share/completions/who.fish:18 -#: share/completions/xargs.fish:8 -#: share/completions/xprop.fish:2 -#: share/completions/xsel.fish:16 -#: share/completions/yum.fish:46 -#: share/completions/zcat.fish:7 -#: share/completions/zip.fish:31 -#: share/functions/__fish_complete_ls.fish:90 -#: share/functions/__fish_complete_tex.fish:4 -msgid "Display help and exit" -msgstr "Afficher l'aide et quitter" +msgstr "Information de débogage de l'état APM" #: share/completions/apropos.fish:12 msgid "Print debugging info" -msgstr "Afficher les infos de débogage" +msgstr "Afficher les infos de débogage" -#: share/completions/apropos.fish:13 -#: share/completions/apt-file.fish:8 +#: share/completions/apropos.fish:13 share/completions/apt-file.fish:8 #: share/completions/apt-listchanges.fish:4 #: share/completions/apt-proxy-import.fish:4 #: share/completions/apt-show-source.fish:10 -#: share/completions/arp.fish:2 -#: share/completions/darcs.fish:64 -#: share/completions/darcs.fish:144 -#: share/completions/darcs.fish:155 -#: share/completions/darcs.fish:160 -#: share/completions/makedepend.fish:11 -#: share/completions/mount.fish:10 -#: share/completions/mv.fish:9 -#: share/completions/ping.fish:26 -#: share/completions/python.fish:11 -#: share/completions/rmdir.fish:5 -#: share/completions/rpm.fish:7 -#: share/completions/ruby.fish:19 -#: share/completions/tar.fish:49 -#: share/completions/time.fish:8 -#: share/completions/umount.fish:12 -#: share/completions/valgrind.fish:28 -#: share/completions/wget.fish:13 -#: share/completions/zip.fish:14 +#: share/functions/__fish_complete_python.fish:14 #: share/functions/__fish_complete_ssh.fish:59 +#: share/functions/__fish_complete_vi.fish:98 msgid "Verbose mode" -msgstr "Mode détaillé" +msgstr "Mode détaillé" #: share/completions/apropos.fish:14 msgid "Keyword as regex" -msgstr "Mot clé comme regex" +msgstr "Mot clé comme regex" #: share/completions/apropos.fish:15 msgid "Keyword as wildcards" -msgstr "Mot clé comme expression générique" +msgstr "Mot clé comme expression générique" #: share/completions/apropos.fish:16 msgid "Keyword as exactly match" -msgstr "Mot clé comme correspondance exacte" +msgstr "Mot clé comme correspondance exacte" #: share/completions/apropos.fish:17 msgid "Search for other system" -msgstr "Rechercher un autre système" +msgstr "Rechercher un autre système" #: share/completions/apropos.fish:18 msgid "Specify man path" -msgstr "Spécifier la variable MANPATH" +msgstr "Spécifier la variable MANPATH" #: share/completions/apropos.fish:19 msgid "Specify a configuration file" -msgstr "Spécifier un fichier de configuration" +msgstr "Spécifier un fichier de configuration" #: share/completions/apt-build.fish:4 msgid "Update list of packages" @@ -1881,11 +2058,11 @@ msgstr "Actualiser la liste des paquets" #: share/completions/apt-build.fish:5 msgid "Upgrade packages" -msgstr "Mettre à niveau les paquets" +msgstr "Mettre à niveau les paquets" #: share/completions/apt-build.fish:6 msgid "Rebuild your system" -msgstr "Reconstruire votre système" +msgstr "Reconstruire votre système" #: share/completions/apt-build.fish:7 msgid "Build and install a new package" @@ -1893,13 +2070,13 @@ msgstr "Construire et installer un nouveau paquet" #: share/completions/apt-build.fish:8 msgid "Download and extract a source" -msgstr "Télécharger et extraire une source" +msgstr "Télécharger et extraire une source" #: share/completions/apt-build.fish:9 msgid "Info on a package" msgstr "Info sur un paquet" -#: share/completions/apt-build.fish:10 +#: share/completions/apt-build.fish:10 share/completions/zypper.fish:45 msgid "Remove packages" msgstr "Supprime les paquet" @@ -1913,15 +2090,15 @@ msgstr "Construire sans installer" #: share/completions/apt-build.fish:13 msgid "Clean source directories" -msgstr "Nettoyer les répertoires source" +msgstr "Nettoyer les répertoires source" #: share/completions/apt-build.fish:14 msgid "Update source and rebuild" -msgstr "Mettre à jour la source et reconstruire" +msgstr "Mettre à jour la source et reconstruire" #: share/completions/apt-build.fish:15 msgid "Update the repository" -msgstr "Mettre à jour le référentiel" +msgstr "Mettre à jour le référentiel" #: share/completions/apt-build.fish:16 msgid "Do not use gcc wrapper" @@ -1929,15 +2106,15 @@ msgstr "Ne pas utiliser le l'enveloppe gcc" #: share/completions/apt-build.fish:17 msgid "Remove build-dep" -msgstr "Supprimer les dépendance de construction" +msgstr "Supprimer les dépendance de construction" #: share/completions/apt-build.fish:18 msgid "Do not download source" -msgstr "Ne pas télécharger la source" +msgstr "Ne pas télécharger la source" #: share/completions/apt-build.fish:19 msgid "Specify build-dir" -msgstr "Spécifier le répertoire de construction" +msgstr "Spécifier le répertoire de construction" #: share/completions/apt-build.fish:20 msgid "Rebuild a package" @@ -1945,38 +2122,15 @@ msgstr "Reconstruire un paquet" #: share/completions/apt-build.fish:21 msgid "Rebuild and install an installed package" -msgstr "Reconstruire et installer un paquet installé" - -#: share/completions/apt-build.fish:22 -msgid "Use to build" -msgstr "Utiliser pour construire" +msgstr "Reconstruire et installer un paquet installé" #: share/completions/apt-build.fish:23 msgid "Apply patch" msgstr "Appliquer la patch " -#: share/completions/apt-build.fish:24 -msgid "Prefix to strip on patch" -msgstr "Préfixe à sauter dans la patch" - -#: share/completions/apt-build.fish:25 -#: share/completions/apt-listbugs.fish:21 -#: share/completions/yum.fish:47 -msgid "Assume yes to all questions" -msgstr "Assumer oui à toutes les questions" - -#: share/completions/apt-build.fish:26 -#: share/completions/apt-get.fish:50 -msgid "Use purge instead of remove" -msgstr "Purger au lieu de supprimer" - -#: share/completions/apt-build.fish:27 -msgid "Do not run update" -msgstr "Ne pas lancer de mise à jour" - #: share/completions/apt-build.fish:28 msgid "Specify sources.list file" -msgstr "Spécifier un fichier sources.list" +msgstr "Spécifier un fichier sources.list" #: share/completions/apt-cache.fish:3 msgid "Build apt cache" @@ -2004,7 +2158,7 @@ msgstr "Afficher la liste disponible" #: share/completions/apt-cache.fish:9 msgid "List unmet dependencies in cache" -msgstr "Lister les dépendances non satisfaites de la cache" +msgstr "Lister les dépendances non satisfaites de la cache" #: share/completions/apt-cache.fish:10 msgid "Display package record" @@ -2014,33 +2168,29 @@ msgstr "Afficher la fiche du paquet" msgid "Search packagename by REGEX" msgstr "Chercher un nom de paquet par REGEX" -#: share/completions/apt-cache.fish:12 -msgid "Search full package name" -msgstr "Chercher le nom complet de paquet" - #: share/completions/apt-cache.fish:13 msgid "Search packagename only" msgstr "Chercher le nom du paquet seulement" #: share/completions/apt-cache.fish:14 msgid "List dependencies for the package" -msgstr "Lister les dépendances du paquet" +msgstr "Lister les dépendances du paquet" #: share/completions/apt-cache.fish:15 msgid "List reverse dependencies for the package" -msgstr "Lister les dépendances inverses du paquet" +msgstr "Lister les dépendances inverses du paquet" #: share/completions/apt-cache.fish:16 msgid "Print package name by prefix" -msgstr "Afficher le nom du paquet par préfixe" +msgstr "Afficher le nom du paquet par préfixe" #: share/completions/apt-cache.fish:17 msgid "Generate dotty output for packages" -msgstr "Générer la sortie dotty pour les paquets" +msgstr "Générer la sortie dotty pour les paquets" #: share/completions/apt-cache.fish:18 msgid "Debug preferences file" -msgstr "Déboguer le fichier de préférences" +msgstr "Déboguer le fichier de préférences" #: share/completions/apt-cache.fish:19 msgid "Select file to store package cache" @@ -2052,30 +2202,20 @@ msgstr "Choisir le fichier de cache des sources" #: share/completions/apt-cache.fish:21 #: share/completions/apt-ftparchive.fish:10 -#: share/completions/apt-get.fish:39 -#: share/completions/configure.fish:3 -#: share/completions/gpg.fish:130 -#: share/completions/make.fish:23 -#: share/completions/ping.fish:17 -#: share/completions/rpm.fish:6 -#: share/completions/ssh.fish:37 -#: share/completions/valgrind.fish:27 -#: share/completions/wget.fish:12 -#: share/completions/zip.fish:13 msgid "Quiet mode" msgstr "Mode silencieux" #: share/completions/apt-cache.fish:22 msgid "Print important dependencies" -msgstr "Afficher les dépendances importantes" +msgstr "Afficher les dépendances importantes" #: share/completions/apt-cache.fish:23 msgid "Print full records" -msgstr "Afficher les fiches complètes" +msgstr "Afficher les fiches complètes" #: share/completions/apt-cache.fish:24 msgid "Auto-gen package cache" -msgstr "Générer automatiquement la cache des paquets" +msgstr "Générer automatiquement la cache des paquets" #: share/completions/apt-cache.fish:25 msgid "Print all names" @@ -2083,39 +2223,39 @@ msgstr "Afficher tous les noms" #: share/completions/apt-cache.fish:26 msgid "Dep and rdep recursive" -msgstr "Dépendances récursives" +msgstr "Dépendances récursives" #: share/completions/apt-cache.fish:27 msgid "Limit to installed" -msgstr "Limiter aux installés" +msgstr "Limiter aux installés" -#: share/completions/apt-cache.fish:29 -#: share/completions/apt-cdrom.fish:12 +#: share/completions/apt-cache.fish:29 share/completions/apt-cdrom.fish:12 #: share/completions/apt-config.fish:6 msgid "Specify config file" -msgstr "Spécifier le fichier de config" +msgstr "Spécifier le fichier de config" -#: share/completions/apt-cache.fish:30 -#: share/completions/apt-cdrom.fish:13 +#: share/completions/apt-cache.fish:30 share/completions/apt-cdrom.fish:13 #: share/completions/apt-config.fish:7 #: share/completions/apt-extracttemplates.fish:6 -#: share/completions/apt-zip-list.fish:10 msgid "Specify options" -msgstr "Spécifier les options" +msgstr "Spécifier les options" + +#: share/completions/apt-cache.fish:32 share/completions/apt-get.fish:12 +#: share/completions/apt-mark.fish:12 +msgid "Test if apt command should have packages as potential completion" +msgstr "" +"Tester si la commande apt devrait avoir les paquets comme complétion " +"potentielle" #: share/completions/apt-cdrom.fish:3 msgid "Add new disc to source list" -msgstr "Ajouter un nouveau disque à la liste des sources" +msgstr "Ajouter un nouveau disque à la liste des sources" #: share/completions/apt-cdrom.fish:4 msgid "Report identity of disc" -msgstr "Rapporter l'identité du disque" +msgstr "Rapporter l'identité du disque" -#: share/completions/apt-cdrom.fish:5 -#: share/completions/fusermount.fish:6 -#: share/completions/mount.fish:7 -#: share/completions/sshfs.fish:20 -#: share/completions/umount.fish:8 +#: share/completions/apt-cdrom.fish:5 share/completions/mount.fish:7 msgid "Mount point" msgstr "Point de montage" @@ -2139,21 +2279,17 @@ msgstr "Examination profonde des paquets" msgid "No changes" msgstr "Pas de changements" -#: share/completions/apt-config.fish:3 -msgid "Access config file from shell" -msgstr "Accéder au fichier de config à partir du shell" - #: share/completions/apt-config.fish:4 msgid "Dump contents of config file" msgstr "Afficher le contenu du fichier de config" #: share/completions/apt-extracttemplates.fish:4 msgid "Set temp dir" -msgstr "Définir le répertoire temporaire" +msgstr "Définir le répertoire temporaire" #: share/completions/apt-extracttemplates.fish:5 msgid "Specifiy config file" -msgstr "Spécifier le fichier de configuration" +msgstr "Spécifier le fichier de configuration" #: share/completions/apt-file.fish:3 msgid "Resync package contents from source" @@ -2173,16 +2309,11 @@ msgstr "Supprimer tous les fichiers gz de la cache" #: share/completions/apt-file.fish:7 msgid "Set cache dir" -msgstr "Définir le répertoire cache" +msgstr "Définir le répertoire cache" -#: share/completions/apt-file.fish:9 -msgid "Use cdrom-mount-point" -msgstr "Utiliser le point de montage du cdrom" - -#: share/completions/apt-file.fish:10 -#: share/completions/apt-file.fish:16 +#: share/completions/apt-file.fish:10 share/completions/apt-file.fish:16 msgid "Do not expand pattern" -msgstr "Ne pas développer le motif" +msgstr "Ne pas développer le motif" #: share/completions/apt-file.fish:11 msgid "Pattern is regexp" @@ -2190,11 +2321,11 @@ msgstr "Le motif est une regexp" #: share/completions/apt-file.fish:13 msgid "Set arch" -msgstr "Définir l'architecture" +msgstr "Définir l'architecture" #: share/completions/apt-file.fish:14 msgid "Set sources.list file" -msgstr "Définir le fichier sources.list" +msgstr "Définir le fichier sources.list" #: share/completions/apt-file.fish:15 msgid "Only display package name" @@ -2202,23 +2333,23 @@ msgstr "Afficher seulement le nom du paquet" #: share/completions/apt-file.fish:17 msgid "Run in dummy mode" -msgstr "Exécuter en mode fictif" +msgstr "Exécuter en mode fictif" #: share/completions/apt-ftparchive.fish:3 msgid "Generate package from source" -msgstr "Générer le paquet depuis la source" +msgstr "Générer le paquet depuis la source" #: share/completions/apt-ftparchive.fish:4 msgid "Generate source index file" -msgstr "Générer le fichier d'index source" +msgstr "Générer le fichier d'index source" #: share/completions/apt-ftparchive.fish:5 msgid "Generate contents file" -msgstr "Générer le fichier de contenu" +msgstr "Générer le fichier de contenu" #: share/completions/apt-ftparchive.fish:6 msgid "Generate release file" -msgstr "Générer le fichier de version" +msgstr "Générer le fichier de version" #: share/completions/apt-ftparchive.fish:7 msgid "Remove records" @@ -2226,23 +2357,19 @@ msgstr "Nettoyer les fiches" #: share/completions/apt-ftparchive.fish:8 msgid "Generate MD5 sums" -msgstr "Générer la somme MD5" +msgstr "Générer la somme MD5" #: share/completions/apt-ftparchive.fish:9 msgid "Use a binary db" -msgstr "Utiliser une base de données binaire" +msgstr "Utiliser une base de données binaire" #: share/completions/apt-ftparchive.fish:11 msgid "Perform delinking" -msgstr "Défaire les liens" +msgstr "Défaire les liens" #: share/completions/apt-ftparchive.fish:12 msgid "Perform contents generation" -msgstr "Générer le contenu" - -#: share/completions/apt-ftparchive.fish:13 -msgid "Use source override" -msgstr "" +msgstr "Générer le contenu" #: share/completions/apt-ftparchive.fish:14 msgid "Make caching db readonly" @@ -2253,32 +2380,20 @@ msgid "Use config file" msgstr "Utiliser le fichier de config" #: share/completions/apt-ftparchive.fish:17 -#: share/completions/apt-sortpkgs.fish:6 msgid "Set config options" -msgstr "Définir les options de config" +msgstr "Définir les options de config" -#: share/completions/apt-get.fish:3 +#: share/completions/apt-get.fish:3 share/completions/apt-mark.fish:3 msgid "Test if apt has yet to be given the subcommand" msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/apt-get.fish:12 -msgid "Test if apt command should have packages as potential completion" -msgstr "Tester si la commande apt devrait avoir les paquets comme complétion potentielle" - -#: share/completions/apt-get.fish:21 -#: share/completions/emerge.fish:28 -#: share/completions/emerge.fish:29 -#: share/functions/__fish_print_packages.fish:13 -msgid "Package" -msgstr "Paquet" - #: share/completions/apt-get.fish:24 msgid "Update sources" msgstr "Actualiser les sources" #: share/completions/apt-get.fish:25 msgid "Upgrade or install newest packages" -msgstr "Mettre à niveau ou installer les plus nouveaux paquets" +msgstr "Mettre à niveau ou installer les plus nouveaux paquets" #: share/completions/apt-get.fish:26 msgid "Use with dselect front-end" @@ -2286,164 +2401,81 @@ msgstr "Utiliser dselect" #: share/completions/apt-get.fish:27 msgid "Distro upgrade" -msgstr "Mise à niveau de la distro" +msgstr "Mise à niveau de la distro" #: share/completions/apt-get.fish:28 msgid "Install one or more packages" msgstr "Installer un ou des paquets" #: share/completions/apt-get.fish:29 -msgid "Remove one or more packages" +#, fuzzy +msgid "Remove and purge one or more packages" msgstr "Supprimer un ou des paquets" #: share/completions/apt-get.fish:30 -msgid "Fetch source packages" -msgstr "Récupérer les paquets sources" +msgid "Remove one or more packages" +msgstr "Supprimer un ou des paquets" #: share/completions/apt-get.fish:31 -msgid "Install/remove packages for dependencies" -msgstr "Installer/supprimer les dépendances de construction" +msgid "Fetch source packages" +msgstr "Récupérer les paquets sources" #: share/completions/apt-get.fish:32 -msgid "Update cache and check dependencies" -msgstr "Mettre à jour la cache et vérifier les dépendances" +msgid "Install/remove packages for dependencies" +msgstr "Installer/supprimer les dépendances de construction" #: share/completions/apt-get.fish:33 +msgid "Update cache and check dependencies" +msgstr "Mettre à jour la cache et vérifier les dépendances" + +#: share/completions/apt-get.fish:34 msgid "Clean local caches and packages" msgstr "Nettoyer les paquets locaux" -#: share/completions/apt-get.fish:34 -msgid "Clean packages no longer be downloaded" -msgstr "Nettoyer les paquets ne pouvant plus être téléchargés" - #: share/completions/apt-get.fish:35 -msgid "Download Only" -msgstr "Télécharger seulement" +msgid "Clean packages no longer be downloaded" +msgstr "Nettoyer les paquets ne pouvant plus être téléchargés" #: share/completions/apt-get.fish:36 -msgid "Correct broken dependencies" -msgstr "Corriger les dépendances brisées" +#, fuzzy +msgid "Remove automatically installed packages" +msgstr "Reconstruire et installer un paquet installé" -#: share/completions/apt-get.fish:37 -msgid "Ignore missing packages" -msgstr "Ignorer les paquets manquants" - -#: share/completions/apt-get.fish:38 -msgid "Disable downloading packages" -msgstr "Désactiver le téléchargement de paquets" - -#: share/completions/apt-get.fish:40 -msgid "Perform a simulation" -msgstr "Simuler" - -#: share/completions/apt-get.fish:41 -msgid "Automatic yes to prompts" -msgstr "Assumer Oui aux questions" - -#: share/completions/apt-get.fish:42 -msgid "Show upgraded packages" -msgstr "Afficher les paquets mis à niveau" - -#: share/completions/apt-get.fish:43 -msgid "Show full versions for packages" -msgstr "Afficher les versions complètes pour les paquets" - -#: share/completions/apt-get.fish:44 -#: share/completions/apt-get.fish:45 -msgid "Compile source packages" -msgstr "Compiler les paquets source" - -#: share/completions/apt-get.fish:46 -msgid "Ignore package Holds" -msgstr "" - -#: share/completions/apt-get.fish:47 -msgid "Do not upgrade packages" -msgstr "Aucune mise à niveau" - -#: share/completions/apt-get.fish:48 -msgid "Force yes" -msgstr "Forcer oui" - -#: share/completions/apt-get.fish:49 -msgid "Print the URIs" -msgstr "Afficher les URIs" - -#: share/completions/apt-get.fish:51 -msgid "Reinstall packages" -msgstr "Réinstaller les paquets" - -#: share/completions/apt-get.fish:52 -msgid "Erase obsolete files" -msgstr "Effacer les fichiers obsolètes" - -#: share/completions/apt-get.fish:53 -msgid "Control default input to the policy engine" -msgstr "Choisir la version" - -#: share/completions/apt-get.fish:54 -msgid "Only perform operations that are trivial" -msgstr "Effectuer seulement les opérations triviales" - -#: share/completions/apt-get.fish:55 -msgid "Abort if any packages are to be removed" -msgstr "Abandonner si un paquet doit être enlevé" - -#: share/completions/apt-get.fish:56 -msgid "Only accept source packages" -msgstr "Seulement accepter les paquets source" - -#: share/completions/apt-get.fish:57 -msgid "Download only diff file" -msgstr "Télécharger seulement le fichier diff" - -#: share/completions/apt-get.fish:58 -msgid "Download only tar file" -msgstr "Télécharger seulement le fichier tar" - -#: share/completions/apt-get.fish:59 -msgid "Only process arch-dependant build-dependencies" -msgstr "Traiter seulement les dépendances de construction dépendantes de l'architecture" - -#: share/completions/apt-get.fish:60 -msgid "Ignore non-authenticated packages" -msgstr "Ignorer les paquets non-authentifiés" - -#: share/completions/apt-get.fish:62 +#: share/completions/apt-get.fish:65 share/completions/apt-mark.fish:32 msgid "Specify a config file" -msgstr "Spécifier un fichier de config" +msgstr "Spécifier un fichier de config" -#: share/completions/apt-get.fish:63 +#: share/completions/apt-get.fish:66 share/completions/apt-mark.fish:33 msgid "Set a config option" -msgstr "Définir une option de config" +msgstr "Définir une option de config" #: share/completions/apt-key.fish:2 msgid "Add a new key" -msgstr "Ajouter une nouvelle clé" +msgstr "Ajouter une nouvelle clé" #: share/completions/apt-key.fish:3 msgid "Remove a key" -msgstr "Supprimer une clé" +msgstr "Supprimer une clé" #: share/completions/apt-key.fish:4 msgid "List trusted keys" -msgstr "Lister les clés de confiance" +msgstr "Lister les clés de confiance" #: share/completions/apt-listbugs.fish:3 msgid "Set severity" -msgstr "Définir la sévérité" +msgstr "Définir la sévérité" #: share/completions/apt-listbugs.fish:4 msgid "Tags you want to see" -msgstr "Balises à afficher" +msgstr "Balises à afficher" #: share/completions/apt-listbugs.fish:5 msgid "Bug-status you want to see" -msgstr "État de bogue à afficher" +msgstr "État de bogue à afficher" #: share/completions/apt-listbugs.fish:6 msgid "Ignore bugs in your system" -msgstr "Ignorer les bogues dans votre système" +msgstr "Ignorer les bogues dans votre système" #: share/completions/apt-listbugs.fish:7 msgid "Ignore newer bugs than upgrade packages" @@ -2455,11 +2487,11 @@ msgstr "" #: share/completions/apt-listbugs.fish:9 msgid "Bug Tracking system" -msgstr "Système de suivi des bogues" +msgstr "Système de suivi des bogues" #: share/completions/apt-listbugs.fish:10 msgid "Specify port for web interface" -msgstr "Spécifier le port pour l'interface web" +msgstr "Spécifier le port pour l'interface web" #: share/completions/apt-listbugs.fish:11 msgid "Use daily bug report" @@ -2471,7 +2503,7 @@ msgstr "Utiliser le fichier index.db" #: share/completions/apt-listbugs.fish:13 msgid "Specify index dir" -msgstr "Spécifier le rep. d'index" +msgstr "Spécifier le rep. d'index" #: share/completions/apt-listbugs.fish:14 msgid "Specify Pin-Priority value" @@ -2479,53 +2511,35 @@ msgstr "" #: share/completions/apt-listbugs.fish:15 msgid "Specify the title of rss" -msgstr "Spécifier le titre du rss" +msgstr "Spécifier le titre du rss" #: share/completions/apt-listbugs.fish:16 msgid "Retrieve fresh bugs" -msgstr "Récupérer les nouveaux bogues" +msgstr "Récupérer les nouveaux bogues" #: share/completions/apt-listbugs.fish:17 -#: share/completions/scp.fish:32 msgid "Do not display progress bar" msgstr "Ne pas afficher la barre de progression" #: share/completions/apt-listbugs.fish:18 msgid "Specify local cache dir" -msgstr "Spécifier un rep. de cache local" +msgstr "Spécifier un rep. de cache local" #: share/completions/apt-listbugs.fish:19 msgid "Specify the expire cache timer" -msgstr "Spécifier l'expiration de la cache" +msgstr "Spécifier l'expiration de la cache" -#: share/completions/apt-listbugs.fish:20 -msgid "Specify apt config file" -msgstr "Spécifier le fichier de config d'APT" +#: share/completions/apt-listbugs.fish:21 +msgid "Assume yes to all questions" +msgstr "Assumer oui à toutes les questions" #: share/completions/apt-listbugs.fish:22 msgid "Assume no to all questions" -msgstr "Assumer non comme réponse" - -#: share/completions/apt-listbugs.fish:23 -msgid "List bugs from packages" -msgstr "Lister les bogues des paquets" - -#: share/completions/apt-listbugs.fish:24 -msgid "List bugs in rss format" -msgstr "Lister les bogues au format rss" - -#: share/completions/apt-listchanges.fish:3 -msgid "Read filenames from pipe" -msgstr "Lire les noms de fichier depuis un tube" +msgstr "Assumer non comme réponse" #: share/completions/apt-listchanges.fish:5 msgid "Select frontend interface" -msgstr "Choisir l'interface de façade" - -#: share/completions/apt-listchanges.fish:6 -#: share/completions/darcs.fish:171 -msgid "Specify email address" -msgstr "Spécifier l'adresse de courriel" +msgstr "Choisir l'interface de façade" #: share/completions/apt-listchanges.fish:7 msgid "Ask confirmation" @@ -2539,38 +2553,64 @@ msgstr "Afficher tous les journaux des modifications" msgid "Avoid changelogs from db in named file" msgstr "" -#: share/completions/apt-listchanges.fish:10 -msgid "Select display" -msgstr "Choisir l'affichage" - #: share/completions/apt-listchanges.fish:11 msgid "Insert header" -msgstr "Insérer l'en-tête" +msgstr "Insérer l'en-tête" #: share/completions/apt-listchanges.fish:12 -#: share/completions/ps.fish:36 msgid "Display debug info" -msgstr "Afficher les infos de débogage" +msgstr "Afficher les infos de débogage" #: share/completions/apt-listchanges.fish:13 msgid "Select an option profile" msgstr "Choisir un profile d'option" -#: share/completions/apt-move.fish:2 -msgid "Generate master file" -msgstr "Générer un fichier maître" +#: share/completions/apt-mark.fish:24 +#, fuzzy +msgid "Mark a package as automatically installed" +msgstr "Liste des paquets à installer" -#: share/completions/apt-move.fish:3 -msgid "Alias for 'get'" -msgstr "Alias pour 'get'" +#: share/completions/apt-mark.fish:25 +#, fuzzy +msgid "Mark a package as manually installed" +msgstr "Synchroniser les paquets installés" + +#: share/completions/apt-mark.fish:26 +msgid "Hold a package, prevent automatic installation or removal" +msgstr "" + +#: share/completions/apt-mark.fish:27 +#, fuzzy +msgid "Cancel a hold on a package" +msgstr "Info sur un paquet" + +#: share/completions/apt-mark.fish:28 +#, fuzzy +msgid "Show automatically installed packages" +msgstr "Reconstruire et installer un paquet installé" + +#: share/completions/apt-mark.fish:29 +#, fuzzy +msgid "Show manually installed packages" +msgstr "Reconstruire et installer un paquet installé" + +#: share/completions/apt-mark.fish:30 +#, fuzzy +msgid "Show held packages" +msgstr "Afficher les paquets mis à niveau" + +#: share/completions/apt-mark.fish:34 +#, fuzzy +msgid "Write package statistics to a file" +msgstr "Écrire les meilleurs serveurs dans un fichier" #: share/completions/apt-move.fish:4 msgid "Move packages to local tree" -msgstr "Déplacer les paquets dans l'arbre local" +msgstr "Déplacer les paquets dans l'arbre local" #: share/completions/apt-move.fish:5 msgid "Delete obsolete package files" -msgstr "Supprimer les fichiers obsolètes" +msgstr "Supprimer les fichiers obsolètes" #: share/completions/apt-move.fish:6 msgid "Build new local files" @@ -2582,7 +2622,7 @@ msgstr "Reconstruire l'index des fichiers" #: share/completions/apt-move.fish:8 msgid "Move packages from cache to local mirror" -msgstr "Déplacer les paquets de la cache au miroir local" +msgstr "Déplacer les paquets de la cache au miroir local" #: share/completions/apt-move.fish:9 msgid "Alias for 'move delete packages'" @@ -2594,15 +2634,11 @@ msgstr "Alias pour 'update'" #: share/completions/apt-move.fish:11 msgid "Download package missing from mirror" -msgstr "Télécharger les paquets manquant au miroir" +msgstr "Télécharger les paquets manquant au miroir" #: share/completions/apt-move.fish:12 msgid "Sync packages installed" -msgstr "Synchroniser les paquets installés" - -#: share/completions/apt-move.fish:14 -msgid "Move file specified on commandline" -msgstr "Déplacer le fichier spécifier dans la ligne de commande" +msgstr "Synchroniser les paquets installés" #: share/completions/apt-move.fish:15 msgid "List packages that may serve as input to mirrorbin or mirrorsource" @@ -2610,20 +2646,16 @@ msgstr "" #: share/completions/apt-move.fish:16 msgid "Fetch package from STDIN" -msgstr "Récupérer le paquet de STDIN" +msgstr "Récupérer le paquet de STDIN" #: share/completions/apt-move.fish:17 msgid "Fetch source package from STDIN" -msgstr "Récupérer le paquet source de STDIN" +msgstr "Récupérer le paquet source de STDIN" #: share/completions/apt-move.fish:18 msgid "Process all packages" msgstr "Traiter tous les paquets" -#: share/completions/apt-move.fish:19 -msgid "Use specific conffile" -msgstr "Utiliser un fichier de config spécifique" - #: share/completions/apt-move.fish:20 msgid "Force deletion" msgstr "Forcer la suppression" @@ -2638,15 +2670,15 @@ msgstr "Essai" #: share/completions/apt-proxy-import.fish:5 msgid "No message to STDOUT" -msgstr "Aucun message à STDOUT" +msgstr "Aucun message à STDOUT" #: share/completions/apt-proxy-import.fish:6 msgid "Recurse into subdir" -msgstr "Récursif" +msgstr "Récursif" #: share/completions/apt-proxy-import.fish:7 msgid "Dir to import" -msgstr "Rep. à importer" +msgstr "Rep. à importer" #: share/completions/apt-proxy-import.fish:8 msgid "Change to user" @@ -2654,52 +2686,28 @@ msgstr "Changer d'utilisateur" #: share/completions/apt-proxy-import.fish:9 msgid "Debug level[default 0]" -msgstr "Niveau de débogage[défaut 0]" +msgstr "Niveau de débogage[défaut 0]" #: share/completions/apt-rdepends.fish:3 msgid "Show build dependencies" -msgstr "Afficher les dépendances de construction" +msgstr "Afficher les dépendances de construction" #: share/completions/apt-rdepends.fish:4 msgid "Generate a dotty graph" -msgstr "Générer un graphique dotty" +msgstr "Générer un graphique dotty" #: share/completions/apt-rdepends.fish:5 msgid "Show state of dependencies" -msgstr "Afficher l'état des dépendances" +msgstr "Afficher l'état des dépendances" #: share/completions/apt-rdepends.fish:6 msgid "List packages depending on" -msgstr "Lister les dépendances inverses" - -#: share/completions/apt-rdepends.fish:7 -msgid "Comma-separated list of dependancy types to follow recursively" -msgstr "Liste séparée par des virgules de types de dépendances à suivre récursivement" - -#: share/completions/apt-rdepends.fish:8 -msgid "Comma-separated list of dependancy types to show" -msgstr "Liste séparée par des virgules de types de dépendances à afficher" - -#: share/completions/apt-rdepends.fish:9 -msgid "Comma-separated list of package installation states to follow recursively" -msgstr "Liste séparée par des virgules d'états d'installation de paquet à suivre récursivement" - -#: share/completions/apt-rdepends.fish:10 -msgid "Comma-separated list of package installation states to show" -msgstr "Liste séparée par des virgules d'états d'installation de paquet à afficher" +msgstr "Lister les dépendances inverses" #: share/completions/apt-rdepends.fish:11 msgid "Display man page" msgstr "Afficher la page de manuel" -#: share/completions/apt-setup.fish:2 -msgid "Probe a CD" -msgstr "Analyser un CD" - -#: share/completions/apt-setup.fish:3 -msgid "Run in noninteractive mode" -msgstr "Exécuter en mode noninteractif" - #: share/completions/apt-show-source.fish:3 #: share/completions/apt-show-source.fish:4 #: share/completions/apt-show-versions.fish:10 @@ -2712,7 +2720,7 @@ msgstr "Lire le paquet depuis un fichier" #: share/completions/apt-show-versions.fish:12 #: share/completions/apt-show-versions.fish:13 msgid "Specify APT list dir" -msgstr "Spécifier le rep. de liste APT" +msgstr "Spécifier le rep. de liste APT" #: share/completions/apt-show-source.fish:7 msgid "List PKG info" @@ -2732,7 +2740,7 @@ msgstr "Utiliser les regex" #: share/completions/apt-show-versions.fish:5 msgid "Print only upgradeable packages" -msgstr "Afficher seulement les paquets pouvant être mis à niveau" +msgstr "Afficher seulement les paquets pouvant être mis à niveau" #: share/completions/apt-show-versions.fish:6 msgid "Print all versions" @@ -2744,7 +2752,7 @@ msgstr "Afficher le nom du paquet/distro" #: share/completions/apt-show-versions.fish:8 msgid "Print verbose info" -msgstr "Afficher les infos détaillées" +msgstr "Afficher les infos détaillées" #: share/completions/apt-show-versions.fish:9 msgid "Init or update cache only" @@ -2756,7 +2764,7 @@ msgstr "" #: share/completions/apt-sortpkgs.fish:5 msgid "Specify conffile" -msgstr "Spécifier le fichier de config" +msgstr "Spécifier le fichier de config" #: share/completions/apt-spy.fish:3 msgid "Debian distribution" @@ -2766,29 +2774,9 @@ msgstr "Version de Debian" msgid "Servers in the areas" msgstr "Serveurs sur le continent" -#: share/completions/apt-spy.fish:5 -msgid "Conf file" -msgstr "Fichier de config" - #: share/completions/apt-spy.fish:6 msgid "Finish after number of servers" -msgstr "Finir après un nombre de serveurs" - -#: share/completions/apt-spy.fish:7 -msgid "File to grab servers" -msgstr "" - -#: share/completions/apt-spy.fish:8 -msgid "File as input" -msgstr "Fichier d'entrée" - -#: share/completions/apt-spy.fish:9 -msgid "Mirror-list file" -msgstr "Liste de miroirs" - -#: share/completions/apt-spy.fish:10 -msgid "Output sources.list file" -msgstr "Fichier sources.list de sortie" +msgstr "Finir après un nombre de serveurs" #: share/completions/apt-spy.fish:11 msgid "Use proxy server" @@ -2796,20 +2784,16 @@ msgstr "Utiliser un proxy" #: share/completions/apt-spy.fish:12 msgid "Comma separated country list" -msgstr "Liste de pays séparés par des virgules" +msgstr "Liste de pays séparés par des virgules" #: share/completions/apt-spy.fish:13 msgid "How long in sec to download" -msgstr "Durée du téléchargement (sec)" +msgstr "Durée du téléchargement (sec)" #: share/completions/apt-spy.fish:14 msgid "Custom URL to get mirror list" msgstr "URL pour obtenir la liste des miroirs" -#: share/completions/apt-spy.fish:15 -msgid "Write top servers to file" -msgstr "Écrire les meilleurs serveurs dans un fichier" - #: share/completions/apt-spy.fish:16 msgid "Number of top servers" msgstr "Nombre de meilleurs serveurs" @@ -2820,7 +2804,7 @@ msgstr "Actualiser la liste des miroirs" #: share/completions/apt-spy.fish:18 msgid "Version number" -msgstr "Numéro de version" +msgstr "Numéro de version" #: share/completions/apt-src.fish:3 msgid "Update list of source packages" @@ -2832,14 +2816,13 @@ msgstr "Installer des paquets source" #: share/completions/apt-src.fish:5 msgid "Upgrade source packages" -msgstr "Mettre à niveau des paquets source" +msgstr "Mettre à niveau des paquets source" #: share/completions/apt-src.fish:6 msgid "Remove source packages" msgstr "Supprimer des paquets source" -#: share/completions/apt-src.fish:7 -#: share/completions/apt-src.fish:14 +#: share/completions/apt-src.fish:7 share/completions/apt-src.fish:14 msgid "Build source packages" msgstr "Construire des paquets source" @@ -2849,11 +2832,11 @@ msgstr "Nettoyer des paquets source" #: share/completions/apt-src.fish:9 msgid "Detect known source tree" -msgstr "Détecter l'arbre source connu" +msgstr "Détecter l'arbre source connu" #: share/completions/apt-src.fish:10 msgid "List installed source package\\(s\\)" -msgstr "Lister les paquets source installés" +msgstr "Lister les paquets source installés" #: share/completions/apt-src.fish:11 msgid "Root source tree" @@ -2869,7 +2852,7 @@ msgstr "Nom du paquet source" #: share/completions/apt-src.fish:15 msgid "Install after build" -msgstr "Installer après la construction" +msgstr "Installer après la construction" #: share/completions/apt-src.fish:16 msgid "Patch local changes" @@ -2877,11 +2860,7 @@ msgstr "Patcher les changements locaux" #: share/completions/apt-src.fish:17 msgid "Specify a dir" -msgstr "Spécifier un répertoire" - -#: share/completions/apt-src.fish:18 -msgid "Run on current dir" -msgstr "Exécuter dans le répertoire courant" +msgstr "Spécifier un répertoire" #: share/completions/apt-src.fish:19 msgid "Omit debian version" @@ -2907,87 +2886,159 @@ msgstr "Sortie vers /dev/null" msgid "Output trace" msgstr "Suivi de la sortie" -#: share/completions/apt-zip-inst.fish:4 -#: share/completions/apt-zip-list.fish:4 -msgid "Removable medium" -msgstr "Média amovible" - -#: share/completions/apt-zip-inst.fish:5 -#: share/completions/apt-zip-list.fish:5 +#: share/completions/apt-zip-inst.fish:5 share/completions/apt-zip-list.fish:5 msgid "Select an action" msgstr "Choisir une action" -#: share/completions/apt-zip-inst.fish:6 -#: share/completions/apt-zip-list.fish:6 -msgid "List of packages to install" -msgstr "Liste des paquets à installer" - -#: share/completions/apt-zip-inst.fish:7 -#: share/completions/apt-zip-list.fish:7 +#: share/completions/apt-zip-inst.fish:7 share/completions/apt-zip-list.fish:7 msgid "Fix broken option" -msgstr "Fixer les options brisées" +msgstr "Fixer les options brisées" -#: share/completions/apt-zip-inst.fish:8 -#: share/completions/apt-zip-list.fish:8 -msgid "Specify a non-mountpoint dir" -msgstr "Spécifier un rep. qui n'est pas un point de montage" +#: share/completions/aptitude.fish:3 +#, fuzzy +msgid "Test if aptitude has yet to be given the subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/apt-zip-list.fish:9 -msgid "Select a method" -msgstr "Choisir une méthode" +#: share/completions/aptitude.fish:12 +#, fuzzy +msgid "Test if aptitude command should have packages as potential completion" +msgstr "" +"Tester si la commande apt devrait avoir les paquets comme complétion " +"potentielle" -#: share/completions/apt-zip-list.fish:11 -msgid "Accept protocols" -msgstr "Accepter les protocoles" +#: share/completions/aptitude.fish:24 +#, fuzzy +msgid "Remove any cached packages which can no longer be downloaded" +msgstr "Nettoyer les paquets ne pouvant plus être téléchargés" -#: share/completions/apt-zip-list.fish:12 -msgid "Reject protocols" -msgstr "Rejeter les protocoles" +#: share/completions/aptitude.fish:25 +msgid "Remove all downloaded .deb files from the package cache directory" +msgstr "" -#: share/completions/arp.fish:3 -msgid "Numerical address" -msgstr "Adresse numérique" +#: share/completions/aptitude.fish:26 +msgid "Forget all internal information about what packages are \\new" +msgstr "" + +#: share/completions/aptitude.fish:27 +msgid "Cancel all scheduled actions on all packages" +msgstr "" + +#: share/completions/aptitude.fish:28 +msgid "Update the list of available packages from the apt sources" +msgstr "" + +#: share/completions/aptitude.fish:29 +#, fuzzy +msgid "Upgrade installed packages to their most recent version" +msgstr "Afficher tous les paquets source avec version" + +#: share/completions/aptitude.fish:30 +msgid "Download and displays the Debian changelog for the packages" +msgstr "" + +#: share/completions/aptitude.fish:31 +#, fuzzy +msgid "Upgrade, removing or installing packages as necessary" +msgstr "Mettre à niveau ou installer les plus nouveaux paquets" + +#: share/completions/aptitude.fish:32 +msgid "Download the packages to the current directory" +msgstr "" + +#: share/completions/aptitude.fish:33 +msgid "Forbid the upgrade to a particular version" +msgstr "" + +#: share/completions/aptitude.fish:34 +msgid "Ignore the packages by future upgrade commands" +msgstr "" + +#: share/completions/aptitude.fish:35 +#, fuzzy +msgid "Install the packages" +msgstr "Installer des paquets source" + +#: share/completions/aptitude.fish:36 +msgid "Cancel any scheduled actions on the packages" +msgstr "" + +#: share/completions/aptitude.fish:37 +#, fuzzy +msgid "Mark packages as automatically installed" +msgstr "Synchroniser les paquets installés" + +#: share/completions/aptitude.fish:38 +msgid "Remove and delete all associated configuration and data files" +msgstr "" + +#: share/completions/aptitude.fish:39 +#, fuzzy +msgid "Reinstall the packages" +msgstr "Réinstaller les paquets" + +#: share/completions/aptitude.fish:40 +#, fuzzy +msgid "Remove the packages" +msgstr "Supprime les paquet" + +#: share/completions/aptitude.fish:41 +#, fuzzy +msgid "Display detailed information about the packages" +msgstr "Afficher l'état des fichiers extraits" + +#: share/completions/aptitude.fish:42 +msgid "Consider the packages by future upgrade commands" +msgstr "" + +#: share/completions/aptitude.fish:43 +#, fuzzy +msgid "Mark packages as manually installed" +msgstr "Synchroniser les paquets installés" + +#: share/completions/aptitude.fish:44 +#, fuzzy +msgid "Search for packages matching one of the patterns" +msgstr "Cherche les paquet contenant le motif" + +#: share/completions/aptitude.fish:45 +msgid "Display brief summary of the available commands and options" +msgstr "" #: share/completions/arp.fish:4 msgid "Class of hw type" -msgstr "Classe de matériel" +msgstr "Classe de matériel" #: share/completions/arp.fish:5 msgid "Show arp entries" -msgstr "Afficher les entrées ARP" +msgstr "Afficher les entrées ARP" #: share/completions/arp.fish:6 msgid "Remove an entry for hostname" -msgstr "Enlever une entrée pour le nom de machine" - -#: share/completions/arp.fish:7 -msgid "Use hardware address" -msgstr "Utiliser l'adresse matérielle" +msgstr "Enlever une entrée pour le nom de machine" #: share/completions/arp.fish:8 msgid "Select interface" -msgstr "Sélectionner l'interface" +msgstr "Sélectionner l'interface" #: share/completions/arp.fish:9 msgid "Manually create ARP address" -msgstr "Créer l'adresse ARP manuellement" +msgstr "Créer l'adresse ARP manuellement" #: share/completions/arp.fish:10 msgid "Take addr from filename, default /etc/ethers" -msgstr "Prendre l'adr. du nom de fichier, /etc/ethers par défaut" +msgstr "Prendre l'adr. du nom de fichier, /etc/ethers par défaut" -#: share/completions/at.fish:3 -#: share/completions/atq.fish:3 +#: share/completions/at.fish:3 share/completions/atq.fish:3 msgid "Use specified queue" -msgstr "Utiliser la file spécifiée" +msgstr "Utiliser la file spécifiée" #: share/completions/at.fish:4 msgid "Send mail to user" -msgstr "Envoyer un couriel à l'utilisateur" +msgstr "Envoyer un couriel à l'utilisateur" #: share/completions/at.fish:5 msgid "Read job from file" -msgstr "Lire la tâche depuis le fichier" +msgstr "Lire la tâche depuis le fichier" #: share/completions/at.fish:6 msgid "Alias for atq" @@ -3003,7 +3054,7 @@ msgstr "Afficher le temps" #: share/completions/at.fish:9 msgid "Print the jobs listed" -msgstr "Afficher les tâches listées" +msgstr "Afficher les tâches listées" #: share/completions/atd.fish:2 msgid "Limiting load factor" @@ -3014,1940 +3065,864 @@ msgid "Minimum interval in seconds" msgstr "Interval minimum en sec." #: share/completions/atd.fish:4 -#: share/completions/make.fish:11 msgid "Debug mode" -msgstr "Mode débogage" +msgstr "Mode débogage" #: share/completions/atd.fish:5 msgid "Process at queue only once" msgstr "" -#: share/completions/bc.fish:3 -msgid "Force interactive mode" -msgstr "Forcer le mode interactif" +#: share/completions/bundle.fish:3 +#, fuzzy +msgid "Test if bundle has been given no subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/bc.fish:4 -msgid "Define math library" -msgstr "Définir la bibliothèque mathématique" +#: share/completions/bundle.fish:11 +#, fuzzy +msgid "Test if bundle has been given a specific subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/bc.fish:5 -msgid "Give warnings for extensions to POSIX bc" -msgstr "Avertir lors d'utilisations d'extensions de bc POSIX" +#: share/completions/bundle.fish:30 +#, fuzzy +msgid "Display a help page" +msgstr "Afficher la page de manuel" -#: share/completions/bc.fish:6 -msgid "Process exactly POSIX bc" -msgstr "Traiter exactement comme bc POSIX" - -#: share/completions/bc.fish:7 -msgid "Do not print the GNU welcome" -msgstr "Ne pas afficher le message de bienvenue GNU" - -#: share/completions/bunzip2.fish:9 -msgid "Decompress to stdout" -msgstr "Décompresser vers stdout" - -#: share/completions/bunzip2.fish:10 -#: share/completions/bzip2.fish:11 -#: share/completions/gunzip.fish:7 -#: share/completions/gzip.fish:9 -#: share/completions/zcat.fish:6 -msgid "Overwrite" -msgstr "Écraser" - -#: share/completions/bunzip2.fish:11 -#: share/completions/bzip2.fish:12 -msgid "Do not overwrite" -msgstr "Ne pas écraser" - -#: share/completions/bunzip2.fish:12 -#: share/completions/bzcat.fish:8 -#: share/completions/bzip2.fish:13 -msgid "Reduce memory usage" -msgstr "Réduire l'utilisation de la mémoire" - -#: share/completions/bunzip2.fish:13 -#: share/completions/bzip2.fish:15 -msgid "Print compression ratios" -msgstr "Afficher les ratios de compression" - -#: share/completions/bunzip2.fish:14 -#: share/completions/bzip2.fish:16 -#: share/completions/gunzip.fish:10 -#: share/completions/gzip.fish:12 -#: share/completions/zcat.fish:8 -msgid "Print license" -msgstr "Afficher la licence" - -#: share/completions/bzip2.fish:1 -#: share/completions/gunzip.fish:1 -#: share/completions/gzip.fish:1 -msgid "Compress to stdout" -msgstr "Compresser vers stdout" - -#: share/completions/bzip2.fish:9 -msgid "Compress file" -msgstr "Compresser le fichier" - -#: share/completions/bzip2.fish:10 -#: share/completions/gunzip.fish:16 -#: share/completions/gzip.fish:18 -msgid "Check integrity" -msgstr "Vérifier l'intégrité" - -#: share/completions/bzip2.fish:14 -#: share/completions/chgrp.fish:6 -#: share/completions/chown.fish:5 -msgid "Supress errors" -msgstr "Supprimer les erreurs" - -#: share/completions/bzip2.fish:18 -msgid "Small block size" -msgstr "Petite taille de blocs" - -#: share/completions/bzip2.fish:19 -msgid "Large block size" -msgstr "Grande taille de blocs" - -#: share/completions/cat.fish:1 -msgid "Escape all non-printing characters" -msgstr "Échapper tous les caractères non-imprimables" - -#: share/completions/cat.fish:2 -msgid "Number nonblank lines" -msgstr "Numéroter les lignes non blanches" - -#: share/completions/cat.fish:3 -msgid "Escape non-printing characters except tab" -msgstr "Échapper les caractères non-imprimables sauf tab" - -#: share/completions/cat.fish:4 -msgid "Display $ at end of line" -msgstr "Afficher $ à la fin du fichier" - -#: share/completions/cat.fish:5 -msgid "Number all lines" -msgstr "Numéroter toutes les lignes" - -#: share/completions/cat.fish:6 -msgid "Never more than single blank line" -msgstr "Jamais plus d'une seule ligne blanche" - -#: share/completions/cat.fish:7 -msgid "Escape non-printing characters except newline" -msgstr "Échapper tous les caractères non-imprimables sauf nouvelle ligne" - -#: share/completions/cat.fish:8 -msgid "Escape tab" -msgstr "Échapper tab" - -#: share/completions/cat.fish:9 -msgid "Escape non-printing except newline and tab" -msgstr "Échapper les caractères non-imprimables sauf tab et nouvelle ligne" - -#: share/completions/cdrecord.fish:6 -msgid "Increment the level of general verbosity by one" -msgstr "Incrémenter de un le niveau général de verbosité" - -#: share/completions/cdrecord.fish:7 -msgid "Increment the verbose level in respect of SCSI command transport by one" -msgstr "Incrémenter de un le niveau de verbosité en respect des commandes de transport SCSI" - -#: share/completions/cdrecord.fish:8 -msgid "Set the misc debug value to #" -msgstr "Définir le niveau de débogage misc" - -#: share/completions/cdrecord.fish:9 -msgid "Increment the misc debug level by one" -msgstr "Incrémenter de un le niveau de débogage misc" - -#: share/completions/cdrecord.fish:10 -msgid "Do not print out a status report for failed SCSI commands" -msgstr "Ne pas afficher un rapport pour les commandes SCSI qui ont échoué" - -#: share/completions/cdrecord.fish:11 -msgid "Force to continue on some errors" -msgstr "Forcer à continuer lors de certaines erreurs" - -#: share/completions/cdrecord.fish:12 -msgid "Tell cdrecord to set the SCSI IMMED flag in certain commands" -msgstr "Dire à cdrecord de définir le drapeau SCSI IMMED pour certaines commandes" - -#: share/completions/cdrecord.fish:13 -msgid "Defines the minimum drive buffer fill ratio for the experimental ATAPI wait mode intended to free the IDE bus to allow hard disk and CD/DVD writer on the same IDE cable" -msgstr "Définir le tampon de ratio de remplissage maximal pour le mode ATAPI expérimental d'attente dont l'objectif est de libérer le bus IDE pour permettre d'autres périphériques sur le même câble IDE" - -#: share/completions/cdrecord.fish:14 -msgid "Complete CD/DVD-Recorder recording process with the laser turned off" -msgstr "Compléter l'enregistrement du CD/DVD avec le laser éteint" - -#: share/completions/cdrecord.fish:15 -msgid "Tells cdrecord to handle images created by readcd -clone" -msgstr "Dire à cdrecord de gérer les images créées par readcd -clone" - -#: share/completions/cdrecord.fish:17 -msgid "Set SAO (Session At Once) mode, usually called Disk At Once mode" -msgstr "Utiliser le mode SAO (Session At One), habituellement appelé mode DAO" - -#: share/completions/cdrecord.fish:18 -msgid "Set TAO (Track At Once) writing mode" -msgstr "Utiliser le mode d'écriture TAO (Track At Once)" - -#: share/completions/cdrecord.fish:19 -msgid "Set RAW writing mode" -msgstr "Utiliser le mode d'écriture brut" - -#: share/completions/cdrecord.fish:20 -msgid "Select Set RAW writing, the preferred raw writing mode" -msgstr "Utiliser l'écriture brute, le mode d'écriture brute préféré" - -#: share/completions/cdrecord.fish:21 -msgid "Select Set RAW writing, the less preferred raw writing mode" +#: share/completions/bundle.fish:38 share/completions/bundle.fish:65 +msgid "Install the gems specified by the Gemfile or Gemfile.lock" msgstr "" -#: share/completions/cdrecord.fish:22 -msgid "Select Set RAW writing, the preferred raw writing mode if raw96r is not supported" +#: share/completions/bundle.fish:39 share/completions/bundle.fish:87 +msgid "The location of the Gemfile bundler should use." msgstr "" -#: share/completions/cdrecord.fish:23 -msgid "Allow multi session CDs to be made" -msgstr "Permettre la création de CDs multi sessions" - -#: share/completions/cdrecord.fish:24 -msgid "Retrieve multi session info in a form suitable for mkisofs-1.10 or later" +#: share/completions/bundle.fish:40 +msgid "The location to install the gems in the bundle to." msgstr "" -#: share/completions/cdrecord.fish:25 -msgid "Retrieve and print out the table of content or PMA of a CD" +#: share/completions/bundle.fish:41 +msgid "Installs the gems in the bundle to the system location." msgstr "" -#: share/completions/cdrecord.fish:26 -msgid "Retrieve and print out the ATIP (absolute Time in Pre-groove) info" +#: share/completions/bundle.fish:42 +msgid "A space-separated list of groups to skip installing." msgstr "" -#: share/completions/cdrecord.fish:27 -msgid "The disk will only be fixated" +#: share/completions/bundle.fish:43 +msgid "Use cached gems instead of connecting to rubygems.org." msgstr "" -#: share/completions/cdrecord.fish:28 -msgid "Do not fixate the disk after writing the tracks" +#: share/completions/bundle.fish:44 +msgid "Switches bundler's defaults into deployment mode." msgstr "" -#: share/completions/cdrecord.fish:29 -msgid "Wait for input to become available on standard input before trying to open the SCSI driver" +#: share/completions/bundle.fish:45 +msgid "" +"Create a directory containing executabes that run in the context of the " +"bundle." msgstr "" -#: share/completions/cdrecord.fish:30 -msgid "Load the media and exit" -msgstr "Charger le média et quitter" - -#: share/completions/cdrecord.fish:31 -msgid "Load the media, lock the door and exit" +#: share/completions/bundle.fish:46 +msgid "Specify a ruby executable to use with generated binstubs." msgstr "" -#: share/completions/cdrecord.fish:32 -msgid "Eject disk after doing the work" -msgstr "Éjecter le disque après le travail" - -#: share/completions/cdrecord.fish:33 -msgid "Set the speed factor of the writing process to #" -msgstr "Définir la vitesse d'écriture" - -#: share/completions/cdrecord.fish:34 -msgid "Blank a CD-RW and exit or blank a CD-RW before writing" -msgstr "Effacer un CD-RW" - -#: share/completions/cdrecord.fish:35 -msgid "Format a CD-RW/DVD-RW/DVD+RW disc" -msgstr "Formatter un CD-RW" - -#: share/completions/cdrecord.fish:36 -msgid "Set the FIFO (ring buffer) size to #" +#: share/completions/bundle.fish:47 +msgid "Make a bundle that can work without RubyGems or Bundler at run-time." msgstr "" -#: share/completions/cdrecord.fish:37 -msgid "Set the maximum transfer size for a single SCSI command to #" +#: share/completions/bundle.fish:48 +msgid "Apply a RubyGems security policy: {High,Medium,Low,No}Security" msgstr "" -#: share/completions/cdrecord.fish:38 -msgid "Sets the SCSI target for the CD/DVD-Recorder" +#: share/completions/bundle.fish:49 +msgid "Do not update the cache in vendor/cache with the newly bundled gems." msgstr "" -#: share/completions/cdrecord.fish:39 -msgid "Set the grace time before starting to write to ># seconds" +#: share/completions/bundle.fish:50 +#, fuzzy +msgid "Do not print progress information to stdout." +msgstr "Écriture des informations de profilage dans le fichier '%s' impossible" + +#: share/completions/bundle.fish:53 share/completions/bundle.fish:66 +msgid "Update dependencies to their latest versions" msgstr "" -#: share/completions/cdrecord.fish:40 -msgid "Set the default SCSI command timeout value to # seconds" +#: share/completions/bundle.fish:54 +msgid "The name of a :git or :path source used in the Gemfile." msgstr "" -#: share/completions/cdrecord.fish:41 -msgid "Allows the user to manually select a driver for the device" -msgstr "Permettre à l'utilisateur de choisir un pilote manuellement pour le périphérique" - -#: share/completions/cdrecord.fish:45 -msgid "Set driver specific options" -msgstr "Définir les options spécifiques au pilote" - -#: share/completions/cdrecord.fish:46 -msgid "Set the driveropts specified by driveropts=option list, the speed of the drive and the dummy flag and exit" +#: share/completions/bundle.fish:58 +msgid "" +"Package the .gem files required by your application into the vendor/cache " +"directory" msgstr "" -#: share/completions/cdrecord.fish:47 -msgid "Checks if a driver for the current drive is present and exit" -msgstr "Vérifier si le pilote pour le lecteur est présent" - -#: share/completions/cdrecord.fish:48 -msgid "Print the drive capabilities for SCSI-3/mmc compliant drives as obtained from mode page 0x2A" +#: share/completions/bundle.fish:61 share/completions/bundle.fish:68 +msgid "Execute a script in the context of the current bundle" msgstr "" -#: share/completions/cdrecord.fish:49 -msgid "Do an inquiry for the drive, print the inquiry info and exit" +#: share/completions/bundle.fish:64 +msgid "Describe available tasks or one specific task" msgstr "" -#: share/completions/cdrecord.fish:50 -msgid "Scan all SCSI devices on all SCSI busses and print the inquiry strings" +#: share/completions/bundle.fish:67 +#, fuzzy +msgid "Package .gem files into the vendor/cache directory" +msgstr "Appliquer les modifications au référentiel" + +#: share/completions/bundle.fish:69 +msgid "Check bundler requirements for your application" msgstr "" -#: share/completions/cdrecord.fish:51 -msgid "Try to reset the SCSI bus where the CD recorder is located" +#: share/completions/bundle.fish:70 share/completions/bundle.fish:92 +msgid "Show all of the gems in the current bundle" msgstr "" -#: share/completions/cdrecord.fish:52 -msgid "Try to send an abort sequence to the drive" +#: share/completions/bundle.fish:71 share/completions/bundle.fish:96 +msgid "Show the source location of a particular gem in the bundle" msgstr "" -#: share/completions/cdrecord.fish:53 -msgid "Allow cdrecord to write more than the official size of a medium" +#: share/completions/bundle.fish:72 share/completions/bundle.fish:100 +msgid "Show all of the outdated gems in the current bundle" msgstr "" -#: share/completions/cdrecord.fish:54 -msgid "Ignore the known size of the medium, use for debugging only" +#: share/completions/bundle.fish:73 share/completions/bundle.fish:107 +msgid "Start an IRB session in the context of the current bundle" msgstr "" -#: share/completions/cdrecord.fish:55 -msgid "Use *.inf files to overwrite audio options" +#: share/completions/bundle.fish:74 share/completions/bundle.fish:110 +#, sh-format +msgid "Open an installed gem in your $EDITOR" msgstr "" -#: share/completions/cdrecord.fish:56 -msgid "Set the default pre-gap size for all tracks except track nr 1" +#: share/completions/bundle.fish:75 share/completions/bundle.fish:114 +msgid "Generate a visual representation of your dependencies" msgstr "" -#: share/completions/cdrecord.fish:57 -msgid "Set Packet writing mode (experimental interface)" +#: share/completions/bundle.fish:76 +#, fuzzy +msgid "Generate a simple Gemfile" +msgstr "Générer un fichier maître" + +#: share/completions/bundle.fish:77 share/completions/bundle.fish:125 +msgid "Create a simple gem, suitable for development with bundler" msgstr "" -#: share/completions/cdrecord.fish:58 -msgid "Set the packet size to #, forces fixed packet mode (experimental)" +#: share/completions/bundle.fish:78 share/completions/bundle.fish:131 +msgid "Displays platform compatibility information" msgstr "" -#: share/completions/cdrecord.fish:59 -msgid "Do not close the current track, only when in packet writing mode (experimental)" +#: share/completions/bundle.fish:79 share/completions/bundle.fish:135 +msgid "Cleans up unused gems in your bundler directory" msgstr "" -#: share/completions/cdrecord.fish:60 -msgid "Set the Media Catalog Number of the CD" +#: share/completions/bundle.fish:86 +msgid "" +"Determine whether the requirements for your application are installed and " +"available to bundler" msgstr "" -#: share/completions/cdrecord.fish:61 -msgid "Write CD-Text info based on info taken from a file that contains ascii info for the text strings" +#: share/completions/bundle.fish:88 +msgid "Specify a path other than the system default (BUNDLE_PATH or GEM_HOME)." msgstr "" -#: share/completions/cdrecord.fish:62 -msgid "Write CD-Text based on info found in the binary file filename" +#: share/completions/bundle.fish:89 +msgid "Lock the Gemfile" msgstr "" -#: share/completions/cdrecord.fish:63 -msgid "Take all recording related info from a CDRWIN compliant CUE sheet file" +#: share/completions/bundle.fish:93 +msgid "List the paths of all gems required by your Gemfile" msgstr "" -#: share/completions/cdrecord.fish:67 -msgid "Set the International Standard Recording Number for the next track" +#: share/completions/bundle.fish:101 +msgid "Check for newer pre-release gems" msgstr "" -#: share/completions/cdrecord.fish:68 -msgid "Sets an index list for the next track" +#: share/completions/bundle.fish:102 +msgid "Check against a specific source" msgstr "" -#: share/completions/cdrecord.fish:69 -msgid "All subsequent tracks are written in CD-DA audio format" +#: share/completions/bundle.fish:103 +msgid "Use cached gems instead of attempting to fetch gems remotely" msgstr "" -#: share/completions/cdrecord.fish:70 -msgid "Audio data is assumed to be in byte-swapped (little-endian) order" +#: share/completions/bundle.fish:115 +msgid "The name to use for the generated file (see format option)" msgstr "" -#: share/completions/cdrecord.fish:71 -msgid "All subsequent tracks are written in CD-ROM mode 1 (Yellow Book) format" +#: share/completions/bundle.fish:116 +#, fuzzy +msgid "Show each gem version" +msgstr "Version de l'arbre source" + +#: share/completions/bundle.fish:117 +msgid "Show the version of each required dependency" msgstr "" -#: share/completions/cdrecord.fish:72 -msgid "All subsequent tracks are written in CD-ROM mode 2 format" +#: share/completions/bundle.fish:118 +msgid "Output a specific format (png, jpg, svg, dot, ...)" msgstr "" -#: share/completions/cdrecord.fish:73 -#: share/completions/cdrecord.fish:74 -msgid "All subsequent tracks are written in CD-ROM XA mode 2 form 1 format" +#: share/completions/bundle.fish:121 +msgid "Generate a simple Gemfile, placed in the current directory" msgstr "" -#: share/completions/cdrecord.fish:75 -msgid "All subsequent tracks are written in CD-ROM XA mode 2 form 2 format" +#: share/completions/bundle.fish:122 +msgid "Use a specified .gemspec to create the Gemfile" msgstr "" -#: share/completions/cdrecord.fish:76 -msgid "All subsequent tracks are written in a way that allows a mix of CD-ROM XA mode 2 form 1/2 format" +#: share/completions/bundle.fish:126 +msgid "Generate a binary for your library" msgstr "" -#: share/completions/cdrecord.fish:77 -msgid "The TOC type for the disk is set to CDI, with XA only" +#: share/completions/bundle.fish:127 +msgid "Generate a test directory for your library (rspec or minitest)" msgstr "" -#: share/completions/cdrecord.fish:78 -msgid "Use the ISO-9660 file system size as the size of the next track" +#: share/completions/bundle.fish:128 +msgid "Path to your editor" msgstr "" -#: share/completions/cdrecord.fish:79 -msgid "15 sectors of zeroed data will be added to the end of this and each subsequent data track" +#: share/completions/bundle.fish:132 +msgid "Only display Ruby directive information" msgstr "" -#: share/completions/cdrecord.fish:80 -msgid "Set the amount of data to be appended as padding to the next track" +#: share/completions/bundle.fish:136 +msgid "Only print out changes, do not actually clean gems" msgstr "" -#: share/completions/cdrecord.fish:81 -msgid "Do not pad the following tracks - the default" +#: share/completions/bundle.fish:137 +msgid "Forces clean even if --path is not set" msgstr "" -#: share/completions/cdrecord.fish:82 -msgid "Allow all subsequent tracks to violate the Red Book track length standard (min 4 s)" -msgstr "" - -#: share/completions/cdrecord.fish:83 -msgid "Re-enforce the Red Book track length standard (min 4 s)" -msgstr "" - -#: share/completions/cdrecord.fish:84 -msgid "Set the pre-gap size for the next track" -msgstr "" - -#: share/completions/cdrecord.fish:85 -msgid "All TOC entries for subsequent audio tracks will indicate that the audio data has been sampled with 50/15 microsec pre-emphasis" -msgstr "" - -#: share/completions/cdrecord.fish:86 -msgid "All TOC entries for subsequent audio tracks will indicate that the audio data has been mastered with linear data" -msgstr "" - -#: share/completions/cdrecord.fish:87 -msgid "All TOC entries for subsequent audio tracks of the resulting CD will indicate that the audio data has permission to be copied without limit" -msgstr "" - -#: share/completions/cdrecord.fish:88 -msgid "All TOC entries for subsequent audio tracks of the resulting CD will indicate that the audio data has permission to be copied only once for personal use" -msgstr "" - -#: share/completions/cdrecord.fish:89 -msgid "All TOC entries for subsequent audio tracks of the resulting CD will indicate that the audio data has no permission to be copied" -msgstr "" - -#: share/completions/cdrecord.fish:90 -msgid "If the master image for the next track has been stored on a raw disk, use this option to specify the valid amount of data on this disk" -msgstr "" - -#: share/completions/chgrp.fish:2 -#: share/completions/chown.fish:1 -msgid "Output diagnostic for changed files" -msgstr "Rapporter les changements effectués" - -#: share/completions/chgrp.fish:3 -#: share/completions/chown.fish:2 -msgid "Dereferense symbolic links" -msgstr "Déréférencer les liens symboliques" - -#: share/completions/chgrp.fish:4 -#: share/completions/chown.fish:3 -msgid "Do not dereference symbolic links" -msgstr "Ne pas déréférencer les liens symboliques" - -#: share/completions/chgrp.fish:5 -#: share/completions/chown.fish:4 -msgid "Change from owner/group" -msgstr "" - -#: share/completions/chgrp.fish:7 -#: share/completions/chown.fish:6 -msgid "Use same owner/group as file" -msgstr "Utiliser le même propriétaire/groupe que celui du fichier" - -#: share/completions/chgrp.fish:8 -#: share/completions/chown.fish:7 -#: share/completions/zip.fish:6 -msgid "Operate recursively" -msgstr "Opérer récursivement" - -#: share/completions/chgrp.fish:9 -#: share/completions/chown.fish:8 -msgid "Output diagnostic for every file" -msgstr "Afficher les détails pour chaque fichier" - -#: share/completions/chown.fish:11 -#: share/completions/chown.fish:12 -#: share/completions/w.fish:6 -msgid "Username" -msgstr "Nom d'utilisateur" - -#: share/completions/commandline.fish:1 -msgid "Add text to the end of the selected area" -msgstr "Ajouter du texte à la fin de la sélection" - -#: share/completions/commandline.fish:2 -msgid "Add text at cursor" -msgstr "Ajouter du texte au curseur" - -#: share/completions/commandline.fish:3 -msgid "Replace selected part" -msgstr "Remplacer la partie sélectionnée" - -#: share/completions/commandline.fish:5 -msgid "Select job under cursor" -msgstr "Sélectionner la tâche sous le curseur" - -#: share/completions/commandline.fish:6 -msgid "Select process under cursor" -msgstr "Sélectionner le processus sous le curseur" - -#: share/completions/commandline.fish:7 -msgid "Select token under cursor" -msgstr "Sélectionner le jeton sous le curseur" - -#: share/completions/commandline.fish:8 -msgid "Select entire command line (default)" -msgstr "Sélectionner la ligne de commande entière (défaut)" - -#: share/completions/commandline.fish:10 -msgid "Only return that part of the command line before the cursor" -msgstr "Retourner seulement la partie de la ligne de commande avant le curseur" - -#: share/completions/commandline.fish:11 -msgid "Inject readline functions to reader" -msgstr "" - -#: share/completions/complete.fish:1 -msgid "Command to add completion to" -msgstr "Commande à ajouter une complétion" - -#: share/completions/complete.fish:2 -msgid "Path to add completion to" -msgstr "Chemin à ajouter une complétion" - -#: share/completions/complete.fish:3 -msgid "Posix-style option to complete" -msgstr "Option de style Posix à compléter" - -#: share/completions/complete.fish:4 -msgid "GNU-style option to complete" -msgstr "Option de style GNU à compléter" - -#: share/completions/complete.fish:5 -msgid "Old style long option to complete" -msgstr "Vieux type d'option longue à compléter" - -#: share/completions/complete.fish:6 -msgid "Do not use file completion" -msgstr "Ne pas utiliser la complétion de fichier" - -#: share/completions/complete.fish:7 -msgid "Require parameter" -msgstr "Requiert un paramètre" - -#: share/completions/complete.fish:8 -msgid "Require parameter and do not use file completion" -msgstr "Requiert un paramètre et ne pas utiliser la complétion de fichier" - -#: share/completions/complete.fish:9 -msgid "A list of possible arguments" -msgstr "Une liste d'arguments possibles" - -#: share/completions/complete.fish:10 -msgid "Description of this completions" -msgstr "Description de cette complétion" - -#: share/completions/complete.fish:11 -msgid "Option list is not complete" -msgstr "Liste d'options incomplète" - -#: share/completions/complete.fish:12 -msgid "Remove completion" -msgstr "Enlever la complétion" - -#: share/completions/complete.fish:14 -msgid "Print all completions for the specified commandline" -msgstr "Afficher toutes les complétions pour la commande spécifiée" - -#: share/completions/complete.fish:15 -msgid "The completion should only be used if the specified command has a zero exit status" -msgstr "La complétion devrait seulement être utilisée si la commande spécifiée a un état de sortie de zéro" +#: share/completions/configure.fish:1 +#: share/functions/__fish_complete_diff.fish:27 +#: share/functions/__fish_complete_grep.fish:22 +#: share/functions/__fish_complete_ls.fish:95 +#: share/functions/__fish_complete_tex.fish:4 +msgid "Display help and exit" +msgstr "Afficher l'aide et quitter" #: share/completions/configure.fish:4 msgid "Cache test results in specified file" msgstr "" -#: share/completions/configure.fish:5 -msgid "Cache test results in file config.cache" +#: share/completions/cp.fish:10 share/completions/mv.fish:6 +msgid "Backup suffix" msgstr "" -#: share/completions/configure.fish:6 -msgid "Do not create output files" -msgstr "Ne pas créer de fichiers de sortie" - -#: share/completions/configure.fish:7 -msgid "Set source directory" -msgstr "Définir le répertoire source" - -#: share/completions/configure.fish:8 -msgid "Architecture-independent install directory" -msgstr "Répertoire d'installation des fichiers indépendants de l'architecture" - -#: share/completions/configure.fish:9 -msgid "Architecture-dependent install directory" -msgstr "Répertoire d'installation des fichiers dépendants de l'architectures" - -#: share/completions/configure.fish:10 -msgid "Configure for building on BUILD" +#: share/completions/cp.fish:20 +msgid "Don't preserve the specified attributes" msgstr "" -#: share/completions/configure.fish:11 -msgid "Cross-compile to build programs to run on HOST" +#: share/completions/cp.fish:24 +#, fuzzy +msgid "Control creation of sparse files" +msgstr "Ne pas créer de fichiers de sortie" + +#: share/completions/cp.fish:28 +msgid "Set security context of copy to CONTEXT" msgstr "" -#: share/completions/configure.fish:12 -msgid "Configure for building compilers for TARGET" -msgstr "" - -#: share/completions/cut.fish:1 +#: share/completions/cut.fish:2 msgid "Output byte range" msgstr "Plage d'octets de sortie" -#: share/completions/cut.fish:2 -msgid "Output character range" -msgstr "Plage de caractères de sortie" - #: share/completions/cut.fish:3 -msgid "Select field delimiter" -msgstr "Délimiteur de champs" +msgid "Output character range" +msgstr "Plage de caractères de sortie" #: share/completions/cut.fish:4 -msgid "Select fields" -msgstr "Sélectionner le champ" +msgid "Select field delimiter" +msgstr "Délimiteur de champs" #: share/completions/cut.fish:5 -msgid "Dont split mutibyte characters" -msgstr "Ne pas séparer les caractères multioctets" - -#: share/completions/cut.fish:6 -msgid "Do not print lines without delimiter" -msgstr "Ne pas afficher les lignes sans délimiteur" - -#: share/completions/cut.fish:7 -msgid "Select output delimiter" -msgstr "Choisir le délimiteur de sortie" - -#: share/completions/cvs.fish:23 -msgid "Add a new file/directory to the repository" -msgstr "Ajouter un fichier/répertoire au référentiel" - -#: share/completions/cvs.fish:24 -msgid "Administration front end for rcs" -msgstr "Façade d'administration pour rcs" - -#: share/completions/cvs.fish:25 -msgid "Show last revision where each line was modified" -msgstr "Afficher la dernière révision où chaque ligne a été modifiée" +msgid "Select fields" +msgstr "Sélectionner le champ" #: share/completions/cvs.fish:26 -msgid "Checkout sources for editing" -msgstr "Extraire les sources pour édition" +#, fuzzy +msgid "Use \\tmpdir for temporary files." +msgstr "Spécifier le répertoire temporaire" #: share/completions/cvs.fish:27 -msgid "Check files into the repository" -msgstr "Appliquer les modifications au référentiel" +#, fuzzy +msgid "Use \\editor for editing log information." +msgstr "Spécifier l'éditeur texte" #: share/completions/cvs.fish:28 -msgid "Show differences between revisions" -msgstr "Afficher les différences entre les révisions" - -#: share/completions/cvs.fish:29 -msgid "Get ready to edit a watched file" -msgstr "Préparation à l'édition d'un fichier surveillé" +#, sh-format +msgid "Overrides $CVSROOT as the root of the CVS tree." +msgstr "" #: share/completions/cvs.fish:30 +#, fuzzy +msgid "Request compression level \\# for net traffic." +msgstr "Niveau de compression pour le trafic réseau" + +#: share/completions/cvs.fish:35 +msgid "Set CVS user variable." +msgstr "" + +#: share/completions/cvs.fish:41 +msgid "Add a new file/directory to the repository" +msgstr "Ajouter un fichier/répertoire au référentiel" + +#: share/completions/cvs.fish:42 +msgid "Administration front end for rcs" +msgstr "Façade d'administration pour rcs" + +#: share/completions/cvs.fish:43 +msgid "Show last revision where each line was modified" +msgstr "Afficher la dernière révision où chaque ligne a été modifiée" + +#: share/completions/cvs.fish:44 +msgid "Checkout sources for editing" +msgstr "Extraire les sources pour édition" + +#: share/completions/cvs.fish:45 +msgid "Check files into the repository" +msgstr "Appliquer les modifications au référentiel" + +#: share/completions/cvs.fish:46 +msgid "Show differences between revisions" +msgstr "Afficher les différences entre les révisions" + +#: share/completions/cvs.fish:47 +msgid "Get ready to edit a watched file" +msgstr "Préparation à l'édition d'un fichier surveillé" + +#: share/completions/cvs.fish:48 msgid "See who is editing a watched file" -msgstr "Voir qui édite un fichier surveillé" +msgstr "Voir qui édite un fichier surveillé" -#: share/completions/cvs.fish:31 +#: share/completions/cvs.fish:49 msgid "Export sources from CVS, similar to checkout" -msgstr "Exporter les sources depuis le référentiel, similaire à \"checkout\"" +msgstr "Exporter les sources depuis le référentiel, similaire à \"checkout\"" -#: share/completions/cvs.fish:32 +#: share/completions/cvs.fish:50 msgid "Show repository access history" -msgstr "Afficher l'historique d'accès au référentiel" +msgstr "Afficher l'historique d'accès au référentiel" -#: share/completions/cvs.fish:33 +#: share/completions/cvs.fish:51 msgid "Import sources into CVS, using vendor branches" msgstr "Importer les sources dans le CVS, en utilisant les branches du vendeur" -#: share/completions/cvs.fish:34 -msgid "Create a CVS repository if it doesnt exist" -msgstr "Créer un référentiel CVS s'il n'existe pas" - -#: share/completions/cvs.fish:35 -msgid "Kerberos server mode" -msgstr "Mode serveur Kerberos" - -#: share/completions/cvs.fish:36 -msgid "Print out history information for files" -msgstr "Afficher l'historique pour les fichiers" - -#: share/completions/cvs.fish:37 -msgid "Prompt for password for authenticating server" -msgstr "Demander le mot de passe pour l'authentification" - -#: share/completions/cvs.fish:38 -msgid "Removes entry in .cvspass for remote repository" -msgstr "" - -#: share/completions/cvs.fish:39 -msgid "Password server mode" -msgstr "" - -#: share/completions/cvs.fish:40 -msgid "Show last revision where each line of module was modified" -msgstr "Afficher la dernière révision où chaque ligne de module a été modifiée" - -#: share/completions/cvs.fish:41 -msgid "Create patch format diffs between releases" -msgstr "Créer une différence de format patch entre les versions" - -#: share/completions/cvs.fish:42 -msgid "Indicate that a Module is no longer in use" -msgstr "Indiquer qu'un module n'est plus utilisé" - -#: share/completions/cvs.fish:43 -msgid "Remove an entry from the repository" -msgstr "Enlever un fichier du référentiel" - -#: share/completions/cvs.fish:44 -msgid "Print out history information for a module" -msgstr "Afficher l'historique d'un module" - -#: share/completions/cvs.fish:45 -msgid "Add a symbolic tag to a module" -msgstr "Ajouter une étiquette symbolique à un module" - -#: share/completions/cvs.fish:46 -msgid "Server mode" -msgstr "Mode serveur" - -#: share/completions/cvs.fish:47 -msgid "Display status information on checked out files" -msgstr "Afficher l'état des fichiers extraits" - -#: share/completions/cvs.fish:48 -msgid "Add a symbolic tag to checked out version of files" -msgstr "Ajouter une étiquette symbolique aux fichiers extraits" - -#: share/completions/cvs.fish:49 -msgid "Undo an edit command" -msgstr "Annuler une commande d'édition" - -#: share/completions/cvs.fish:50 -msgid "Bring work tree in sync with repository" -msgstr "Synchroniser le répertoire de travail avec le référentiel" - #: share/completions/cvs.fish:52 -msgid "Set watches" -msgstr "Surveiller des fichiers" - -#: share/completions/cvs.fish:53 -msgid "See who is watching a file" -msgstr "Voir qui surveille un fichier" - -#: share/completions/cvs.fish:59 -msgid "Specify legal cvsroot directory." -msgstr "" - -#: share/completions/cvs.fish:60 -msgid "Authenticate all net traffic" -msgstr "Authentifier tout le trafic réseau" - -#: share/completions/cvs.fish:61 -msgid "Use tmpdir for temporary files" -msgstr "Spécifier le répertoire temporaire" - -#: share/completions/cvs.fish:63 -msgid "Use editor for editing log information" -msgstr "Spécifier l'éditeur texte" - -#: share/completions/cvs.fish:64 -msgid "Do not use the ~/.cvsrc file" -msgstr "ne pas utiliser ~/.cvsrc" - -#: share/completions/cvs.fish:65 -msgid "Displays usage information for command" -msgstr "Afficher l'aide pour la commande" - -#: share/completions/cvs.fish:66 -msgid "Do not change any files" -msgstr "Ne pas modifier aucun fichier" - -#: share/completions/cvs.fish:67 -msgid "Cause CVS to be really quiet" -msgstr "Forcer le plus grand silence" - -#: share/completions/cvs.fish:68 -msgid "Read-only repository mode" -msgstr "Référentiel en lecture seule" - -#: share/completions/cvs.fish:69 -msgid "Cause CVS to be somewhat quiet" -msgstr "Forcer un certain silence" - -#: share/completions/cvs.fish:70 -msgid "Make checked-out files read-only" -msgstr "Mettre les fichiers extraits en lecture seule" - -#: share/completions/cvs.fish:71 -msgid "Set CVS user variable" -msgstr "" - -#: share/completions/cvs.fish:72 -msgid "Show trace of program execution -- try with -n" -msgstr "" - -#: share/completions/cvs.fish:74 -msgid "Make checked-out files read-write (default)" -msgstr "Mettre en lecture-écriture les fichiers extraits (défaut)" - -#: share/completions/cvs.fish:75 -msgid "Encrypt all net traffic" -msgstr "Encrypter tout le trafic réseau" - -#: share/completions/cvs.fish:76 -msgid "Compression level for net traffic" -msgstr "Niveau de compression pour le trafic réseau" - -#: share/completions/cvs.fish:82 -msgid "Use the most recent revision no later than date" -msgstr "Utiliser la plus récente version en date spécifiée" - -#: share/completions/cvs.fish:83 -msgid "Retrieve files even when no match for tag/date" -msgstr "Extraire les fichiers même si la date/étiquette ne concorde pas" - -#: share/completions/cvs.fish:84 -msgid "Alter default keyword processing" -msgstr "Altérer le traitement des mots-clés par défaut" - -#: share/completions/cvs.fish:85 -#: share/completions/svn.fish:52 -msgid "Don't recurse" -msgstr "Pas de récursion" - -#: share/completions/cvs.fish:86 -msgid "Specify log message instead of invoking editor" -msgstr "Spécifier le message de journal au lieu d'invoquer l'éditeur" - -#: share/completions/cvs.fish:87 -msgid "Don't run any tag programs" -msgstr "" - -#: share/completions/cvs.fish:88 -msgid "Prune empty directories" -msgstr "Effacer les répertoires vides" - -#: share/completions/cvs.fish:89 -msgid "Pipe files to stdout" -msgstr "Envoyer les fichiers vers le tube stdout" - -#: share/completions/cvs.fish:90 -msgid "Process directories recursively" -msgstr "Traiter les répertoires récursivement" +#, fuzzy +msgid "Create a CVS repository if it doesn\\t" +msgstr "Créer un référentiel CVS s'il n'existe pas" #: share/completions/cvs.fish:91 -msgid "Use a specified tag" -msgstr "Utiliser une étiquette spécifiée" - -#: share/completions/cvs.fish:92 -msgid "Specify filenames to be filtered" -msgstr "Spécifier les noms de fichier à filtrer" - -#: share/completions/cvs.fish:100 -msgid "Set the default keyword substitution" -msgstr "Définir la substitution de mots-clés par défaut" - -#: share/completions/cvs.fish:101 -msgid "Lock a revision" -msgstr "Verrouiller une révision" - -#: share/completions/cvs.fish:102 -msgid "Replace a log message" -msgstr "Remplacer un message du journal" - -#: share/completions/cvs.fish:103 -msgid "Force name/rev association" -msgstr "Forcer une association nom/rev" - -#: share/completions/cvs.fish:104 -msgid "Make a name/rev association" -msgstr "Faire une association nom/rev" - -#: share/completions/cvs.fish:105 -msgid "Run quietly" -msgstr "Exécution en silence" - -#: share/completions/cvs.fish:106 -msgid "Set a state attribute for a revision" -msgstr "Définir un attribut d'état pour une révision" - -#: share/completions/cvs.fish:107 -msgid "Write descriptive text from a file into RCS" +msgid "Set comment leader." msgstr "" -#: share/completions/cvs.fish:108 -msgid "Write descriptive text into RCS" -msgstr "" +#: share/completions/cvs.fish:94 +#, fuzzy +msgid "Set keyword substitution mode:" +msgstr "Définir la substitution de mots-clés par défaut" -#: share/completions/cvs.fish:109 -msgid "Unlock a revision" -msgstr "Déverrouiller une révision" - -#: share/completions/cvs.fish:116 -msgid "Annotate binary files" -msgstr "Annoter un fichier binaire" - -#: share/completions/cvs.fish:123 -msgid "Reset sticky tags/dates/k-opts" -msgstr "" - -#: share/completions/cvs.fish:124 -msgid "Copy module file to stdout" -msgstr "Copier le fichier module vers stdout" - -#: share/completions/cvs.fish:125 -#: share/completions/cvs.fish:182 -msgid "Name directory for working files" -msgstr "Nommer le répertoire pour les fichiers de travail" - -#: share/completions/cvs.fish:126 -#: share/completions/cvs.fish:250 -msgid "Merge revisions" -msgstr "Fusionner les révisions" - -#: share/completions/cvs.fish:127 -#: share/completions/cvs.fish:183 -msgid "For -d. Don't shorten paths" -msgstr "Pour -d. Ne pas réduire les chemins" - -#: share/completions/cvs.fish:134 -msgid "Read log message from file" -msgstr "Lire le journal depuis le fichier" +#: share/completions/cvs.fish:97 +#, fuzzy +msgid "Replace revision\\s" +msgstr "Fusionner les révisions" #: share/completions/cvs.fish:135 -msgid "Force new revision" -msgstr "Forcer une nouvelle révision" +msgid "Check out revision or tag. (implies -P) (is sticky)" +msgstr "" -#: share/completions/cvs.fish:142 -#: share/completions/diff.fish:10 -msgid "Treat all files as text" -msgstr "Traiter tous les fichiers comme du texte" +#: share/completions/cvs.fish:136 +msgid "Check out revisions as of date. (implies -P) (is sticky)" +msgstr "" -#: share/completions/cvs.fish:143 -msgid "Treat all whitespace as one space" -msgstr "Traiter tous les blancs comme un seul espace" +#: share/completions/cvs.fish:137 +msgid "Check out into dir instead of module name." +msgstr "" -#: share/completions/cvs.fish:144 -msgid "Ignore blank line only changes" -msgstr "Ignorer les changements de lignes blanches" +#: share/completions/cvs.fish:138 +msgid "Use RCS kopt -k option on checkout. (is sticky)" +msgstr "" -#: share/completions/cvs.fish:145 -msgid "Binary mode" -msgstr "Mode binaire" - -#: share/completions/cvs.fish:146 -msgid "Report only whether files differ" -msgstr "Rapporter seulement si les fichiers diffèrent" - -#: share/completions/cvs.fish:147 -msgid "Use context format" -msgstr "Utiliser le format du contexte" - -#: share/completions/cvs.fish:148 -msgid "Set context size" -msgstr "Définir la taille du contexte" - -#: share/completions/cvs.fish:149 -msgid "Set context format and, optionally, size" +#: share/completions/cvs.fish:139 +msgid "Merge in changes made between current revision and rev." msgstr "" #: share/completions/cvs.fish:150 -msgid "Set line group format" -msgstr "" +#, fuzzy +msgid "Read the log message from file." +msgstr "Lire le journal depuis le fichier" #: share/completions/cvs.fish:151 -#: share/completions/diff.fish:21 -msgid "Try to find a smaller set of changes" -msgstr "" +#, fuzzy +msgid "Log message." +msgstr "Remplacer un message du journal" #: share/completions/cvs.fish:152 -msgid "Make output a valid ed script" -msgstr "Faire de la sortie un script ed valide" - -#: share/completions/cvs.fish:153 -msgid "Expand tabs to spaces" -msgstr "Remplacer les tabs par des espaces" - -#: share/completions/cvs.fish:154 -msgid "Output that looks like an ed script" -msgstr "Sortie qui ressemble à un script ed" - -#: share/completions/cvs.fish:155 -msgid "Set regexp for context, unified formats" -msgstr "" - -#: share/completions/cvs.fish:156 -msgid "Speed handling of large files with small changes" -msgstr "Traitement rapide des gros fichiers avec de petits changements" - -#: share/completions/cvs.fish:157 -msgid "Set horizon lines" -msgstr "" - -#: share/completions/cvs.fish:158 -msgid "Ignore changes in case" -msgstr "Ignorer les changements de casse" - -#: share/completions/cvs.fish:159 -msgid "Ignore changes matching regexp" -msgstr "Ignorer les changements correspondants à la regexp" - -#: share/completions/cvs.fish:160 -msgid "Make ifdef from diff" +msgid "Commit to this branch or trunk revision." msgstr "" #: share/completions/cvs.fish:161 -msgid "Ignore whitespace" -msgstr "Ignorer les blancs" +#, fuzzy +msgid "Specify keyword expansion mode." +msgstr "Spécifier le type d'enregistrement" #: share/completions/cvs.fish:162 -msgid "Start lines with a tab" -msgstr "Commencer les lignes avec une tabulation" +msgid "Diff revision for date against working file." +msgstr "" #: share/completions/cvs.fish:163 -msgid "Use label instead of filename in output" -msgstr "Utiliser l'étiquette au lieu du nom de fichier pour la sortie" +msgid "Diff rev1/date1 against date2." +msgstr "" #: share/completions/cvs.fish:164 -msgid "Print only left column" -msgstr "Afficher seulement la colonne de gauche" +msgid "Diff revision for rev1 against working file." +msgstr "" #: share/completions/cvs.fish:165 -msgid "Use format to produce if-then-else output" +msgid "Diff rev1/date1 against rev2." msgstr "" -#: share/completions/cvs.fish:166 -msgid "Produce RCS-style diffs" -msgstr "" - -#: share/completions/cvs.fish:167 -msgid "Treat files absent from one dir as empty" -msgstr "Traiter les fichiers absents d'un rép. comme vides" - -#: share/completions/cvs.fish:168 -msgid "Specifies line formatting" -msgstr "Spécifier le format de ligne" - -#: share/completions/cvs.fish:169 -msgid "Identify the C function each change is in" -msgstr "Identifier la fonction C contenant chaque changement" - #: share/completions/cvs.fish:170 -msgid "Report identical files" -msgstr "Rapporter les fichiers identiques" - -#: share/completions/cvs.fish:171 -msgid "Use side-by-side format" -msgstr "Utiliser le format côte-à-côte" - -#: share/completions/cvs.fish:172 -msgid "Suppress common lines in side-by-side" -msgstr "Supprimer les lignes communes dans le côte-à-côte" - -#: share/completions/cvs.fish:173 -msgid "Use unified format" -msgstr "Utiliser le format unifié" - -#: share/completions/cvs.fish:174 -msgid "Set context size in unified" -msgstr "Définir la taille du contexte du format unifié" - -#: share/completions/cvs.fish:175 -msgid "Set column width for side-by-side format" -msgstr "Définir la largeur des colonnes pour le côte-à-côte" - -#: share/completions/cvs.fish:191 -msgid "Report on each commit" +msgid "--ignore-matching-lines=RE Ignore changes whose lines all match RE." msgstr "" -#: share/completions/cvs.fish:192 -msgid "Report on everything" -msgstr "Tout rapporter" - -#: share/completions/cvs.fish:193 -msgid "Report on a module" -msgstr "Rapporter un module" - -#: share/completions/cvs.fish:194 -msgid "Report on checked-out modules" -msgstr "Rapporter les modules extraits" - -#: share/completions/cvs.fish:195 -msgid "Report on all tags" -msgstr "Rapporter les étiquettes" - -#: share/completions/cvs.fish:196 -msgid "Specify record type" -msgstr "Spécifier le type d'enregistrement" - -#: share/completions/cvs.fish:197 -msgid "Show history for all users" -msgstr "Afficher l'historique de tous les utilisateurs" - -#: share/completions/cvs.fish:198 -msgid "Show last modification only" -msgstr "Afficher les dernières modifications seulement" - -#: share/completions/cvs.fish:199 -msgid "Show only records for this directory" -msgstr "Afficher seulement les enregistrements pour ce répertoire" - -#: share/completions/cvs.fish:206 -msgid "Multiple vendor branch" -msgstr "Branche à vendeur multiple" - -#: share/completions/cvs.fish:207 -msgid "Files to ignore during import" -msgstr "Fichier à ignorer durant l'import" - -#: share/completions/cvs.fish:214 -msgid "Print info about revision on default branch" +#: share/completions/cvs.fish:176 +msgid "--label LABEL Use LABEL instead of file name." msgstr "" -#: share/completions/cvs.fish:215 -msgid "Specify date range for query" +#: share/completions/cvs.fish:178 +msgid "--show-function-line=RE Show the most recent line matching RE." msgstr "" -#: share/completions/cvs.fish:216 -msgid "Print only file info" +#: share/completions/cvs.fish:184 +msgid "--width=NUM Output at most NUM (default 130) characters per line." msgstr "" -#: share/completions/cvs.fish:217 -msgid "Do not print tags" -msgstr "" +#: share/completions/cvs.fish:228 +#, fuzzy +msgid "Export tagged revisions." +msgstr "Fusionner les révisions" -#: share/completions/cvs.fish:218 -msgid "Print only rcs filename" -msgstr "" - -#: share/completions/cvs.fish:219 -msgid "Print only given revisions" -msgstr "" - -#: share/completions/cvs.fish:220 -msgid "Suppress header if no revisions found" -msgstr "" - -#: share/completions/cvs.fish:221 -msgid "Specify revision states" -msgstr "" - -#: share/completions/cvs.fish:222 -msgid "Same as -h, plus descriptive text" -msgstr "" - -#: share/completions/cvs.fish:223 -msgid "Specify users for query" +#: share/completions/cvs.fish:229 +msgid "Export revisions as of date." msgstr "" #: share/completions/cvs.fish:230 -msgid "Use context diff format" +msgid "Export into dir instead of module name." msgstr "" #: share/completions/cvs.fish:231 -msgid "Create summary change report" +msgid "Use RCS kopt -k option on checkout." msgstr "" -#: share/completions/cvs.fish:232 -msgid "diff top two revisions" +#: share/completions/cvs.fish:241 +msgid "Look for specified module (repeatable)" msgstr "" -#: share/completions/cvs.fish:233 -msgid "Use unidiff format" -msgstr "" - -#: share/completions/cvs.fish:239 -msgid "Delete working copy if release succeeds" -msgstr "" - -#: share/completions/cvs.fish:246 -msgid "Reset sticky tags, dates, and k-opts" -msgstr "" +#: share/completions/cvs.fish:242 +#, fuzzy +msgid "Extract by record type" +msgstr "Spécifier le type d'enregistrement" #: share/completions/cvs.fish:247 -msgid "Overwrite modified files with clean copies" +msgid "Since date (Many formats)" msgstr "" #: share/completions/cvs.fish:248 -msgid "Create any missing directories" +msgid "Back to record with str in module/file/repos field" msgstr "" #: share/completions/cvs.fish:249 -msgid "Specify files to ignore" +msgid "Specified file (same as command line) (repeatable)" msgstr "" -#: share/completions/darcs.fish:28 -msgid "Create new project" +#: share/completions/cvs.fish:250 +msgid "In module (repeatable)" msgstr "" -#: share/completions/darcs.fish:29 -msgid "Create a local copy of another repository" +#: share/completions/cvs.fish:251 +msgid "In repository (repeatable)" msgstr "" -#: share/completions/darcs.fish:30 +#: share/completions/cvs.fish:252 +msgid "Since rev or tag (looks inside RCS files!)" +msgstr "" + +#: share/completions/cvs.fish:253 +msgid "Since tag record placed in history file (by anyone)." +msgstr "" + +#: share/completions/cvs.fish:254 +msgid "For user name (repeatable)" +msgstr "" + +#: share/completions/cvs.fish:255 +msgid "Output for time zone (e.g. -z -0700)" +msgstr "" + +#: share/completions/darcs.fish:19 +msgid "Display help about darcs and darcs commands" +msgstr "" + +#: share/completions/darcs.fish:20 msgid "Add one or more new files or directories" msgstr "" -#: share/completions/darcs.fish:31 -msgid "Remove one or more files or directories from the repository" +#: share/completions/darcs.fish:21 +#, fuzzy +msgid "Remove files from version control" +msgstr "Supprimer tous les fichiers gz de la cache" + +#: share/completions/darcs.fish:22 +#, fuzzy +msgid "Move or rename files" +msgstr "Rapporter les fichiers identiques" + +#: share/completions/darcs.fish:23 +msgid "Substitute one word for another" msgstr "" -#: share/completions/darcs.fish:32 -msgid "Move/rename one or more files or directories" +#: share/completions/darcs.fish:24 +msgid "Discard unrecorded changes" msgstr "" -#: share/completions/darcs.fish:33 -msgid "Replace a token with a new value for that token" -msgstr "" - -#: share/completions/darcs.fish:34 -msgid "Save changes in the working copy to the repository as a patch" -msgstr "" - -#: share/completions/darcs.fish:35 -msgid "Copy and apply patches from another repository to this one" -msgstr "" - -#: share/completions/darcs.fish:36 -msgid "Send by email a bundle of one or more patches" -msgstr "" - -#: share/completions/darcs.fish:37 -msgid "Apply patches (from an email bundle) to the repository" -msgstr "" - -#: share/completions/darcs.fish:38 -msgid "Copy and apply patches from this repository to another one" -msgstr "" - -#: share/completions/darcs.fish:39 -msgid "Display unrecorded changes in the working copy" -msgstr "" - -#: share/completions/darcs.fish:40 -msgid "Gives a changelog style summary of the repo history" -msgstr "" - -#: share/completions/darcs.fish:41 -msgid "Remove recorded patches without changing the working copy" -msgstr "" - -#: share/completions/darcs.fish:42 -msgid "Replace a recorded patch with a better version" -msgstr "" - -#: share/completions/darcs.fish:43 -msgid "Revert to the recorded version (safe the first time only)" -msgstr "" - -#: share/completions/darcs.fish:44 +#: share/completions/darcs.fish:25 msgid "Undo the last revert (may fail if changes after the revert)" msgstr "" -#: share/completions/darcs.fish:45 -msgid "Opposite of pull; unsafe if the patch is not in remote repo" +#: share/completions/darcs.fish:26 +#, fuzzy +msgid "List unrecorded changes in the working tree" +msgstr "Ignorer les changements correspondants à la regexp" + +#: share/completions/darcs.fish:27 +#, fuzzy +msgid "Create a patch from unrecorded changes" +msgstr "Créer une différence de format patch entre les versions" + +#: share/completions/darcs.fish:28 +msgid "Remove recorded patches without changing the working copy" msgstr "" -#: share/completions/darcs.fish:46 -msgid "Record an inverse patch without changing the working copy" +#: share/completions/darcs.fish:29 +#, fuzzy +msgid "Improve a patch before it leaves your repository" +msgstr "Enlever un fichier du référentiel" + +#: share/completions/darcs.fish:30 +msgid "Mark unresolved conflicts in working tree, for manual resolution" msgstr "" -#: share/completions/darcs.fish:47 -msgid "Tag the contents of the repository with a version name" +#: share/completions/darcs.fish:31 +msgid "Name the current repository state for future reference" msgstr "" -#: share/completions/darcs.fish:48 -msgid "Set a value for a preference (test, predist, ...)" +#: share/completions/darcs.fish:32 +msgid "Set a preference (test, predist, boringfile or binariesfile)" msgstr "" -#: share/completions/darcs.fish:49 +#: share/completions/darcs.fish:33 msgid "Create a diff between two versions of the repository" msgstr "" -#: share/completions/darcs.fish:50 +#: share/completions/darcs.fish:34 +#, fuzzy +msgid "List patches in the repository" +msgstr "Mettre à jour le référentiel" + +#: share/completions/darcs.fish:35 msgid "Display which patch last modified something" msgstr "" -#: share/completions/darcs.fish:51 -msgid "Optimize the repository" -msgstr "" - -#: share/completions/darcs.fish:52 -msgid "Check the repository for consistency" -msgstr "" - -#: share/completions/darcs.fish:53 -msgid "Mark any conflicts to the working copy for manual resolution" -msgstr "" - -#: share/completions/darcs.fish:54 +#: share/completions/darcs.fish:36 msgid "Create a distribution tarball" msgstr "" -#: share/completions/darcs.fish:55 +#: share/completions/darcs.fish:37 msgid "Locate the most recent version lacking an error" msgstr "" -#: share/completions/darcs.fish:56 -msgid "Repair the corrupted repository" +#: share/completions/darcs.fish:38 +msgid "Show information which is stored by darcs" msgstr "" -#: share/completions/darcs.fish:61 -msgid "Shows brief description of command and its arguments" +#: share/completions/darcs.fish:39 +msgid "Copy and apply patches from another repository to this one" msgstr "" -#: share/completions/darcs.fish:62 -msgid "Disable this command" +#: share/completions/darcs.fish:40 +msgid "Delete selected patches from the repository. (UNSAFE!)" msgstr "" -#: share/completions/darcs.fish:63 +#: share/completions/darcs.fish:41 +msgid "Record a new patch reversing some recorded changes" +msgstr "" + +#: share/completions/darcs.fish:42 +msgid "Copy and apply patches from this repository to another one" +msgstr "" + +#: share/completions/darcs.fish:43 +msgid "Send by email a bundle of one or more patches" +msgstr "" + +#: share/completions/darcs.fish:44 +msgid "" +"Apply a patch bundle created by `darcs send\\\n" +"complete -c darcs -n __fish_use_subcommand -x -a get --description Create" +msgstr "" + +#: share/completions/darcs.fish:71 share/completions/darcs.fish:220 +#: share/completions/darcs.fish:283 share/completions/darcs.fish:439 +#: share/completions/darcs.fish:597 share/completions/darcs.fish:632 +#: share/completions/darcs.fish:663 share/completions/darcs.fish:688 +#: share/completions/darcs.fish:801 share/completions/darcs.fish:959 +#: share/completions/darcs.fish:1010 share/completions/darcs.fish:1054 +#: share/completions/darcs.fish:1095 share/completions/darcs.fish:1122 +#: share/completions/darcs.fish:1155 +msgid "Specify command to run before this darcs command" +msgstr "" + +#: share/completions/darcs.fish:101 share/completions/darcs.fish:127 +#: share/completions/darcs.fish:156 share/completions/darcs.fish:186 +#: share/completions/darcs.fish:244 share/completions/darcs.fish:324 +#: share/completions/darcs.fish:363 share/completions/darcs.fish:406 +#: share/completions/darcs.fish:467 share/completions/darcs.fish:492 +#: share/completions/darcs.fish:840 share/completions/darcs.fish:1004 +#: share/completions/darcs.fish:1207 +msgid "Specify umask to use when writing" +msgstr "" + +#: share/completions/darcs.fish:102 share/completions/darcs.fish:128 +#: share/completions/darcs.fish:157 share/completions/darcs.fish:187 +#: share/completions/darcs.fish:245 share/completions/darcs.fish:326 +#: share/completions/darcs.fish:364 share/completions/darcs.fish:408 +#: share/completions/darcs.fish:468 share/completions/darcs.fish:493 +#: share/completions/darcs.fish:537 share/completions/darcs.fish:753 +#: share/completions/darcs.fish:841 share/completions/darcs.fish:893 +#: share/completions/darcs.fish:1183 share/completions/darcs.fish:1208 +#: share/completions/darcs.fish:1239 +msgid "Specify command to run after this darcs command" +msgstr "" + +#: share/completions/darcs.fish:116 share/completions/darcs.fish:146 +#: share/completions/darcs.fish:203 share/completions/darcs.fish:234 +#: share/completions/darcs.fish:264 share/completions/darcs.fish:352 +#: share/completions/darcs.fish:456 share/completions/darcs.fish:482 +#: share/completions/darcs.fish:525 share/completions/darcs.fish:725 +#: share/completions/darcs.fish:779 share/completions/darcs.fish:829 +#: share/completions/darcs.fish:870 share/completions/darcs.fish:985 +#: share/completions/darcs.fish:1073 share/completions/darcs.fish:1197 msgid "Specify the repository directory in which to run" msgstr "" -#: share/completions/darcs.fish:65 -msgid "Neither verbose nor quiet output" -msgstr "" +#: share/completions/darcs.fish:171 +#, fuzzy +msgid "Define token to contain these characters" +msgstr "Ne pas séparer les caractères multioctets" -#: share/completions/darcs.fish:72 -msgid "Name of patch" -msgstr "" - -#: share/completions/darcs.fish:73 -#: share/completions/darcs.fish:165 -msgid "Specify author id" -msgstr "" - -#: share/completions/darcs.fish:74 -msgid "Give patch name and comment in file" -msgstr "" - -#: share/completions/darcs.fish:75 -#: share/completions/darcs.fish:98 -#: share/completions/darcs.fish:119 -#: share/completions/darcs.fish:164 -msgid "Answer yes to all patches" -msgstr "" - -#: share/completions/darcs.fish:76 -msgid "In addition to modifications, look for files that are not boring, and thus are potentially pending addition" -msgstr "" - -#: share/completions/darcs.fish:77 -msgid "Delete the logfile when done" -msgstr "" - -#: share/completions/darcs.fish:78 -#: share/completions/darcs.fish:107 -#: share/completions/darcs.fish:134 -#: share/completions/darcs.fish:148 -msgid "Don't run the test script" -msgstr "" - -#: share/completions/darcs.fish:79 -#: share/completions/darcs.fish:106 -#: share/completions/darcs.fish:135 -#: share/completions/darcs.fish:149 -msgid "Run the test script" -msgstr "" - -#: share/completions/darcs.fish:80 -#: share/completions/darcs.fish:137 -#: share/completions/darcs.fish:150 -msgid "Don't remove the test directory" -msgstr "" - -#: share/completions/darcs.fish:81 -#: share/completions/darcs.fish:138 -#: share/completions/darcs.fish:151 -msgid "Remove the test directory" -msgstr "" - -#: share/completions/darcs.fish:82 -#: share/completions/darcs.fish:104 -#: share/completions/darcs.fish:128 -msgid "Create compressed patches" -msgstr "" - -#: share/completions/darcs.fish:83 -#: share/completions/darcs.fish:105 -#: share/completions/darcs.fish:129 -msgid "Don't create compressed patches" -msgstr "" - -#: share/completions/darcs.fish:84 -msgid "Expect to receive input from a pipe" -msgstr "" - -#: share/completions/darcs.fish:85 -#: share/completions/darcs.fish:103 -#: share/completions/darcs.fish:130 -#: share/completions/darcs.fish:170 -msgid "Prompt user interactively" -msgstr "" - -#: share/completions/darcs.fish:86 -msgid "Ask for extra dependencies" -msgstr "" - -#: share/completions/darcs.fish:87 -msgid "Don't ask for extra dependencies" -msgstr "" - -#: share/completions/darcs.fish:88 -msgid "Edit the long comment by default" -msgstr "" - -#: share/completions/darcs.fish:89 -msgid "Don't give a long comment" -msgstr "" - -#: share/completions/darcs.fish:90 -msgid "Prompt for whether to edit the long comment" -msgstr "" - -#: share/completions/darcs.fish:91 -#: share/completions/darcs.fish:110 -#: share/completions/darcs.fish:127 -msgid "Don't trust the file modification times" -msgstr "" - -#: share/completions/darcs.fish:92 -msgid "Don't look for any files or directories that could be added, and don't add them automatically" -msgstr "" - -#: share/completions/darcs.fish:96 -#: share/completions/darcs.fish:162 -#: share/completions/darcs.fish:213 -msgid "Select patches matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:97 -#: share/completions/darcs.fish:163 -#: share/completions/darcs.fish:214 -msgid "Select tags matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:99 -#: share/completions/darcs.fish:168 -#: share/completions/darcs.fish:193 -#: share/completions/darcs.fish:218 -msgid "Summarize changes" -msgstr "" - -#: share/completions/darcs.fish:100 -#: share/completions/darcs.fish:145 -#: share/completions/darcs.fish:161 -#: share/completions/darcs.fish:220 -#: share/completions/darcs.fish:232 -#: share/completions/darcs.fish:234 -msgid "Suppress informational output" -msgstr "" - -#: share/completions/darcs.fish:101 -#: share/completions/darcs.fish:169 -#: share/completions/darcs.fish:212 -msgid "Select patches matching PATTERN" -msgstr "" - -#: share/completions/darcs.fish:102 -#: share/completions/darcs.fish:125 -msgid "Use external tool to merge conflicts" -msgstr "" - -#: share/completions/darcs.fish:108 -#: share/completions/darcs.fish:178 -#: share/completions/darcs.fish:233 -msgid "Don't actually take the action" -msgstr "" - -#: share/completions/darcs.fish:109 -#: share/completions/darcs.fish:179 -#: share/completions/darcs.fish:194 -#: share/completions/darcs.fish:219 -msgid "Don't summarize changes" -msgstr "" - -#: share/completions/darcs.fish:111 -msgid "Don't automatically fulfill dependencies" -msgstr "" - -#: share/completions/darcs.fish:112 -#: share/completions/darcs.fish:182 -msgid "Set default repository [DEFAULT]" -msgstr "" - -#: share/completions/darcs.fish:113 -#: share/completions/darcs.fish:183 -msgid "Don't set default repository" -msgstr "" - -#: share/completions/darcs.fish:114 -#: share/completions/darcs.fish:139 -msgid "Make scripts executable" -msgstr "" - -#: share/completions/darcs.fish:115 -#: share/completions/darcs.fish:140 -msgid "Don't make scripts executable" -msgstr "" - -#: share/completions/darcs.fish:120 -msgid "Verify that the patch was signed by a key in PUBRING" -msgstr "" - -#: share/completions/darcs.fish:121 -msgid "Verify using openSSL with authorized keys from specified file" -msgstr "" - -#: share/completions/darcs.fish:122 -#: share/completions/darcs.fish:184 -msgid "Specify sendmail command" -msgstr "" - -#: share/completions/darcs.fish:123 -msgid "Reply to email-based patch using FROM address" -msgstr "" - -#: share/completions/darcs.fish:124 -#: share/completions/darcs.fish:173 -msgid "Mail results to additional EMAIL(s). Requires --reply" -msgstr "" - -#: share/completions/darcs.fish:126 -msgid "Don't verify patch signature" -msgstr "" - -#: share/completions/darcs.fish:131 -msgid "Mark conflicts" -msgstr "" - -#: share/completions/darcs.fish:132 -msgid "Allow conflicts, but don't mark them" -msgstr "" - -#: share/completions/darcs.fish:133 -msgid "Fail on patches that create conflicts [DEFAULT]" -msgstr "" - -#: share/completions/darcs.fish:136 -msgid "Forward unsigned messages without extra header" -msgstr "" - -#: share/completions/darcs.fish:146 -msgid "Check the entire repository" -msgstr "" - -#: share/completions/darcs.fish:147 -msgid "Check patches since latest checkpoint" -msgstr "" - -#: share/completions/darcs.fish:156 -#: share/completions/darcs.fish:227 -msgid "Don't refuse to add files differing only in case" -msgstr "" - -#: share/completions/darcs.fish:166 -msgid "Specify output filename" -msgstr "" - -#: share/completions/darcs.fish:167 -#: share/completions/darcs.fish:195 -msgid "Output patch in a darcs-specific format similar to diff -u" -msgstr "" - -#: share/completions/darcs.fish:172 -msgid "Specify destination email" -msgstr "" - -#: share/completions/darcs.fish:174 -msgid "Sign the patch with your gpg key" -msgstr "" - -#: share/completions/darcs.fish:175 -msgid "Sign the patch with a given keyid" -msgstr "" - -#: share/completions/darcs.fish:176 -msgid "Sign the patch using openssl with a given private key" -msgstr "" - -#: share/completions/darcs.fish:177 -msgid "Do not sign the patch" -msgstr "" - -#: share/completions/darcs.fish:180 -msgid "Send to context stored in FILENAME" -msgstr "" - -#: share/completions/darcs.fish:181 -msgid "Edit the patch bundle description" -msgstr "" - -#: share/completions/darcs.fish:188 -msgid "Use a plain pristine tree [DEFAULT]" -msgstr "" - -#: share/completions/darcs.fish:189 -msgid "Use no pristine tree" -msgstr "" - -#: share/completions/darcs.fish:196 -msgid "Give human readable output" -msgstr "" - -#: share/completions/darcs.fish:197 -#: share/completions/darcs.fish:216 -msgid "Generate XML formatted output" -msgstr "" - -#: share/completions/darcs.fish:198 -msgid "Select patch matching PATTERN" -msgstr "" - -#: share/completions/darcs.fish:199 -msgid "Select patch matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:200 -msgid "Select tag matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:201 -msgid "Specify hash of creator patch (see docs)" -msgstr "" - -#: share/completions/darcs.fish:205 -msgid "Select changes up to a patch matching PATTERN" -msgstr "" - -#: share/completions/darcs.fish:206 -msgid "Select changes up to a patch matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:207 -msgid "Select changes up to a tag matching REGEXP" -msgstr "" - -#: share/completions/darcs.fish:208 +#: share/completions/darcs.fish:340 share/completions/darcs.fish:554 +#: share/completions/darcs.fish:767 msgid "Select changes starting with a patch matching PATTERN" msgstr "" -#: share/completions/darcs.fish:209 +#: share/completions/darcs.fish:341 share/completions/darcs.fish:555 +#: share/completions/darcs.fish:768 msgid "Select changes starting with a patch matching REGEXP" msgstr "" -#: share/completions/darcs.fish:210 +#: share/completions/darcs.fish:342 share/completions/darcs.fish:556 +#: share/completions/darcs.fish:769 msgid "Select changes starting with a tag matching REGEXP" msgstr "" -#: share/completions/darcs.fish:211 +#: share/completions/darcs.fish:343 share/completions/darcs.fish:557 +#: share/completions/darcs.fish:770 msgid "Select the last NUMBER patches" msgstr "" -#: share/completions/darcs.fish:215 -msgid "Give output suitable for get --context" +#: share/completions/darcs.fish:344 share/completions/darcs.fish:559 +#: share/completions/darcs.fish:771 share/completions/darcs.fish:855 +#: share/completions/darcs.fish:907 +msgid "Select patches matching PATTERN" msgstr "" -#: share/completions/darcs.fish:217 -msgid "Give human-readable output" +#: share/completions/darcs.fish:345 share/completions/darcs.fish:560 +#: share/completions/darcs.fish:772 share/completions/darcs.fish:856 +#: share/completions/darcs.fish:908 +msgid "Select patches matching REGEXP" msgstr "" -#: share/completions/darcs.fish:221 -msgid "Show changes in reverse order" +#: share/completions/darcs.fish:346 share/completions/darcs.fish:561 +#: share/completions/darcs.fish:773 share/completions/darcs.fish:857 +#: share/completions/darcs.fish:909 +msgid "Select tags matching REGEXP" msgstr "" -#: share/completions/darcs.fish:222 -msgid "Specify the repository URL" +#: share/completions/darcs.fish:378 +msgid "Select a single patch matching PATTERN" msgstr "" -#: share/completions/darcs.fish:226 -msgid "Don't skip boring files" +#: share/completions/darcs.fish:379 +msgid "Select a single patch matching REGEXP" msgstr "" -#: share/completions/darcs.fish:228 -msgid "Add contents of subdirectories" +#: share/completions/darcs.fish:380 +#, fuzzy +msgid "Select one patch" +msgstr "Choisir une action" + +#: share/completions/darcs.fish:387 share/completions/darcs.fish:916 +msgid "Specify author id" msgstr "" -#: share/completions/darcs.fish:229 -msgid "Don't add contents of subdirectories" +#: share/completions/darcs.fish:388 +msgid "Name of patch" msgstr "" -#: share/completions/darcs.fish:230 -msgid "Add files with date appended to avoid conflict. [EXPERIMENTAL]" +#: share/completions/darcs.fish:501 +msgid "Shell command that runs regression tests" msgstr "" -#: share/completions/darcs.fish:231 -msgid "Don't use experimental date appending trick. [DEFAULT]" +#: share/completions/darcs.fish:502 +msgid "" +"Shell command to run before `darcs dist\\\n" +"complete -c darcs -n contains" msgstr "" -#: share/completions/date.fish:1 -msgid "Display date described by string" +#: share/completions/darcs.fish:551 share/completions/darcs.fish:1025 +msgid "Select changes up to a patch matching PATTERN" msgstr "" -#: share/completions/date.fish:2 -msgid "Display date for each line in file" +#: share/completions/darcs.fish:552 share/completions/darcs.fish:1026 +msgid "Select changes up to a patch matching REGEXP" msgstr "" -#: share/completions/date.fish:3 -msgid "Output in ISO 8601 format" +#: share/completions/darcs.fish:553 +msgid "Select changes up to a tag matching REGEXP" msgstr "" -#: share/completions/date.fish:4 -#: share/completions/touch.fish:9 -msgid "Set time" +#: share/completions/darcs.fish:558 +#, fuzzy +msgid "Select a range of patches" +msgstr "Sélectionner l'interface" + +#: share/completions/darcs.fish:562 +msgid "Return only NUMBER results" msgstr "" -#: share/completions/date.fish:5 -msgid "Output RFC-2822 compliant date string" +#: share/completions/darcs.fish:713 share/completions/darcs.fish:980 +msgid "Use external tool to merge conflicts" msgstr "" -#: share/completions/date.fish:6 -msgid "Display the last modification time of file" +#: share/completions/darcs.fish:752 share/completions/darcs.fish:892 +#: share/completions/darcs.fish:1238 +msgid "Name of the darcs executable on the remote server" msgstr "" -#: share/completions/date.fish:7 -#: share/completions/date.fish:8 -msgid "Print or set Coordinated Universal Time" +#: share/completions/darcs.fish:864 share/completions/darcs.fish:923 +msgid "Sign the patch with a given keyid" msgstr "" -#: share/completions/df.fish:12 -#: share/completions/du.fish:7 -#: share/functions/__fish_complete_ls.fish:24 -msgid "Human readable sizes" +#: share/completions/darcs.fish:865 share/completions/darcs.fish:924 +msgid "Sign the patch using openssl with a given private key" msgstr "" -#: share/completions/df.fish:13 -msgid "List inode information" +#: share/completions/darcs.fish:886 +msgid "Specify the remote repository URL to work with" msgstr "" -#: share/completions/df.fish:14 -#: share/completions/du.fish:9 -msgid "Use 1kB block size" +#: share/completions/darcs.fish:915 +msgid "Specify email address" +msgstr "Spécifier l'adresse de courriel" + +#: share/completions/darcs.fish:917 +msgid "Specify destination email" msgstr "" -#: share/completions/df.fish:15 -msgid "List only local filesystems" +#: share/completions/darcs.fish:918 +msgid "Mail results to additional EMAIL(s)" msgstr "" -#: share/completions/df.fish:16 -msgid "Use Posix format" +#: share/completions/darcs.fish:919 +#, fuzzy +msgid "Specify mail subject" +msgstr "Spécifier l'adresse de courriel" + +#: share/completions/darcs.fish:920 +#, fuzzy +msgid "Specify in-reply-to header" +msgstr "Spécifier le rep. d'index" + +#: share/completions/darcs.fish:921 +msgid "Specify output filename" +msgstr "" + +#: share/completions/darcs.fish:995 +msgid "Reply to email-based patch using FROM address" +msgstr "" + +#: share/completions/darcs.fish:996 +msgid "Mail results to additional EMAIL(s). Requires --reply" +msgstr "" + +#: share/completions/darcs.fish:1027 +msgid "Select tag matching REGEXP" +msgstr "" + +#: share/completions/darcs.fish:1028 +msgid "Version specified by the context in FILENAME" +msgstr "" + +#: share/completions/darcs.fish:1083 +msgid "Apply patch as another user using sudo" +msgstr "" + +#: share/completions/darcs.fish:1222 +msgid "--repodir=DIRECTORY" +msgstr "" + +#: share/completions/dcop.fish:34 +msgid "Show help about options" +msgstr "" + +#: share/completions/dcop.fish:35 +msgid "Connect to the given user's DCOP server" +msgstr "" + +#: share/completions/dcop.fish:36 +msgid "Send the same DCOP call to all users with a running DCOP server" +msgstr "" + +#: share/completions/dcop.fish:37 +msgid "List all active KDE session for a user or all users" +msgstr "" + +#: share/completions/dcop.fish:38 +msgid "Send to the given KDE session" +msgstr "" + +#: share/completions/dcop.fish:39 +msgid "Don't update the user activity timestamp in the called application" +msgstr "" + +#: share/completions/dcop.fish:40 +msgid "Call DCOP for each line read from stdin" +msgstr "" + +#: share/completions/dd.fish:5 +msgid "Complete dd operands" msgstr "" #: share/completions/df.fish:17 -msgid "Show filesystems of specified type" -msgstr "" - -#: share/completions/df.fish:21 -msgid "Include empty filesystems" +msgid "Show file systems of specified type" msgstr "" #: share/completions/df.fish:22 -#: share/completions/du.fish:3 -#: share/completions/tar.fish:13 msgid "Block size" msgstr "" -#: share/completions/df.fish:23 -#: share/completions/du.fish:8 -#: share/functions/__fish_complete_ls.fish:57 -msgid "Human readable sizes, powers of 1000" -msgstr "" - -#: share/completions/df.fish:24 -msgid "Do not sync before getting usage info" -msgstr "" - -#: share/completions/df.fish:25 -msgid "Sync before getting usage info" -msgstr "" - -#: share/completions/df.fish:26 -msgid "Print filesystem type" -msgstr "" - -#: share/completions/df.fish:27 -msgid "Excluded filesystem type" -msgstr "" - -#: share/completions/df.fish:33 -msgid "Show all filesystems" -msgstr "" - -#: share/completions/df.fish:34 -msgid "Show sizes in gigabytes" -msgstr "" - -#: share/completions/df.fish:35 -msgid "Show sizes in megabytes" -msgstr "" - -#: share/completions/df.fish:36 -msgid "Print out the previously obtained statistics from the file systems" -msgstr "" - -#: share/completions/diff.fish:2 -msgid "Ignore case differences" -msgstr "" - -#: share/completions/diff.fish:3 -msgid "Ignore case when comparing file names" -msgstr "" - -#: share/completions/diff.fish:4 -msgid "Consider case when comparing file names" -msgstr "" - -#: share/completions/diff.fish:5 -msgid "Ignore changes due to tab expansion" -msgstr "" - -#: share/completions/diff.fish:6 -msgid "Ignore changes in the amount of white space" -msgstr "" - -#: share/completions/diff.fish:7 -msgid "Ignore all white space" -msgstr "" - -#: share/completions/diff.fish:8 -msgid "Ignore changes whose lines are all blank" -msgstr "" - -#: share/completions/diff.fish:9 -msgid "Ignore changes whose lines match the REGEX" -msgstr "" - -#: share/completions/diff.fish:11 -msgid "Recursively compare subdirectories" -msgstr "" - -#: share/completions/diff.fish:12 -msgid "Treat absent files as empty" -msgstr "" - -#: share/completions/diff.fish:13 -msgid "Output NUM lines of copied context" -msgstr "" - -#: share/completions/diff.fish:14 -msgid "Output 3 lines of copied context" -msgstr "" - -#: share/completions/diff.fish:15 -msgid "Output NUM lines of unified context" -msgstr "" - -#: share/completions/diff.fish:16 -msgid "Output 3 lines of unified context" -msgstr "" - -#: share/completions/diff.fish:17 -msgid "Output only whether the files differ" -msgstr "" - -#: share/completions/diff.fish:18 -msgid "Output a normal diff" -msgstr "" - -#: share/completions/diff.fish:19 -msgid "Output in two columns" -msgstr "" - -#: share/completions/diff.fish:20 -msgid "Output at most NUM print columns" -msgstr "" - -#: share/completions/diff.fish:22 -msgid "Compare FILE1 to all operands" -msgstr "" - -#: share/completions/diff.fish:23 -msgid "Compare FILE2 to all operands" -msgstr "" - -#: share/completions/diff.fish:24 -msgid "Pass the output through 'pr'" -msgstr "" - -#: share/completions/du.fish:1 -msgid "Write size for all files" -msgstr "" - -#: share/completions/du.fish:2 -msgid "Print file size, not disk usage" -msgstr "" - -#: share/completions/du.fish:4 -msgid "Use 1B block size" -msgstr "" - -#: share/completions/du.fish:5 -msgid "Produce grand total" -msgstr "" - -#: share/completions/du.fish:6 -msgid "Dereference file symlinks" -msgstr "" - -#: share/completions/du.fish:10 -msgid "Count hard links multiple times" -msgstr "" - -#: share/completions/du.fish:11 -msgid "Dereference all symlinks" -msgstr "" - -#: share/completions/du.fish:12 -msgid "Do not include subdirectory size" -msgstr "" - -#: share/completions/du.fish:13 -msgid "Display only a total for each argument" -msgstr "" - -#: share/completions/du.fish:14 -msgid "Skip other filesystems" -msgstr "" - #: share/completions/du.fish:15 -msgid "Exclude files thet match pattern in file" +msgid "Exclude files that match pattern in file" msgstr "" #: share/completions/du.fish:16 @@ -4958,816 +3933,692 @@ msgstr "" msgid "Recursion limit" msgstr "" -#: share/completions/echo.fish:1 -msgid "No newline" +#: share/completions/duply.fish:5 +#, fuzzy +msgid "Profile" +msgstr "Fichier de config" + +#: share/completions/duply.fish:6 +msgid "Get usage help text" msgstr "" -#: share/completions/echo.fish:2 -msgid "Use backslash escaped characters" +#: share/completions/duply.fish:9 +#, fuzzy +msgid "Creates a configuration profile" +msgstr "Spécifier un fichier de configuration" + +#: share/completions/duply.fish:10 +msgid "Backup with pre/post script execution" msgstr "" -#: share/completions/echo.fish:3 -msgid "Do not use backslash escaped characters" +#: share/completions/duply.fish:11 +msgid "Backup without executing pre/post scripts" msgstr "" -#: share/completions/emacs.fish:4 -msgid "Do not load init files" +#: share/completions/duply.fish:12 +msgid "Execute /pre script" msgstr "" -#: share/completions/emacs.fish:5 -msgid "Load users init file" +#: share/completions/duply.fish:13 +msgid "Execute /post script" msgstr "" -#: share/completions/emacs.fish:6 -msgid "Use file as terminal" +#: share/completions/duply.fish:14 +msgid "Force full backup" msgstr "" -#: share/completions/emacs.fish:7 -msgid "Execute Lisp function" +#: share/completions/duply.fish:15 +msgid "Force incremental backup" msgstr "" -#: share/completions/emacs.fish:8 -msgid "Load Lisp code from file" +#: share/completions/duply.fish:16 +msgid "List all files in backup (as it was at , default: now)" msgstr "" -#: share/completions/emacs.fish:9 -msgid "Do not use X interface" +#: share/completions/duply.fish:17 +msgid "Prints backup sets and chains currently in repository" msgstr "" -#: share/completions/emacs.fish:10 -msgid "Create window on the specified display" +#: share/completions/duply.fish:18 +msgid "List files changed since latest backup" msgstr "" -#: share/completions/emerge.fish:3 -msgid "Test if emerge command should have packages as potential completion" +#: share/completions/duply.fish:19 +msgid "Shows outdated backup archives [--force, delete these files]" msgstr "" -#: share/completions/emerge.fish:12 -msgid "Tests if emerge command should have package as potential completion for removal" +#: share/completions/duply.fish:20 +msgid "Shows outdated backups [--force, delete these files]" msgstr "" -#: share/completions/emerge.fish:21 -msgid "Prints completions for installed packages on the system from /var/db/pkg" +#: share/completions/duply.fish:21 +msgid "Shows broken backup archives [--force, delete these files]" msgstr "" +#: share/completions/duply.fish:22 +msgid "Restore the backup to [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:23 +msgid "Restore single file/folder from backup [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:26 +msgid "Really execute the commands: purge, purge-full, cleanup" +msgstr "" + +#: share/completions/duply.fish:27 +msgid "Do nothing but print out generated duplicity command lines" +msgstr "" + +#: share/completions/duply.fish:28 +msgid "Calculate what would be done, but dont perform any actions" +msgstr "" + +#: share/completions/duply.fish:29 +msgid "Dont abort when backup different dirs to the same backend" +msgstr "" + +#: share/completions/duply.fish:30 +#, fuzzy +msgid "Output verbosity level" +msgstr "Fichier sources.list de sortie" + +#: share/completions/emerge.fish:5 share/completions/equery.fish:5 +msgid "" +"Prints completions for installed packages on the system from /var/db/pkg" +msgstr "" + +#: share/completions/emerge.fish:12 share/completions/equery.fish:12 +msgid "" +"Prints completions for all available packages on the system from /usr/portage" +msgstr "" + +#: share/completions/emerge.fish:19 +#, fuzzy +msgid "" +"Tests if emerge command should have an installed package as potential " +"completion" +msgstr "" +"Tester si la commande apt devrait avoir les paquets comme complétion " +"potentielle" + +#: share/completions/emerge.fish:30 share/completions/emerge.fish:31 +#, fuzzy +msgid "All base system packages" +msgstr "Efface les paquets construits" + +#: share/completions/emerge.fish:30 share/completions/emerge.fish:31 +#, fuzzy +msgid "All packages in world" +msgstr "Synchroniser les paquets installés" + +#: share/completions/emerge.fish:30 +#, fuzzy +msgid "Installed package" +msgstr "Installer des paquets source" + #: share/completions/emerge.fish:31 -msgid "Cleans the system by removing outdated packages" -msgstr "" +#: share/functions/__fish_print_packages.fish:13 +msgid "Package" +msgstr "Paquet" -#: share/completions/emerge.fish:32 -msgid "Cleans the system by removing packages that are not associated with explicitly merged packages" -msgstr "" - -#: share/completions/emerge.fish:33 -msgid "Displays important portage variables that will be exported to ebuild.sh when performing merges" -msgstr "" - -#: share/completions/emerge.fish:34 -msgid "Causes portage to process all the metacache files as is normally done on the tail end of an rsync update using emerge --sync" +#: share/completions/emerge.fish:35 +msgid "Usage overview of emerge" msgstr "" #: share/completions/emerge.fish:35 -msgid "Removes all but the most recently installed version of a package from your system" +msgid "Help on subject system" msgstr "" -#: share/completions/emerge.fish:36 -msgid "Causes portage to check and update the dependency cache of all ebuilds in the portage tree" +#: share/completions/emerge.fish:35 +msgid "Help on subject config" msgstr "" -#: share/completions/emerge.fish:37 -msgid "Searches for matches of the supplied string in the current local portage tree" -msgstr "" - -#: share/completions/emerge.fish:38 -msgid "Removes all matching packages completely from your system" -msgstr "" - -#: share/completions/emerge.fish:39 -msgid "Before performing the merge, display what ebuilds and tbz2s will be installed, in the same format as when using --pretend" -msgstr "" - -#: share/completions/emerge.fish:40 -msgid "Tell emerge to build binary packages for all ebuilds processed in addition to actually merging the packages" -msgstr "" - -#: share/completions/emerge.fish:41 -msgid "Creates a binary package, but does not merge it to the system" -msgstr "" - -#: share/completions/emerge.fish:42 -msgid "When pretending, also display the ChangeLog entries for packages that will be upgraded" -msgstr "" - -#: share/completions/emerge.fish:43 -msgid "Display the pretend output in a tabular form" -msgstr "" - -#: share/completions/emerge.fish:44 -msgid "Tell emerge to run the ebuild command in --debug mode" -msgstr "" - -#: share/completions/emerge.fish:45 -msgid "When used in conjunction with --update, this flag forces emerge to consider the entire dependency tree of packages, instead of checking only the immediate dependencies of the packages" -msgstr "" - -#: share/completions/emerge.fish:46 -msgid "Virtually tweaks the tree of installed packages to contain nothing" -msgstr "" - -#: share/completions/emerge.fish:47 -msgid "Instead of doing any package building, just perform fetches for all packages (main package as well as all dependencies)" -msgstr "" - -#: share/completions/emerge.fish:48 -msgid "Same as --fetchonly except that all package files, including those not required to build the package, will be processed" -msgstr "" - -#: share/completions/emerge.fish:49 -msgid "Using the server and location defined in PORTAGE_BINHOST, portage will download the information from each binary file there and it will use that information to help build the dependency list" -msgstr "" - -#: share/completions/emerge.fish:50 -msgid "This option is identical to -g, except it will not use ANY information from the local machine" -msgstr "" - -#: share/completions/emerge.fish:51 -msgid "Tells emerge to include installed packages where USE flags have changed since installation" -msgstr "" - -#: share/completions/emerge.fish:52 -msgid "Merge files in CONFIG_PROTECT to the live fs instead of silently dropping them" -msgstr "" - -#: share/completions/emerge.fish:53 -msgid "Merge specified packages, but don't merge any dependencies" -msgstr "" - -#: share/completions/emerge.fish:54 -msgid "Skip the packages specified on the command-line that have already been installed" -msgstr "" - -#: share/completions/emerge.fish:55 -msgid "Disables the spinner regardless of terminal type" -msgstr "" - -#: share/completions/emerge.fish:56 -msgid "Emerge as normal, but don't add packages to the world profile" +#: share/completions/emerge.fish:35 +msgid "Help on subject sync" msgstr "" #: share/completions/emerge.fish:57 -msgid "Only merge (or pretend to merge) the dependencies of the specified packages, not the packages themselves" +msgid "Use colors in output" msgstr "" -#: share/completions/emerge.fish:58 -msgid "Do not merge, display what ebuilds and tbz2s would have been installed" +#: share/completions/emerge.fish:57 +msgid "Don't use colors in output" msgstr "" -#: share/completions/emerge.fish:59 -msgid "Reduced output from portage's displays" +#: share/completions/emerge.fish:81 +#, fuzzy +msgid "Pull in build time dependencies" +msgstr "Afficher les dépendances de construction" + +#: share/completions/emerge.fish:81 +#, fuzzy +msgid "Don't pull in build time dependencies" +msgstr "Afficher les dépendances de construction" + +#: share/completions/env.fish:2 +#, fuzzy +msgid "Redefine variable" +msgstr "Gérer les variables d'environnement" + +#: share/completions/equery.fish:19 +msgid "" +"Prints completions for all available categories on the system from /usr/" +"portage" msgstr "" -#: share/completions/emerge.fish:60 -msgid "Resumes the last merge operation" +#: share/completions/equery.fish:38 +#, fuzzy +msgid "list all packages owning file(s)" +msgstr "Lister les dépendances inverses" + +#: share/completions/equery.fish:39 +msgid "check MD5sums and timestamps of package" msgstr "" -#: share/completions/emerge.fish:61 -msgid "Matches the search string against the description field as well the package's name" +#: share/completions/equery.fish:40 +#, fuzzy +msgid "list all packages depending on specified package" +msgstr "Lister les dépendances inverses" + +#: share/completions/equery.fish:41 +#, fuzzy +msgid "display a dependency tree for package" +msgstr "Lister les dépendances du paquet" + +#: share/completions/equery.fish:42 +#, fuzzy +msgid "list files owned by package" +msgstr "Désactiver le téléchargement de paquets" + +#: share/completions/equery.fish:43 +msgid "list all packages with specified useflag" msgstr "" -#: share/completions/emerge.fish:62 -msgid "Remove the first package in the resume list so that a merge may continue in the presence of an uncorrectable or inconsequential error" +#: share/completions/equery.fish:44 +#, fuzzy +msgid "list all packages matching pattern" +msgstr "Lister le contenu d'un paquet correspondant au motif" + +#: share/completions/equery.fish:45 +msgid "print size of files contained in package" msgstr "" -#: share/completions/emerge.fish:63 -msgid "Shows the dependency tree using indentation for dependencies" +#: share/completions/equery.fish:46 +#, fuzzy +msgid "display USE flags for package" +msgstr "Lister les bogues des paquets" + +#: share/completions/equery.fish:47 +msgid "print full path to ebuild for package" msgstr "" -#: share/completions/emerge.fish:64 -msgid "Updates packages to the best version available" -msgstr "" - -#: share/completions/emerge.fish:66 -msgid "Like --usepkg, except this only allows the use of binary packages, and it will abort the emerge if the package is not available at the time of dependency calculation" -msgstr "" - -#: share/completions/emerge.fish:67 -msgid "Increased or expanded display of content in portage's displays" -msgstr "" - -#: share/completions/emerge.fish:68 -msgid "Displays the currently installed version of portage along with other information useful for quick reference on a system" -msgstr "" - -#: share/completions/fish.fish:1 -msgid "Run fish with this command" -msgstr "" - -#: share/completions/fish.fish:4 -msgid "Only parse input, do not execute" -msgstr "" - -#: share/completions/fish.fish:5 -msgid "Run in interactive mode" -msgstr "" - -#: share/completions/fish.fish:6 -msgid "Run in login mode" -msgstr "" - -#: share/completions/fish.fish:7 -msgid "Output profiling information to specified file" -msgstr "" - -#: share/completions/function.fish:1 -#: share/completions/functions.fish:5 -msgid "Set function description" -msgstr "" - -#: share/completions/function.fish:4 -msgid "Make the function a job exit event handler" -msgstr "" - -#: share/completions/function.fish:5 -msgid "Make the function a process exit event handler" -msgstr "" - -#: share/completions/function.fish:6 -msgid "Make the function a signal event handler" -msgstr "" - -#: share/completions/function.fish:7 -msgid "Make the function a variable update event handler" -msgstr "" - -#: share/completions/function.fish:8 -msgid "Allow dash (-) in function name" -msgstr "" - -#: share/completions/functions.fish:1 -msgid "Erase function" -msgstr "" - -#: share/completions/functions.fish:3 -msgid "Show hidden functions" -msgstr "" - -#: share/completions/fusermount.fish:15 -#: share/completions/sshfs.fish:27 -#: share/completions/sshfs.fish:31 +#: share/completions/fusermount.fish:15 share/completions/sshfs.fish:27 msgid "Mount options" msgstr "" -#: share/completions/fusermount.fish:16 -msgid "Unmount" -msgstr "" - -#: share/completions/fusermount.fish:17 -msgid "Quiet" -msgstr "" - -#: share/completions/fusermount.fish:18 -msgid "Lazy unmount" -msgstr "" - -#: share/completions/gcc.fish:5 -msgid "Language" -msgstr "" - -#: share/completions/gcc.fish:23 -msgid "Pass program exit codes" -msgstr "" - -#: share/completions/gcc.fish:24 -msgid "Stop after assembler" -msgstr "" - #: share/completions/gcc.fish:25 -msgid "Stop after compile" -msgstr "" - -#: share/completions/gcc.fish:26 -msgid "Stop after preprocessor" -msgstr "" - -#: share/completions/gcc.fish:27 -msgid "Output file" -msgstr "" - -#: share/completions/gcc.fish:28 -msgid "Print commands to stderr" -msgstr "" - -#: share/completions/gcc.fish:29 -msgid "Print quoted commands to stderr, do not run" -msgstr "" - -#: share/completions/gcc.fish:30 -msgid "Use pipes" -msgstr "" - -#: share/completions/gcc.fish:31 -msgid "Use ansi mode" -msgstr "" - -#: share/completions/gcc.fish:32 -msgid "Standard mode" -msgstr "" - -#: share/completions/gcc.fish:46 -msgid "Write prototypes to file" -msgstr "" - -#: share/completions/gcc.fish:47 -msgid "Do not recognize asm, inline or typeof keywords" -msgstr "" - -#: share/completions/gcc.fish:48 -msgid "Do not use builtin functions" -msgstr "" - -#: share/completions/gcc.fish:49 -msgid "Assert hosted environment" -msgstr "" - -#: share/completions/gcc.fish:50 -msgid "Assert freestanding environment" -msgstr "" - -#: share/completions/gcc.fish:51 -msgid "Use Microsoft extensions" -msgstr "" - -#: share/completions/gcc.fish:52 -msgid "Use ANSI trigraphs" -msgstr "" - -#: share/completions/gcc.fish:53 -msgid "Do not use integrated preprocessor" -msgstr "" - -#: share/completions/gcc.fish:54 -msgid "char is unsigned" -msgstr "" - -#: share/completions/gcc.fish:55 -msgid "char is signed" -msgstr "" - -#: share/completions/gcc.fish:56 -msgid "bitfield is unsigned" -msgstr "" - -#: share/completions/gcc.fish:57 -msgid "bitfield is signed" -msgstr "" - -#: share/completions/gcc.fish:58 -msgid "All bitfields are signed" -msgstr "" - -#: share/completions/gcc.fish:59 -msgid "All bitfields are unsigned" -msgstr "" - -#: share/completions/gcc.fish:60 -#: share/completions/gcc.fish:65 -msgid "String constants are not const" -msgstr "" - -#: share/completions/gcc.fish:61 -msgid "C++ ABI version" -msgstr "" - -#: share/completions/gcc.fish:62 -msgid "Turn off access checking" -msgstr "" - -#: share/completions/gcc.fish:63 -msgid "Check pointer returned by new" -msgstr "" - -#: share/completions/gcc.fish:64 -msgid "Put globals in the common segment" -msgstr "" - -#: share/completions/gcc.fish:66 -msgid "Accept $ in identifiers" -msgstr "" - -#: share/completions/gcc.fish:67 -msgid "Reject $ in identifiers" -msgstr "" - -#: share/completions/gcc.fish:68 -msgid "Do not omit unneeded temporarys" -msgstr "" - -#: share/completions/gcc.fish:69 -msgid "Allow exception violations" -msgstr "" - -#: share/completions/gcc.fish:70 -msgid "Do not extend for-loop scope" -msgstr "" - -#: share/completions/gcc.fish:71 -msgid "Extend for-loop scope" -msgstr "" - -#: share/completions/gcc.fish:72 -msgid "Do not recognize typeof as keyword" -msgstr "" - -#: share/completions/gcc.fish:73 -msgid "Do not emit code for implicit templates" -msgstr "" - -#: share/completions/gcc.fish:74 -msgid "Do not emit code for implicit inline templates" -msgstr "" - -#: share/completions/gcc.fish:75 -msgid "Do not emit out-of-line code for inline functions" -msgstr "" - -#: share/completions/gcc.fish:76 -msgid "Disable warnings about MFC" -msgstr "" - -#: share/completions/gcc.fish:77 -msgid "Disable some built-in functions" -msgstr "" - -#: share/completions/gcc.fish:78 -msgid "Disable operator keywords" -msgstr "" - -#: share/completions/gcc.fish:79 -msgid "Disable optional diagnostics" -msgstr "" - -#: share/completions/gcc.fish:80 -msgid "Downgrade some errors to warnings" -msgstr "" - -#: share/completions/gcc.fish:81 -msgid "Enable automatic template instantiation at link time" -msgstr "" - -#: share/completions/gcc.fish:82 -msgid "Disable generation of C++ runtime type information" -msgstr "" - -#: share/completions/gcc.fish:86 msgid "Set maximum template depth" msgstr "" -#: share/completions/gcc.fish:89 -msgid "Do not emit code for thread-safe initialization of local statics" +#: share/completions/gcc.fish:31 share/completions/gcc.fish:513 +msgid "Use dir as the logical root directory for headers and libraries" msgstr "" -#: share/completions/gcc.fish:90 -msgid "Use __cxa_atexit for destructors" +#: share/completions/gcc.fish:261 +msgid "" +"Print the full absolute name of the library file library that would be used " +"when linking---and don\\t" msgstr "" -#: share/completions/gcc.fish:91 -msgid "Hides inline methods from export table" +#: share/completions/gcc.fish:512 +msgid "" +"Process file after the compiler reads in the standard specs file, in order " +"to override the defaults that the gcc driver program uses when determining " +"what switches to pass to cc1, cc1plus, as, ld, etc" msgstr "" -#: share/completions/gcc.fish:92 -msgid "Do not use weak symbol support" +#: share/completions/gcc.fish:539 share/completions/gcc.fish:540 +#: share/completions/gcc.fish:541 +msgid "" +"This specifies what floating point hardware (or hardware emulation) is " +"available on the target" msgstr "" -#: share/completions/gpg.fish:48 -msgid "Make a signature" +#: share/completions/gcc.fish:542 +msgid "" +"The size of all structures and unions will be rounded up to a multiple of " +"the number of bits set by this option" msgstr "" -#: share/completions/gpg.fish:49 -msgid "Make a clear text signature" +#: share/completions/gcc.fish:548 +msgid "Specify the register to be used for PIC addressing" msgstr "" -#: share/completions/gpg.fish:50 -msgid "Make a detached signature" +#: share/completions/gcc.fish:556 +msgid "Specify the access model for the thread local storage pointer" msgstr "" -#: share/completions/gpg.fish:51 -msgid "Encrypt data" +#: share/completions/gcc.fish:557 +msgid "Specify ATMEL AVR instruction set or MCU type" msgstr "" -#: share/completions/gpg.fish:52 -msgid "Encrypt with a symmetric cipher using a passphrase" +#: share/completions/gcc.fish:559 +msgid "" +"Specify the initial stack address, which may be a symbol or numeric value, " +"__stack is the default" msgstr "" -#: share/completions/gpg.fish:53 -msgid "Store only (make a simple RFC1991 packet)" +#: share/completions/gcc.fish:574 +msgid "" +"Specified the identification number of the ID based shared library being " +"compiled" msgstr "" -#: share/completions/gpg.fish:54 -msgid "Decrypt specified file or stdin" +#: share/completions/gem.fish:12 +msgid "Build a gem from a gemspec" msgstr "" -#: share/completions/gpg.fish:55 -msgid "Assume specified file or stdin is sigfile and verify it" +#: share/completions/gem.fish:13 +msgid "Adjust RubyGems certificate settings" msgstr "" -#: share/completions/gpg.fish:56 -msgid "Modify certain other commands to accept multiple files for processing" +#: share/completions/gem.fish:14 +#, fuzzy +msgid "Check installed gems" +msgstr "Réinstaller les paquets" + +#: share/completions/gem.fish:15 +msgid "Cleanup old versions of installed gems in the local repository" msgstr "" -#: share/completions/gpg.fish:57 -msgid "Identical to '--multifile --verify'" +#: share/completions/gem.fish:16 +msgid "Display the contents of the installed gems" msgstr "" -#: share/completions/gpg.fish:58 -msgid "Identical to '--multifile --encrypt'" +#: share/completions/gem.fish:17 +msgid "Show the dependencies of an installed gem" msgstr "" -#: share/completions/gpg.fish:59 -msgid "Identical to --multifile --decrypt" +#: share/completions/gem.fish:18 +msgid "Display RubyGems environmental information" msgstr "" -#: share/completions/gpg.fish:61 -#: share/completions/gpg.fish:62 -msgid "List all keys from the public keyrings, or just the ones given on the command line" +#: share/completions/gem.fish:19 +msgid "Provide help on the 'gem' command" msgstr "" -#: share/completions/gpg.fish:63 -msgid "List all keys from the secret keyrings, or just the ones given on the command line" +#: share/completions/gem.fish:20 +#, fuzzy +msgid "Install a gem into the local repository" +msgstr "Appliquer les modifications au référentiel" + +#: share/completions/gem.fish:21 +msgid "Display all gems whose name starts with STRING" msgstr "" -#: share/completions/gpg.fish:64 -msgid "Same as --list-keys, but the signatures are listed too" +#: share/completions/gem.fish:22 +msgid "Query gem information in local or remote repositories" msgstr "" -#: share/completions/gpg.fish:66 -msgid "Same as --list-keys, but the signatures are listed and verified" +#: share/completions/gem.fish:23 +msgid "Generates RDoc for pre-installed gems" msgstr "" -#: share/completions/gpg.fish:67 -msgid "List all keys with their fingerprints" +#: share/completions/gem.fish:24 +msgid "Display all gems whose name contains STRING" msgstr "" -#: share/completions/gpg.fish:68 -msgid "Generate a new key pair" +#: share/completions/gem.fish:25 +msgid "Display gem specification (in yaml)" msgstr "" -#: share/completions/gpg.fish:70 -msgid "Present a menu which enables you to do all key related tasks" +#: share/completions/gem.fish:26 +#, fuzzy +msgid "Uninstall a gem from the local repository" +msgstr "Enlever un fichier du référentiel" + +#: share/completions/gem.fish:27 +msgid "Unpack an installed gem to the current directory" msgstr "" -#: share/completions/gpg.fish:72 -msgid "Sign a public key with your secret key" +#: share/completions/gem.fish:28 +msgid "Update the named gem (or all installed gems) in the local repository" msgstr "" -#: share/completions/gpg.fish:73 -msgid "Sign a public key with your secret key but mark it as non exportable" +#: share/completions/gem.fish:35 +msgid "Use URL as the remote source for gems" msgstr "" -#: share/completions/gpg.fish:75 -msgid "Remove key from the public keyring" +#: share/completions/gem.fish:36 +msgid "Use the given HTTP proxy for remote operations" msgstr "" -#: share/completions/gpg.fish:76 -msgid "Remove key from the secret and public keyring" +#: share/completions/gem.fish:37 +msgid "Use no HTTP proxy for remote operations" msgstr "" -#: share/completions/gpg.fish:77 -msgid "Same as --delete-key, but if a secret key exists, it will be removed first" +#: share/completions/gem.fish:38 +#, fuzzy +msgid "Get help on this command" +msgstr "Définir ou obtenir la ligne de commande" + +#: share/completions/gem.fish:39 +msgid "Set the verbose level of output" msgstr "" -#: share/completions/gpg.fish:79 -msgid "Generate a revocation certificate for the complete key" +#: share/completions/gem.fish:40 +msgid "Use this config file instead of default" msgstr "" -#: share/completions/gpg.fish:80 -msgid "Generate a designated revocation certificate for a key" +#: share/completions/gem.fish:41 +msgid "Show stack backtrace on errors" msgstr "" -#: share/completions/gpg.fish:82 -msgid "Export all or the given keys from all keyrings" +#: share/completions/gem.fish:42 +msgid "Turn on Ruby debugging" msgstr "" -#: share/completions/gpg.fish:83 -msgid "Same as --export but sends the keys to a keyserver" +#: share/completions/gem.fish:47 +msgid "Add a trusted certificate" msgstr "" -#: share/completions/gpg.fish:84 -#: share/completions/gpg.fish:85 -msgid "Same as --export, but exports the secret keys instead" +#: share/completions/gem.fish:48 +#, fuzzy +msgid "List trusted certificates" +msgstr "Lister les clés de confiance" + +#: share/completions/gem.fish:49 +msgid "Remove trusted certificates containing STRING" msgstr "" -#: share/completions/gpg.fish:87 -#: share/completions/gpg.fish:88 -msgid "Import/merge keys" +#: share/completions/gem.fish:50 +msgid "Build private key and self-signed certificate for EMAIL_ADDR" msgstr "" -#: share/completions/gpg.fish:90 -msgid "Import the keys with the given key IDs from a keyserver" +#: share/completions/gem.fish:51 +msgid "Certificate for --sign command" msgstr "" -#: share/completions/gpg.fish:91 -msgid "Request updates from a keyserver for keys that already exist on the local keyring" +#: share/completions/gem.fish:52 +msgid "Private key for --sign command" msgstr "" -#: share/completions/gpg.fish:92 -msgid "Search the keyserver for the given names" +#: share/completions/gem.fish:53 +msgid "Sign a certificate with my key and certificate" msgstr "" -#: share/completions/gpg.fish:93 -msgid "Do trust database maintenance" +#: share/completions/gem.fish:58 +msgid "Verify gem file against its internal checksum" msgstr "" -#: share/completions/gpg.fish:94 -msgid "Do trust database maintenance without user interaction" +#: share/completions/gem.fish:59 +msgid "Report 'unmanaged' or rogue files in the gem repository" msgstr "" -#: share/completions/gpg.fish:96 -msgid "Send the ownertrust values to stdout" +#: share/completions/gem.fish:60 +msgid "Run unit tests for gem" msgstr "" -#: share/completions/gpg.fish:97 -msgid "Update the trustdb with the ownertrust values stored in specified files or stdin" +#: share/completions/gem.fish:61 +msgid "Specify version for which to run unit tests" msgstr "" -#: share/completions/gpg.fish:99 -msgid "Create signature caches in the keyring" +#: share/completions/gem.fish:66 +#, fuzzy +msgid "Don't really cleanup" +msgstr "Pas de récursion" + +#: share/completions/gem.fish:71 +msgid "List the files inside a Gem" msgstr "" -#: share/completions/gpg.fish:101 -msgid "Print message digest of specified algorithm for all given files or stdin" +#: share/completions/gem.fish:72 +#, fuzzy +msgid "Specify version for gem to view" +msgstr "Spécifier le format de ligne" + +#: share/completions/gem.fish:73 +#, fuzzy +msgid "Search for gems under specific paths" +msgstr "Définir les options spécifiques au pilote" + +#: share/completions/gem.fish:74 +msgid "Be verbose when showing status" msgstr "" -#: share/completions/gpg.fish:102 -msgid "Print message digest of all algorithms for all given files or stdin" +#: share/completions/gem.fish:79 share/completions/gem.fish:172 +#, fuzzy +msgid "Specify version of gem to uninstall" +msgstr "Liste des paquets à installer" + +#: share/completions/gem.fish:80 +#, fuzzy +msgid "Include reverse dependencies in the output" +msgstr "Lister les dépendances inverses du paquet" + +#: share/completions/gem.fish:81 +#, fuzzy +msgid "Don't include reverse dependencies in the output" +msgstr "Lister les dépendances inverses du paquet" + +#: share/completions/gem.fish:82 +msgid "Pipe Format (name --version ver)" msgstr "" -#: share/completions/gpg.fish:104 -msgid "Emit specified number of random bytes of the given quality level" +#: share/completions/gem.fish:87 +#, fuzzy +msgid "display the package version" +msgstr "Afficher la fiche du paquet" + +#: share/completions/gem.fish:87 +msgid "display the path where gems are installed" msgstr "" -#: share/completions/gpg.fish:106 -msgid "Display version and supported algorithms, and exit" +#: share/completions/gem.fish:87 +msgid "display path used to search for gems" msgstr "" -#: share/completions/gpg.fish:107 -msgid "Display warranty and exit" +#: share/completions/gem.fish:87 +msgid "display the gem format version" msgstr "" -#: share/completions/gpg.fish:115 -msgid "Create ASCII armored output" +#: share/completions/gem.fish:87 +msgid "display the remote gem servers" +msgstr "" + +#: share/completions/gem.fish:92 +msgid "list all 'gem' commands" +msgstr "" + +#: share/completions/gem.fish:92 +msgid "show some examples of usage" +msgstr "" + +#: share/completions/gem.fish:97 +#, fuzzy +msgid "Specify version of gem to install" +msgstr "Liste des paquets à installer" + +#: share/completions/gem.fish:98 share/completions/gem.fish:121 +#: share/completions/gem.fish:131 share/completions/gem.fish:150 +#: share/completions/gem.fish:158 +msgid "Restrict operations to the LOCAL domain (default)" +msgstr "" + +#: share/completions/gem.fish:99 share/completions/gem.fish:122 +#: share/completions/gem.fish:132 share/completions/gem.fish:151 +#: share/completions/gem.fish:159 +msgid "Restrict operations to the REMOTE domain" +msgstr "" + +#: share/completions/gem.fish:100 share/completions/gem.fish:123 +#: share/completions/gem.fish:133 share/completions/gem.fish:152 +#: share/completions/gem.fish:160 +msgid "Allow LOCAL and REMOTE operations" +msgstr "" + +#: share/completions/gem.fish:101 share/completions/gem.fish:182 +msgid "Gem repository directory to get installed gems" +msgstr "" + +#: share/completions/gem.fish:102 share/completions/gem.fish:183 +msgid "Generate RDoc documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:103 share/completions/gem.fish:184 +msgid "Don't generate RDoc documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:104 share/completions/gem.fish:185 +msgid "Generate RI documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:105 share/completions/gem.fish:186 +msgid "Don't generate RI documentation for the gem on install" +msgstr "" + +#: share/completions/gem.fish:106 share/completions/gem.fish:187 +msgid "Force gem to install, bypassing dependency checks" +msgstr "" + +#: share/completions/gem.fish:107 share/completions/gem.fish:188 +msgid "Don't force gem to install, bypassing dependency checks" +msgstr "" + +#: share/completions/gem.fish:108 share/completions/gem.fish:189 +msgid "Run unit tests prior to installation" +msgstr "" + +#: share/completions/gem.fish:109 share/completions/gem.fish:190 +msgid "Don't run unit tests prior to installation" +msgstr "" + +#: share/completions/gem.fish:110 share/completions/gem.fish:191 +msgid "Use bin wrappers for executables" +msgstr "" + +#: share/completions/gem.fish:111 share/completions/gem.fish:192 +msgid "Don't use bin wrappers for executables" +msgstr "" + +#: share/completions/gem.fish:112 share/completions/gem.fish:193 +msgid "Specify gem trust policy" +msgstr "" + +#: share/completions/gem.fish:113 share/completions/gem.fish:194 +msgid "Do not install any required dependent gems" +msgstr "" + +#: share/completions/gem.fish:114 share/completions/gem.fish:195 +msgid "Unconditionally install the required dependent gems" +msgstr "" + +#: share/completions/gem.fish:119 share/completions/gem.fish:129 +#: share/completions/gem.fish:148 +#, fuzzy +msgid "Display detailed information of gem(s)" +msgstr "Afficher l'aide pour la commande" + +#: share/completions/gem.fish:120 share/completions/gem.fish:130 +#: share/completions/gem.fish:149 +#, fuzzy +msgid "Don't display detailed information of gem(s)" +msgstr "Afficher l'aide pour la commande" + +#: share/completions/gem.fish:128 +msgid "Name of gem(s) to query on matches the provided REGEXP" +msgstr "" + +#: share/completions/gem.fish:138 +msgid "Generate RDoc/RI documentation for all installed gems" +msgstr "" + +#: share/completions/gem.fish:139 +msgid "Include RDoc generated documents" +msgstr "" + +#: share/completions/gem.fish:140 +msgid "Don't include RDoc generated documents" +msgstr "" + +#: share/completions/gem.fish:141 +msgid "Include RI generated documents" +msgstr "" + +#: share/completions/gem.fish:142 +msgid "Don't include RI generated documents" +msgstr "" + +#: share/completions/gem.fish:143 +msgid "Specify version of gem to rdoc" +msgstr "" + +#: share/completions/gem.fish:157 +msgid "Specify version of gem to examine" +msgstr "" + +#: share/completions/gem.fish:161 +msgid "Output specifications for all versions of the gem" +msgstr "" + +#: share/completions/gem.fish:166 +#, fuzzy +msgid "Uninstall all matching versions" +msgstr "Afficher toutes les versions" + +#: share/completions/gem.fish:167 +msgid "Don't uninstall all matching versions" +msgstr "" + +#: share/completions/gem.fish:168 +msgid "Ignore dependency requirements while uninstalling" +msgstr "" + +#: share/completions/gem.fish:169 +msgid "Don't ignore dependency requirements while uninstalling" +msgstr "" + +#: share/completions/gem.fish:170 +msgid "Uninstall applicable executables without confirmation" +msgstr "" + +#: share/completions/gem.fish:171 +msgid "Don't uninstall applicable executables without confirmation" +msgstr "" + +#: share/completions/gem.fish:177 +msgid "Specify version of gem to unpack" +msgstr "" + +#: share/completions/gem.fish:196 +msgid "Update the RubyGems system software" +msgstr "" + +#: share/completions/git.fish:121 share/completions/git.fish:144 +msgid "Branch" +msgstr "" + +#: share/completions/git.fish:145 +msgid "Tag" msgstr "" #: share/completions/gpg.fish:116 msgid "Write output to specified file" msgstr "" -#: share/completions/gpg.fish:118 -msgid "Sets a limit on the number of bytes that will be generated when processing a file" -msgstr "" - -#: share/completions/gpg.fish:120 -msgid "Use specified key as the key to sign with" -msgstr "" - -#: share/completions/gpg.fish:121 -msgid "Use specified key as the default key to sign with" -msgstr "" - -#: share/completions/gpg.fish:123 -msgid "Encrypt for specified user id" -msgstr "" - -#: share/completions/gpg.fish:124 -msgid "Encrypt for specified user id, but hide the keyid of the key" -msgstr "" - -#: share/completions/gpg.fish:125 -msgid "Use specified user id as default recipient" -msgstr "" - -#: share/completions/gpg.fish:126 -msgid "Use the default key as default recipient" -msgstr "" - -#: share/completions/gpg.fish:127 -msgid "Reset --default-recipient and --default-recipient-self" -msgstr "" - -#: share/completions/gpg.fish:129 -msgid "Give more information during processing" -msgstr "" - -#: share/completions/gpg.fish:132 -#: share/completions/gpg.fish:133 -#: share/completions/gpg.fish:134 -msgid "Compression level" -msgstr "" - -#: share/completions/gpg.fish:135 -msgid "Use a different decompression method for BZIP2 compressed files" -msgstr "" - -#: share/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 "" - -#: share/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 "" - -#: share/completions/gpg.fish:140 -msgid "Don't make any changes (this is not completely implemented)" -msgstr "" - -#: share/completions/gpg.fish:142 -#: share/completions/mv.fish:3 -msgid "Prompt before overwrite" -msgstr "" - -#: share/completions/gpg.fish:144 -#: share/completions/scp.fish:28 -#: share/completions/top.fish:2 -msgid "Batch mode" -msgstr "" - -#: share/completions/gpg.fish:145 -msgid "Don't use batch mode" -msgstr "" - -#: share/completions/gpg.fish:146 -msgid "Never write output to terminal" -msgstr "" - -#: share/completions/gpg.fish:148 -msgid "Assume yes on most questions" -msgstr "" - -#: share/completions/gpg.fish:149 -msgid "Assume no on most questions" -msgstr "" - -#: share/completions/gpg.fish:151 -msgid "Prompt for a certification level when making a key signature" -msgstr "" - -#: share/completions/gpg.fish:152 -msgid "Don't prompt for a certification level when making a key signature" -msgstr "" - -#: share/completions/gpg.fish:153 -msgid "The default certification level to use for the level check when signing a key" -msgstr "" - -#: share/completions/gpg.fish:154 -msgid "Disregard any signatures with a certification level below specified level when building the trust database" -msgstr "" - -#: share/completions/gpg.fish:156 -msgid "Assume that the specified key is as trustworthy as one of your own secret keys" -msgstr "" - -#: share/completions/gpg.fish:157 -msgid "Specify trust model" -msgstr "" - -#: share/completions/gpg.fish:159 -msgid "Select how to display key IDs" -msgstr "" - #: share/completions/gpg.fish:161 msgid "Use specified keyserver" msgstr "" -#: share/completions/gpg.fish:162 -msgid "Options for the keyserver" -msgstr "" - -#: share/completions/gpg.fish:164 -msgid "Options for importing keys" -msgstr "" - -#: share/completions/gpg.fish:165 -msgid "Options for exporting keys" -msgstr "" - -#: share/completions/gpg.fish:166 -msgid "Options for listing keys and signatures" -msgstr "" - -#: share/completions/gpg.fish:167 -msgid "Options for verifying signatures" -msgstr "" - #: share/completions/gpg.fish:169 msgid "The command line that should be run to view a photo ID" msgstr "" #: share/completions/gpg.fish:170 -msgid "Sets a list of directories to search for photo viewers and keyserver helpers" -msgstr "" - -#: share/completions/gpg.fish:172 -msgid "Display the keyring name at the head of key listings to show which keyring a given key resides on" +msgid "" +"Sets a list of directories to search for photo viewers and keyserver helpers" msgstr "" #: share/completions/gpg.fish:173 @@ -5786,30 +4637,10 @@ msgstr "" msgid "Use specified file instead of the default trustdb" msgstr "" -#: share/completions/gpg.fish:179 -msgid "Set the home directory" -msgstr "" - -#: share/completions/gpg.fish:180 -msgid "Set the native character set" -msgstr "" - -#: share/completions/gpg.fish:182 -msgid "Assume that following command line arguments are given in UTF8" -msgstr "" - -#: share/completions/gpg.fish:183 -msgid "Assume that following arguments are encoded in the character set specified by --display-charset" -msgstr "" - #: share/completions/gpg.fish:184 msgid "Read options from specified file, do not read the default options file" msgstr "" -#: share/completions/gpg.fish:185 -msgid "Shortcut for '--options /dev/null'" -msgstr "" - #: share/completions/gpg.fish:186 msgid "Load an extension module" msgstr "" @@ -5822,34 +4653,10 @@ msgstr "" msgid "Write log output to the specified file descriptor" msgstr "" -#: share/completions/gpg.fish:190 -msgid "Write attribute subpackets to the specified file descriptor" -msgstr "" - -#: share/completions/gpg.fish:192 -msgid "Include secret key comment packets when exporting secret keys" -msgstr "" - -#: share/completions/gpg.fish:193 -msgid "Don't include secret key comment packets when exporting secret keys" -msgstr "" - #: share/completions/gpg.fish:195 msgid "Use specified string as comment string" msgstr "" -#: share/completions/gpg.fish:196 -msgid "Don't use a comment string" -msgstr "" - -#: share/completions/gpg.fish:198 -msgid "Include the version string in ASCII armored output" -msgstr "" - -#: share/completions/gpg.fish:199 -msgid "Don't include the version string in ASCII armored output" -msgstr "" - #: share/completions/gpg.fish:204 msgid "Put the specified name value pair into the signature as notation data" msgstr "" @@ -5874,110 +4681,22 @@ msgstr "" msgid "Use specified string as the filename which is stored inside messages" msgstr "" -#: share/completions/gpg.fish:212 -msgid "Set the 'for your eyes only' flag in the message" -msgstr "" - -#: share/completions/gpg.fish:213 -msgid "Clear the 'for your eyes only' flag in the message" -msgstr "" - -#: share/completions/gpg.fish:215 -msgid "Create file with name as given in data" -msgstr "" - -#: share/completions/gpg.fish:216 -msgid "Don't create file with name as given in data" -msgstr "" - #: share/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 "" #: share/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 "" #: share/completions/gpg.fish:221 msgid "Maximum depth of a certification chain (default is 5)" msgstr "" -#: share/completions/gpg.fish:223 -msgid "Use specified cipher algorithm" -msgstr "" - -#: share/completions/gpg.fish:224 -msgid "Use specified message digest algorithm" -msgstr "" - -#: share/completions/gpg.fish:225 -msgid "Use specified compression algorithm" -msgstr "" - -#: share/completions/gpg.fish:226 -msgid "Use specified message digest algorithm when signing a key" -msgstr "" - -#: share/completions/gpg.fish:227 -msgid "Use specified cipher algorithm to protect secret keys" -msgstr "" - -#: share/completions/gpg.fish:228 -msgid "Use specified digest algorithm to mangle the passphrases" -msgstr "" - -#: share/completions/gpg.fish:229 -msgid "Selects how passphrases are mangled" -msgstr "" - -#: share/completions/gpg.fish:231 -msgid "Integrity protect secret keys by using a SHA-1 checksum" -msgstr "" - -#: share/completions/gpg.fish:233 -msgid "Never allow the use of specified cipher algorithm" -msgstr "" - -#: share/completions/gpg.fish:234 -msgid "Never allow the use of specified public key algorithm" -msgstr "" - -#: share/completions/gpg.fish:236 -msgid "Do not cache the verification status of key signatures" -msgstr "" - -#: share/completions/gpg.fish:237 -msgid "Do not verify each signature right after creation" -msgstr "" - -#: share/completions/gpg.fish:239 -msgid "Automatically run the --check-trustdb command internally when needed" -msgstr "" - -#: share/completions/gpg.fish:240 -msgid "Never automatically run the --check-trustdb" -msgstr "" - -#: share/completions/gpg.fish:242 -msgid "Do not put the recipient keyid into encrypted packets" -msgstr "" - -#: share/completions/gpg.fish:243 -msgid "Put the recipient keyid into encrypted packets" -msgstr "" - -#: share/completions/gpg.fish:244 -msgid "Change the behavior of cleartext signatures so that they can be used for patch files" -msgstr "" - -#: share/completions/gpg.fish:246 -msgid "Mangle From-field of email headers (default)" -msgstr "" - -#: share/completions/gpg.fish:247 -msgid "Do not mangle From-field of email headers" -msgstr "" - #: share/completions/gpg.fish:249 msgid "Read passphrase from specified file descriptor" msgstr "" @@ -5986,188 +4705,18 @@ msgstr "" msgid "Read user input from specified file descriptor" msgstr "" -#: share/completions/gpg.fish:252 -msgid "Try to use the GnuPG-Agent" -msgstr "" - -#: share/completions/gpg.fish:253 -msgid "Do not try to use the GnuPG-Agent" -msgstr "" - #: share/completions/gpg.fish:254 msgid "Override value of GPG_AGENT_INFO environment variable" msgstr "" -#: share/completions/gpg.fish:256 -msgid "Force v3 signatures for signatures on data" -msgstr "" - -#: share/completions/gpg.fish:257 -msgid "Do not force v3 signatures for signatures on data" -msgstr "" - -#: share/completions/gpg.fish:259 -msgid "Always use v4 key signatures even on v3 keys" -msgstr "" - -#: share/completions/gpg.fish:260 -msgid "Don't use v4 key signatures on v3 keys" -msgstr "" - -#: share/completions/gpg.fish:262 -msgid "Force the use of encryption with a modification detection code" -msgstr "" - -#: share/completions/gpg.fish:263 -msgid "Disable the use of the modification detection code" -msgstr "" - -#: share/completions/gpg.fish:265 -msgid "Allow the import and use of keys with user IDs which are not self-signed" -msgstr "" - -#: share/completions/gpg.fish:266 -msgid "Do not allow the import and use of keys with user IDs which are not self-signed" -msgstr "" - -#: share/completions/gpg.fish:268 -msgid "Disable all checks on the form of the user ID while generating a new one" -msgstr "" - -#: share/completions/gpg.fish:270 -msgid "Do not fail if signature is older than key" -msgstr "" - -#: share/completions/gpg.fish:271 -msgid "Allow subkeys that have a timestamp from the future" -msgstr "" - -#: share/completions/gpg.fish:272 -msgid "Ignore CRC errors" -msgstr "" - -#: share/completions/gpg.fish:273 -msgid "Do not fail on MDC integrity protection failure" -msgstr "" - -#: share/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 "" - -#: share/completions/gpg.fish:276 -msgid "Release the locks every time a lock is no longer needed" -msgstr "" - -#: share/completions/gpg.fish:278 -msgid "Do not create an internal pool file for quicker generation of random numbers" -msgstr "" - -#: share/completions/gpg.fish:279 -msgid "Reset verbose level to 0" -msgstr "" - -#: share/completions/gpg.fish:280 -msgid "Suppress the initial copyright message" -msgstr "" - -#: share/completions/gpg.fish:281 -msgid "Suppress the warning about 'using insecure memory'" -msgstr "" - -#: share/completions/gpg.fish:282 -msgid "Suppress the warning about unsafe file and home directory (--homedir) permissions" -msgstr "" - -#: share/completions/gpg.fish:283 -msgid "Suppress the warning about missing MDC integrity protection" -msgstr "" - -#: share/completions/gpg.fish:285 -msgid "Refuse to run if GnuPG cannot get secure memory" -msgstr "" - -#: share/completions/gpg.fish:287 -msgid "Do not refuse to run if GnuPG cannot get secure memory (default)" -msgstr "" - -#: share/completions/gpg.fish:288 -msgid "Assume the input data is not in ASCII armored format" -msgstr "" - -#: share/completions/gpg.fish:290 -msgid "Do not add the default keyrings to the list of keyrings" -msgstr "" - -#: share/completions/gpg.fish:292 -msgid "Skip the signature verification step" -msgstr "" - -#: share/completions/gpg.fish:294 -msgid "Print key listings delimited by colons" -msgstr "" - -#: share/completions/gpg.fish:295 -msgid "Print key listings delimited by colons (like --with-colons) and print the public key data" -msgstr "" - -#: share/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 "" - -#: share/completions/gpg.fish:298 -msgid "Changes the output of the list commands to work faster" -msgstr "" - -#: share/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 "" - -#: share/completions/gpg.fish:301 -msgid "Changes the behaviour of some commands. This is like --dry-run but different" -msgstr "" - -#: share/completions/gpg.fish:303 -msgid "Display the session key used for one message" -msgstr "" - #: share/completions/gpg.fish:304 msgid "Don't use the public key but the specified session key" msgstr "" -#: share/completions/gpg.fish:306 -#: share/completions/gpg.fish:309 -msgid "Prompt for an expiration time" -msgstr "" - -#: share/completions/gpg.fish:307 -#: share/completions/gpg.fish:310 -msgid "Do not prompt for an expiration time" -msgstr "" - -#: share/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 "" - -#: share/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" -msgstr "" - #: share/completions/gpg.fish:315 msgid "Sets up a named group, which is similar to aliases in email programs" msgstr "" -#: share/completions/gpg.fish:316 -msgid "Remove a given entry from the --group list" -msgstr "" - -#: share/completions/gpg.fish:317 -msgid "Remove all entries from the --group list" -msgstr "" - -#: share/completions/gpg.fish:319 -msgid "Don't change the permissions of a secret keyring back to user read/write only" -msgstr "" - #: share/completions/gpg.fish:321 msgid "Set the list of personal cipher preferences to the specified string" msgstr "" @@ -6177,436 +4726,676 @@ msgid "Set the list of personal digest preferences to the specified string" msgstr "" #: share/completions/gpg.fish:323 -msgid "Set the list of personal compression preferences to the specified string" +msgid "" +"Set the list of personal compression preferences to the specified string" msgstr "" #: share/completions/gpg.fish:324 msgid "Set the list of default preferences to the specified string" msgstr "" -#: share/completions/gprof.fish:1 -msgid "Print annotated source" -msgstr "" - -#: share/completions/gprof.fish:2 -msgid "Do not print explanations" -msgstr "" - -#: share/completions/gprof.fish:3 -msgid "Print tally" -msgstr "" - -#: share/completions/gprof.fish:4 -msgid "Display summary" -msgstr "" - -#: share/completions/gprof.fish:5 -msgid "Search directories for source" -msgstr "" - -#: share/completions/gprof.fish:6 -msgid "No annotated source" -msgstr "" - -#: share/completions/gprof.fish:7 -msgid "Print full path of source" -msgstr "" - -#: share/completions/gprof.fish:8 -msgid "Print flat profile" -msgstr "" - -#: share/completions/gprof.fish:9 -msgid "No flat profile" -msgstr "" - -#: share/completions/gprof.fish:10 -msgid "Print call graph" -msgstr "" - -#: share/completions/gprof.fish:11 -msgid "No call graph" -msgstr "" - -#: share/completions/gprof.fish:12 -msgid "Annotate to file" -msgstr "" - -#: share/completions/gprof.fish:13 -msgid "No tally" -msgstr "" - -#: share/completions/gprof.fish:14 -msgid "Suggest function ordering" -msgstr "" - -#: share/completions/gprof.fish:15 -msgid "Suggest file ordering" -msgstr "" - -#: share/completions/gprof.fish:16 -msgid "Traditional mode" -msgstr "" - -#: share/completions/gprof.fish:17 -msgid "Set width of output" -msgstr "" - -#: share/completions/gprof.fish:18 -msgid "Annotate every line" -msgstr "" - -#: share/completions/gprof.fish:19 -msgid "Set demangling style" -msgstr "" - -#: share/completions/gprof.fish:20 -msgid "Turn of demangling" -msgstr "" - -#: share/completions/gprof.fish:21 -msgid "Supress static functions" -msgstr "" - -#: share/completions/gprof.fish:23 -msgid "Ignore symbols not known to be functions" -msgstr "" - #: share/completions/gprof.fish:24 msgid "Delete arcs from callgraph" msgstr "" -#: share/completions/gprof.fish:25 -msgid "Line by line profiling" -msgstr "" - #: share/completions/gprof.fish:26 msgid "Supress output when executed less than specified times" msgstr "" -#: share/completions/gprof.fish:27 -msgid "Only propagate times for matching symbols" -msgstr "" - -#: share/completions/gprof.fish:28 -msgid "Do not propagate times for matching symbols" -msgstr "" - -#: share/completions/gprof.fish:29 -msgid "Mention unused functions in flat profile" -msgstr "" - -#: share/completions/gprof.fish:30 -msgid "Specify debugging options" -msgstr "" - #: share/completions/gprof.fish:33 msgid "Profile data format" msgstr "" -#: share/completions/gprof.fish:34 -msgid "Print summary" -msgstr "" - -#: share/completions/grep.fish:5 -msgid "Print NUM lines of trailing context" -msgstr "" - -#: share/completions/grep.fish:6 -msgid "Process binary file as text" -msgstr "" - -#: share/completions/grep.fish:7 -msgid "Print NUM lines of leading context" -msgstr "" - -#: share/completions/grep.fish:8 -msgid "Print NUM lines of context" -msgstr "" - -#: share/completions/grep.fish:9 -msgid "Print byte offset of matches" -msgstr "" - -#: share/completions/grep.fish:10 -msgid "Assume data type for binary files" -msgstr "" - -#: share/completions/grep.fish:13 -msgid "Only print number of matches" -msgstr "" - -#: share/completions/grep.fish:14 -msgid "Action for devices" -msgstr "" - -#: share/completions/grep.fish:15 -msgid "Action for directories" -msgstr "" - -#: share/completions/grep.fish:16 -msgid "Pattern is extended regexp" -msgstr "" - -#: share/completions/grep.fish:17 -msgid "Pattern is a regexp" -msgstr "" - -#: share/completions/grep.fish:18 -msgid "Pattern is a fixed string" -msgstr "" - -#: share/completions/grep.fish:19 -msgid "Use pattern from file" -msgstr "" - -#: share/completions/grep.fish:20 -msgid "Pattern is basic regex" -msgstr "" - -#: share/completions/grep.fish:21 -msgid "Print filename" -msgstr "" - -#: share/completions/grep.fish:22 -msgid "Supress printing filename" -msgstr "" - -#: share/completions/grep.fish:24 -msgid "Skip binary files" -msgstr "" - -#: share/completions/grep.fish:25 -#: share/completions/sort.fish:3 -msgid "Ignore case" -msgstr "" - -#: share/completions/grep.fish:26 -msgid "Print first non-matching file" -msgstr "" - -#: share/completions/grep.fish:27 -msgid "Print first matching file" -msgstr "" - -#: share/completions/grep.fish:28 -msgid "Stop reading after NUM matches" -msgstr "" - -#: share/completions/grep.fish:29 -msgid "Use the mmap system call to read input" -msgstr "" - -#: share/completions/grep.fish:30 -msgid "Print linenumber" -msgstr "" - -#: share/completions/grep.fish:31 -msgid "Show only matching part" -msgstr "" - -#: share/completions/grep.fish:32 -msgid "Rename stdin" -msgstr "" - -#: share/completions/grep.fish:33 -#: share/completions/sed.fish:36 -msgid "Use line buffering" -msgstr "" - -#: share/completions/grep.fish:34 -#: share/completions/grep.fish:35 -msgid "Do not write anything" -msgstr "" - -#: share/completions/grep.fish:36 -#: share/completions/grep.fish:37 -msgid "Read files under each directory" -msgstr "" - -#: share/completions/grep.fish:38 -msgid "Recurse, search file matching PATTERN" -msgstr "" - -#: share/completions/grep.fish:39 -msgid "Recurse, skip file matching PATTERN" -msgstr "" - -#: share/completions/grep.fish:40 -msgid "Suppress error messages" -msgstr "" - -#: share/completions/grep.fish:41 -msgid "Treat files as binary" -msgstr "" - -#: share/completions/grep.fish:42 -msgid "Report Unix-style byte offsets" -msgstr "" - -#: share/completions/grep.fish:44 -msgid "Invert the sense of matching" -msgstr "" - -#: share/completions/grep.fish:45 -msgid "Only whole matching words" -msgstr "" - -#: share/completions/grep.fish:46 -msgid "Only whole matching lines" -msgstr "" - -#: share/completions/grep.fish:47 -msgid "Synonym for -i" -msgstr "" - -#: share/completions/grep.fish:48 -msgid "Output a zero byte after filename" -msgstr "" - -#: share/completions/gunzip.fish:9 -#: share/completions/gzip.fish:11 -msgid "List compression information" -msgstr "" - -#: share/completions/gunzip.fish:11 -#: share/completions/gzip.fish:13 -msgid "Do not save/restore filename" -msgstr "" - -#: share/completions/gunzip.fish:12 -#: share/completions/gzip.fish:14 -msgid "Save/restore filename" -msgstr "" - -#: share/completions/gunzip.fish:13 -#: share/completions/gzip.fish:15 -msgid "Supress warnings" -msgstr "" - -#: share/completions/gunzip.fish:14 -#: share/completions/gzip.fish:16 -msgid "Recurse directories" -msgstr "" - -#: share/completions/gunzip.fish:15 -#: share/completions/gzip.fish:17 +#: share/completions/gunzip.fish:15 share/completions/gzip.fish:17 msgid "Suffix" msgstr "" -#: share/completions/gunzip.fish:17 -#: share/completions/gzip.fish:19 -msgid "Display compression ratios" -msgstr "" - -#: share/completions/gzip.fish:21 -msgid "Use fast setting" -msgstr "" - -#: share/completions/gzip.fish:22 -msgid "Use high compression setting" -msgstr "" - #: share/completions/help.fish:6 -msgid "Help for the specified builtin" +#, fuzzy +msgid "Help for this command" +msgstr "Définir ou obtenir la ligne de commande" + +#: share/completions/help.fish:9 +msgid "Introduction to the fish syntax" msgstr "" #: share/completions/help.fish:10 -msgid "Help for the specified command" +msgid "Incomplete aspects of fish" +msgstr "" + +#: share/completions/help.fish:11 +msgid "Known fish bugs" +msgstr "" + +#: share/completions/help.fish:12 +msgid "Help on how to reuse previously entered commands" msgstr "" #: share/completions/help.fish:14 -msgid "Help section" -msgstr "" - -#: share/completions/help.fish:17 msgid "Help on how tab-completion works" msgstr "" -#: share/completions/help.fish:18 +#: share/completions/help.fish:15 msgid "Help on how job control works" msgstr "" -#: share/completions/help.fish:19 +#: share/completions/help.fish:16 msgid "Summary on how fish differs from other shells" msgstr "" -#: share/completions/help.fish:21 +#: share/completions/help.fish:18 msgid "Help on how to set the prompt" msgstr "" -#: share/completions/help.fish:22 +#: share/completions/help.fish:19 msgid "Help on how to set the titlebar message" msgstr "" -#: share/completions/help.fish:23 +#: share/completions/help.fish:20 msgid "Help on how to copy and paste" msgstr "" -#: share/completions/help.fish:24 +#: share/completions/help.fish:21 msgid "Help on editor shortcuts" msgstr "" -#: share/completions/help.fish:25 +#: share/completions/help.fish:22 msgid "Help on environment variables" msgstr "" -#: share/completions/help.fish:26 +#: share/completions/help.fish:23 msgid "Help on setting syntax highlighting colors" msgstr "" -#: share/completions/help.fish:27 -msgid "A short summary of all builtin commands" -msgstr "" - -#: share/completions/help.fish:29 -#: share/completions/help.fish:30 +#: share/completions/help.fish:25 share/completions/help.fish:26 msgid "Help on parameter expansion (Globbing)" msgstr "" -#: share/completions/help.fish:31 +#: share/completions/help.fish:27 #, sh-format msgid "Help on variable expansion $VARNAME" msgstr "" -#: share/completions/help.fish:32 +#: share/completions/help.fish:28 msgid "Help on home directory expansion ~USER" msgstr "" -#: share/completions/help.fish:33 +#: share/completions/help.fish:29 msgid "Help on brace expansion {a,b,c}" msgstr "" -#: share/completions/help.fish:34 +#: share/completions/help.fish:30 msgid "Help on wildcard expansion *.*" msgstr "" -#: share/completions/help.fish:35 +#: share/completions/help.fish:31 msgid "Help on command substitution (SUBCOMMAND)" msgstr "" -#: share/completions/help.fish:36 +#: share/completions/help.fish:32 msgid "Help on process expansion %JOB" msgstr "" -#: share/completions/id.fish:1 -msgid "Print effective group id" +#: share/completions/hg.fish:17 +msgid "add the specified files on the next commit" msgstr "" -#: share/completions/id.fish:2 -msgid "Print all group ids" +#: share/completions/hg.fish:18 +msgid "add all new files, delete all missing files" msgstr "" -#: share/completions/id.fish:3 -msgid "Print name, not number" +#: share/completions/hg.fish:19 +msgid "show changeset information by line for each file" msgstr "" -#: share/completions/id.fish:4 -msgid "Print real ID, not effective" +#: share/completions/hg.fish:20 +msgid "create an unversioned archive of a repository revision" msgstr "" -#: share/completions/id.fish:5 -msgid "Print effective user ID" +#: share/completions/hg.fish:21 +msgid "reverse effect of earlier changeset" +msgstr "" + +#: share/completions/hg.fish:22 +msgid "subdivision search of changesets" +msgstr "" + +#: share/completions/hg.fish:23 +msgid "track a line of development with movable markers" +msgstr "" + +#: share/completions/hg.fish:24 +msgid "set or show the current branch name" +msgstr "" + +#: share/completions/hg.fish:25 +msgid "list repository named branches" +msgstr "" + +#: share/completions/hg.fish:26 +#, fuzzy +msgid "create a changegroup file" +msgstr "Lire le paquet depuis un fichier" + +#: share/completions/hg.fish:27 +msgid "output the current or given revision of files" +msgstr "" + +#: share/completions/hg.fish:28 +msgid "make a copy of an existing repository" +msgstr "" + +#: share/completions/hg.fish:29 +msgid "commit the specified files or all outstanding changes" +msgstr "" + +#: share/completions/hg.fish:30 +msgid "mark files as copied for the next commit" +msgstr "" + +#: share/completions/hg.fish:31 +msgid "diff repository (or selected files)" +msgstr "" + +#: share/completions/hg.fish:32 +msgid "dump the header and diffs for one or more changesets" +msgstr "" + +#: share/completions/hg.fish:33 +msgid "forget the specified files on the next commit" +msgstr "" + +#: share/completions/hg.fish:34 +msgid "copy changes from other branches onto the current branch" +msgstr "" + +#: share/completions/hg.fish:35 +msgid "search for a pattern in specified files and revisions" +msgstr "" + +#: share/completions/hg.fish:36 +msgid "show current repository heads or show branch heads" +msgstr "" + +#: share/completions/hg.fish:37 +msgid "show help for a given topic or a help overview" +msgstr "" + +#: share/completions/hg.fish:38 +msgid "identify the working copy or specified revision" +msgstr "" + +#: share/completions/hg.fish:39 +msgid "import an ordered set of patches" +msgstr "" + +#: share/completions/hg.fish:40 +msgid "show new changesets found in source" +msgstr "" + +#: share/completions/hg.fish:41 +#, fuzzy +msgid "create a new repository in the given directory" +msgstr "Créer un référentiel CVS s'il n'existe pas" + +#: share/completions/hg.fish:42 +msgid "locate files matching specific patterns" +msgstr "" + +#: share/completions/hg.fish:43 +msgid "show revision history of entire repository or files" +msgstr "" + +#: share/completions/hg.fish:44 +msgid "output the current or given revision of the project manifest" +msgstr "" + +#: share/completions/hg.fish:45 +msgid "merge working directory with another revision" +msgstr "" + +#: share/completions/hg.fish:46 +msgid "show changesets not found in the destination" +msgstr "" + +#: share/completions/hg.fish:47 +msgid "show the parents of the working directory or revision" +msgstr "" + +#: share/completions/hg.fish:48 +msgid "show aliases for remote repositories" +msgstr "" + +#: share/completions/hg.fish:49 +msgid "set or show the current phase name" +msgstr "" + +#: share/completions/hg.fish:50 +msgid "pull changes from the specified source" +msgstr "" + +#: share/completions/hg.fish:51 +msgid "push changes to the specified destination" +msgstr "" + +#: share/completions/hg.fish:52 +msgid "roll back an interrupted transaction" +msgstr "" + +#: share/completions/hg.fish:53 +#, fuzzy +msgid "remove the specified files on the next commit" +msgstr "Déplacer le fichier spécifier dans la ligne de commande" + +#: share/completions/hg.fish:54 +msgid "rename files; equivalent of copy + remove" +msgstr "" + +#: share/completions/hg.fish:55 +msgid "redo merges or set/view the merge status of files" +msgstr "" + +#: share/completions/hg.fish:56 +msgid "restore files to their checkout state" +msgstr "" + +#: share/completions/hg.fish:57 +msgid "roll back the last transaction (dangerous)" +msgstr "" + +#: share/completions/hg.fish:58 +msgid "print the root (top) of the current working directory" +msgstr "" + +#: share/completions/hg.fish:59 +msgid "start stand-alone webserver" +msgstr "" + +#: share/completions/hg.fish:60 +msgid "show combined config settings from all hgrc files" +msgstr "" + +#: share/completions/hg.fish:61 +#, fuzzy +msgid "show changed files in the working directory" +msgstr "Changer le répertoire de travail" + +#: share/completions/hg.fish:62 +#, fuzzy +msgid "summarize working directory state" +msgstr "Changer le répertoire de travail" + +#: share/completions/hg.fish:63 +msgid "add one or more tags for the current or given revision" +msgstr "" + +#: share/completions/hg.fish:64 +msgid "list repository tags" +msgstr "" + +#: share/completions/hg.fish:65 +#, fuzzy +msgid "show the tip revision" +msgstr "Afficher le temps" + +#: share/completions/hg.fish:66 +#, fuzzy +msgid "apply one or more changegroup files" +msgstr "Installer un ou des paquets" + +#: share/completions/hg.fish:67 +msgid "update working directory (or switch revisions)" +msgstr "" + +#: share/completions/hg.fish:68 +#, fuzzy +msgid "verify the integrity of the repository" +msgstr "Enlever un fichier du référentiel" + +#: share/completions/hg.fish:69 +msgid "output version and copyright information" +msgstr "" + +#: share/completions/hg.fish:70 +#, fuzzy +msgid "Configuration Files" +msgstr "Spécifier un fichier de configuration" + +#: share/completions/hg.fish:71 +msgid "Date Formats" +msgstr "" + +#: share/completions/hg.fish:72 +msgid "Diff Formats" +msgstr "" + +#: share/completions/hg.fish:73 +#, fuzzy +msgid "Environment Variables" +msgstr "Gérer les variables d'environnement" + +#: share/completions/hg.fish:74 +msgid "Using Additional Features" +msgstr "" + +#: share/completions/hg.fish:75 +#, fuzzy +msgid "Specifying File Sets" +msgstr "Spécifier le fichier de config" + +#: share/completions/hg.fish:76 +msgid "Glossary" +msgstr "" + +#: share/completions/hg.fish:77 +msgid "Syntax for Mercurial Ignore Files" +msgstr "" + +#: share/completions/hg.fish:78 +msgid "Configuring hgweb" +msgstr "" + +#: share/completions/hg.fish:79 +#, fuzzy +msgid "Merge Tools" +msgstr "Fusionner les révisions" + +#: share/completions/hg.fish:80 +msgid "Specifying Multiple Revisions" +msgstr "" + +#: share/completions/hg.fish:81 +msgid "File Name Patterns" +msgstr "" + +#: share/completions/hg.fish:82 +msgid "Working with Phases" +msgstr "" + +#: share/completions/hg.fish:83 +msgid "Specifying Single Revisions" +msgstr "" + +#: share/completions/hg.fish:84 +#, fuzzy +msgid "Specifying Revision Sets" +msgstr "Spécifier les options" + +#: share/completions/hg.fish:85 +msgid "Subrepositories" +msgstr "" + +#: share/completions/hg.fish:86 +msgid "Template Usage" +msgstr "" + +#: share/completions/hg.fish:87 +msgid "URL Paths" +msgstr "" + +#: share/completions/hg.fish:94 share/completions/hg.fish:433 +#: share/completions/hg.fish:458 share/completions/hg.fish:569 +#: share/completions/hg.fish:579 share/completions/hg.fish:594 +#: share/completions/hg.fish:606 share/completions/hg.fish:671 +msgid "[+] include names matching the given patterns" +msgstr "" + +#: share/completions/hg.fish:95 share/completions/hg.fish:434 +#: share/completions/hg.fish:459 share/completions/hg.fish:570 +#: share/completions/hg.fish:580 share/completions/hg.fish:595 +#: share/completions/hg.fish:607 share/completions/hg.fish:672 +msgid "[+] exclude names matching the given patterns" +msgstr "" + +#: share/completions/hg.fish:104 share/completions/hg.fish:391 +msgid "Guess renamed files by similarity (0<=s<=100)" +msgstr "" + +#: share/completions/hg.fish:105 +msgid "[+] include names matching the given patterns" +msgstr "" + +#: share/completions/hg.fish:106 +msgid "[+] exclude names matching the given patterns" +msgstr "" + +#: share/completions/hg.fish:114 +msgid "Annotate the specified revision" +msgstr "" + +#: share/completions/hg.fish:387 +msgid "Use text as commit message" +msgstr "" + +#: share/completions/hg.fish:388 +msgid "Read commit message from file" +msgstr "" + +#: share/completions/hg.fish:389 share/completions/hg.fish:693 +msgid "Record the specified date as commit date" +msgstr "" + +#: share/completions/hg.fish:390 share/completions/hg.fish:694 +msgid "Record the specified user as committer" +msgstr "" + +#: share/completions/hg.fish:400 +msgid "File to store the bundles into" +msgstr "" + +#: share/completions/hg.fish:401 share/completions/hg.fish:446 +#: share/completions/hg.fish:448 share/completions/hg.fish:450 +#: share/completions/hg.fish:485 share/completions/hg.fish:534 +#: share/completions/hg.fish:536 share/completions/hg.fish:548 +#: share/completions/hg.fish:550 share/completions/hg.fish:669 +msgid "[+]" +msgstr "" + +#: share/completions/hg.fish:403 +msgid "[+] a specific branch you would like to pull" +msgstr "" + +#: share/completions/hg.fish:406 share/completions/hg.fish:453 +#: share/completions/hg.fish:491 +msgid "Limit number of changes displayed" +msgstr "" + +#: share/completions/hg.fish:409 share/completions/hg.fish:456 +#: share/completions/hg.fish:494 share/completions/hg.fish:507 +#: share/completions/hg.fish:709 +msgid "Display using template map file" +msgstr "" + +#: share/completions/hg.fish:410 share/completions/hg.fish:457 +#: share/completions/hg.fish:495 share/completions/hg.fish:508 +#: share/completions/hg.fish:710 +#, fuzzy +msgid "Display with template" +msgstr "Afficher la page de manuel" + +#: share/completions/hg.fish:411 share/completions/hg.fish:421 +#: share/completions/hg.fish:496 share/completions/hg.fish:537 +#: share/completions/hg.fish:552 +#, fuzzy +msgid "Specify ssh command to use" +msgstr "Spécifier le type d'enregistrement" + +#: share/completions/hg.fish:412 share/completions/hg.fish:422 +#: share/completions/hg.fish:497 share/completions/hg.fish:538 +#: share/completions/hg.fish:553 +msgid "Specify hg command to run on the remote side" +msgstr "" + +#: share/completions/hg.fish:430 +msgid "Search the repository as it is in REV" +msgstr "" + +#: share/completions/hg.fish:441 +msgid "A filename will only show ancestors or" +msgstr "" + +#: share/completions/hg.fish:443 +#, fuzzy +msgid "Show revisions matching date spec" +msgstr "Voir qui surveille un fichier" + +#: share/completions/hg.fish:445 +msgid "[+] do case-insensitive search for a given text" +msgstr "" + +#: share/completions/hg.fish:449 +msgid "[+] show changesets within the given named branch" +msgstr "" + +#: share/completions/hg.fish:466 +#, fuzzy +msgid "Revision to display" +msgstr "Choisir l'affichage" + +#: share/completions/hg.fish:475 +msgid "Revision to merge" +msgstr "" + +#: share/completions/hg.fish:477 share/completions/hg.fish:593 +#, fuzzy +msgid "Specify merge tool" +msgstr "Spécifier le type d'enregistrement" + +#: share/completions/hg.fish:488 +msgid "[+] a specific branch you would like to push" +msgstr "" + +#: share/completions/hg.fish:506 +#, fuzzy +msgid "Show parents of the specified revision" +msgstr "Afficher les différences entre les révisions" + +#: share/completions/hg.fish:525 +#, fuzzy +msgid "[+] target revision" +msgstr "Fusionner les révisions" + +#: share/completions/hg.fish:535 +msgid "[+] bookmark to pull" +msgstr "" + +#: share/completions/hg.fish:546 +msgid "You want to allow push to create a new named branch" +msgstr "" + +#: share/completions/hg.fish:549 +msgid "[+] bookmark to push" +msgstr "" + +#: share/completions/hg.fish:603 share/completions/hg.fish:726 +msgid "Tipmost revision matching date" +msgstr "" + +#: share/completions/hg.fish:604 +msgid "Revert to the specified revision" +msgstr "" + +#: share/completions/hg.fish:615 +msgid "Not perform actions, just print output" +msgstr "" + +#: share/completions/hg.fish:629 +msgid "Name of access log file to write to" +msgstr "" + +#: share/completions/hg.fish:631 +msgid "Used internally by daemon mode" +msgstr "" + +#: share/completions/hg.fish:632 +msgid "Name of error log file to write to" +msgstr "" + +#: share/completions/hg.fish:633 +msgid "Port to listen on (default: 8000)" +msgstr "" + +#: share/completions/hg.fish:634 +msgid "Address to listen on (default: all interfaces)" +msgstr "" + +#: share/completions/hg.fish:635 +msgid "Prefix path to serve from (default: server root)" +msgstr "" + +#: share/completions/hg.fish:636 +msgid "Name to show in web pages (default: working" +msgstr "" + +#: share/completions/hg.fish:637 +msgid "Name of the hgweb config file (see \"hg help hgweb\")" +msgstr "" + +#: share/completions/hg.fish:638 +msgid "Name of file to write process ID to" +msgstr "" + +#: share/completions/hg.fish:640 +#, fuzzy +msgid "For remote clients" +msgstr "Lister ou enlever des fonctions" + +#: share/completions/hg.fish:641 +msgid "Web templates to use" +msgstr "" + +#: share/completions/hg.fish:642 +msgid "Template style to use" +msgstr "" + +#: share/completions/hg.fish:644 +msgid "SSL certificate file" +msgstr "" + +#: share/completions/hg.fish:651 +#, fuzzy +msgid "Untrusted configuration options" +msgstr "Définir les options de config" + +#: share/completions/hg.fish:670 +msgid "List the changed files of a revision" +msgstr "" + +#: share/completions/hg.fish:680 +msgid "For push and pull" +msgstr "" + +#: share/completions/hg.fish:689 +msgid "Revision to tag" +msgstr "" + +#: share/completions/hg.fish:692 +msgid "Use as commit message" +msgstr "" + +#: share/completions/hg.fish:717 +msgid "To new branch head if changesets were unbundled" +msgstr "" + +#: share/completions/hg.fish:727 +#, fuzzy +msgid "Revision" +msgstr "Verrouiller une révision" + +#: share/completions/hg.fish:844 +msgid "Or select an existing template-style (--style)" +msgstr "" + +#: share/completions/hg.fish:845 +msgid "Is set" +msgstr "" + +#: share/completions/history.fish:1 +msgid "Match history items that start with the given prefix" +msgstr "" + +#: share/completions/history.fish:2 +msgid "Match history items that contain the given string" msgstr "" #: share/completions/ifconfig.fish:1 @@ -6617,290 +5406,40 @@ msgstr "" msgid "Start interface" msgstr "" -#: share/completions/ifconfig.fish:25 +#: share/completions/ifconfig.fish:25 share/completions/ifdown.fish:1 +#: share/completions/ifup.fish:1 msgid "Network interface" msgstr "" -#: share/completions/jobs.fish:3 -msgid "Show the process id of each process in the job" -msgstr "" - -#: share/completions/jobs.fish:4 -msgid "Show group id of job" -msgstr "" - -#: share/completions/jobs.fish:5 -msgid "Show commandname of each job" -msgstr "" - -#: share/completions/jobs.fish:6 -msgid "Only show status for last job to be started" -msgstr "" - -#: share/completions/kill.fish:34 -msgid "List names of available signals" -msgstr "" - -#: share/completions/less.fish:2 -msgid "Search after end of screen" -msgstr "" - #: share/completions/less.fish:3 msgid "Buffer space" msgstr "" -#: share/completions/less.fish:4 -msgid "Disable automtic buffer allocation" -msgstr "" - -#: share/completions/less.fish:5 -msgid "Repaint from top" -msgstr "" - -#: share/completions/less.fish:6 -msgid "Clear and repaint from top" -msgstr "" - -#: share/completions/less.fish:7 -msgid "Supress error for lacking terminal capability" -msgstr "" - -#: share/completions/less.fish:8 -msgid "Exit on second EOF" -msgstr "" - -#: share/completions/less.fish:9 -msgid "Exit on EOF" -msgstr "" - -#: share/completions/less.fish:10 -msgid "Open non-regular files" -msgstr "" - -#: share/completions/less.fish:11 -msgid "Quit if file shorter than one screen" -msgstr "" - -#: share/completions/less.fish:12 -msgid "Hilight one search target" -msgstr "" - -#: share/completions/less.fish:13 -msgid "No search highlighting" -msgstr "" - -#: share/completions/less.fish:14 -msgid "Maximum backward scroll" -msgstr "" - -#: share/completions/less.fish:15 -msgid "Search ignores lowercase case" -msgstr "" - -#: share/completions/less.fish:16 -msgid "Search ignores all case" -msgstr "" - -#: share/completions/less.fish:17 -msgid "Target line" -msgstr "" - -#: share/completions/less.fish:18 -msgid "Display status column" -msgstr "" - -#: share/completions/less.fish:19 -msgid "Specify key bindings file" -msgstr "" - -#: share/completions/less.fish:21 -msgid "Prompt with percentage" -msgstr "" - -#: share/completions/less.fish:22 -msgid "Verbose prompt" -msgstr "" - -#: share/completions/less.fish:23 -msgid "Display line number" -msgstr "" - -#: share/completions/less.fish:24 -msgid "Display line number for each line" -msgstr "" - -#: share/completions/less.fish:25 -msgid "Log input to file" -msgstr "" - -#: share/completions/less.fish:26 -msgid "Log to file, overwrite" -msgstr "" - -#: share/completions/less.fish:27 -msgid "Start at first occurrence of pattern" -msgstr "" - -#: share/completions/less.fish:28 -msgid "Prompt string" -msgstr "" - -#: share/completions/less.fish:29 -#: share/completions/less.fish:30 -#: share/completions/sed.fish:12 -#: share/completions/sed.fish:21 -msgid "Silent mode" -msgstr "" - -#: share/completions/less.fish:31 -#: share/completions/less.fish:32 -msgid "Completly silent mode" -msgstr "" - -#: share/completions/less.fish:33 -msgid "Display control chars" -msgstr "" - -#: share/completions/less.fish:34 -msgid "Display control chars, guess screen appearance" -msgstr "" - -#: share/completions/less.fish:35 -msgid "Multiple blank lines sqeezed" -msgstr "" - -#: share/completions/less.fish:36 -msgid "Do not fold long lines" -msgstr "" - -#: share/completions/less.fish:37 -msgid "Edit tag" -msgstr "" - -#: share/completions/less.fish:38 -msgid "Set tag file" -msgstr "" - -#: share/completions/less.fish:39 -msgid "Allow backspace and carriage return" -msgstr "" - -#: share/completions/less.fish:40 -msgid "Allow backspace, tab and carriage return" -msgstr "" - -#: share/completions/less.fish:42 -msgid "Highlight first unread line on new page" -msgstr "" - -#: share/completions/less.fish:43 -msgid "Highlight first unread line on any movement" -msgstr "" - -#: share/completions/less.fish:44 -msgid "Set tab stops" -msgstr "" - -#: share/completions/less.fish:45 -msgid "No termcap init" -msgstr "" - -#: share/completions/less.fish:46 -msgid "No keypad init" -msgstr "" - -#: share/completions/less.fish:47 -msgid "Maximum forward scroll" -msgstr "" - -#: share/completions/less.fish:48 -msgid "Max scroll window" -msgstr "" - -#: share/completions/less.fish:49 -msgid "Set quote char" -msgstr "" - -#: share/completions/less.fish:50 -msgid "Lines after EOF are blank" -msgstr "" - -#: share/completions/less.fish:51 -msgid "Characters to scroll on left/right arrows" -msgstr "" - -#: share/completions/make.fish:8 -msgid "Target" -msgstr "" - -#: share/completions/make.fish:9 -msgid "Use file as makefile" -msgstr "" - -#: share/completions/make.fish:10 -#: share/completions/tar.fish:15 -#: share/functions/cd.fish:5 -msgid "Change directory" +#: share/completions/lsusb.fish:2 +msgid "Show only devices with specified device and/or bus numbers (in decimal)" msgstr "" #: share/completions/make.fish:12 -msgid "Environment before makefile" +msgid "Target" msgstr "" #: share/completions/make.fish:13 -msgid "Ignore errors" -msgstr "" - -#: share/completions/make.fish:14 -msgid "Search directory for makefile" -msgstr "" - -#: share/completions/make.fish:15 -msgid "Number of concurrent jobs" -msgstr "" - -#: share/completions/make.fish:16 -msgid "Continue after an error" -msgstr "" - -#: share/completions/make.fish:17 -msgid "Start when load drops" +msgid "Use file as makefile" msgstr "" #: share/completions/make.fish:18 -msgid "Do not execute commands" +msgid "Search directory for makefile" msgstr "" #: share/completions/make.fish:19 +msgid "Number of concurrent jobs" +msgstr "" + +#: share/completions/make.fish:23 msgid "Ignore specified file" msgstr "" -#: share/completions/make.fish:20 -msgid "Print database" -msgstr "" - -#: share/completions/make.fish:21 -msgid "Question mode" -msgstr "" - -#: share/completions/make.fish:22 -msgid "Eliminate implicit rules" -msgstr "" - -#: share/completions/make.fish:24 -msgid "Don't continue after an error" -msgstr "" - -#: share/completions/make.fish:25 -msgid "Touch files, don't run commands" -msgstr "" - -#: share/completions/make.fish:27 -#: share/functions/pwd.fish:5 -msgid "Print working directory" -msgstr "" - -#: share/completions/make.fish:28 +#: share/completions/make.fish:32 msgid "Pretend file is modified" msgstr "" @@ -6916,10 +5455,6 @@ msgstr "" msgid "Replace include directories" msgstr "" -#: share/completions/makedepend.fish:4 -msgid "Append dependencies to makefile" -msgstr "" - #: share/completions/makedepend.fish:5 msgid "Specify makefile" msgstr "" @@ -6944,257 +5479,8 @@ msgstr "" msgid "Line width" msgstr "" -#: share/completions/makedepend.fish:12 -msgid "Warn about multiple inclusion" -msgstr "" - -#: share/completions/man.fish:4 -msgid "Program section" -msgstr "" - -#: share/completions/man.fish:5 -msgid "Syscall section" -msgstr "" - -#: share/completions/man.fish:6 -msgid "Library section" -msgstr "" - -#: share/completions/man.fish:7 -msgid "Device section" -msgstr "" - -#: share/completions/man.fish:8 -msgid "File format section" -msgstr "" - -#: share/completions/man.fish:9 -msgid "Games section" -msgstr "" - -#: share/completions/man.fish:10 -msgid "Misc section" -msgstr "" - -#: share/completions/man.fish:11 -msgid "Admin section" -msgstr "" - -#: share/completions/man.fish:12 -msgid "Kernel section" -msgstr "" - -#: share/completions/man.fish:13 -msgid "Tcl section" -msgstr "" - -#: share/completions/man.fish:14 -msgid "New section" -msgstr "" - -#: share/completions/man.fish:15 -msgid "Local section" -msgstr "" - -#: share/completions/man.fish:17 -msgid "Old section" -msgstr "" - -#: share/completions/man.fish:18 -#: share/completions/modprobe.fish:7 -#: share/completions/yum.fish:48 -#: share/functions/__fish_complete_ssh.fish:10 -msgid "Configuration file" -msgstr "" - -#: share/completions/man.fish:19 -msgid "Manpath" -msgstr "" - -#: share/completions/man.fish:20 -msgid "Pager" -msgstr "" - -#: share/completions/man.fish:21 -msgid "Manual sections" -msgstr "" - -#: share/completions/man.fish:22 -msgid "Display all matches" -msgstr "" - -#: share/completions/man.fish:23 -msgid "Always reformat" -msgstr "" - -#: share/completions/man.fish:24 -msgid "Debug" -msgstr "" - -#: share/completions/man.fish:25 -msgid "Debug and run" -msgstr "" - -#: share/completions/man.fish:26 -msgid "Show whatis information" -msgstr "" - -#: share/completions/man.fish:27 -msgid "Format only" -msgstr "" - -#: share/completions/man.fish:29 -msgid "Show apropos information" -msgstr "" - -#: share/completions/man.fish:30 -msgid "Search in all man pages" -msgstr "" - -#: share/completions/man.fish:31 -msgid "Set system" -msgstr "" - -#: share/completions/man.fish:32 -msgid "Preprocessors" -msgstr "" - -#: share/completions/man.fish:33 -msgid "Format for printing" -msgstr "" - -#: share/completions/man.fish:34 -#: share/completions/man.fish:35 -msgid "Only print locations" -msgstr "" - -#: share/completions/mimedb.fish:1 -msgid "Input is a file, use name and contents to determine mimetype" -msgstr "" - -#: share/completions/mimedb.fish:2 -msgid "Input is a file, use name to determine mimetype" -msgstr "" - -#: share/completions/mimedb.fish:3 -msgid "Input is a mimetype" -msgstr "" - -#: share/completions/mimedb.fish:4 -msgid "Output mimetype" -msgstr "" - -#: share/completions/mimedb.fish:5 -msgid "Output description of mimetype" -msgstr "" - -#: share/completions/mimedb.fish:6 -msgid "Output default action for mimetype" -msgstr "" - -#: share/completions/mimedb.fish:7 -msgid "Launch default action for each file" -msgstr "" - -#: share/completions/modprobe.fish:6 -msgid "Print messages about what the program is doing" -msgstr "" - -#: share/completions/modprobe.fish:8 -msgid "Dump configuration file" -msgstr "" - -#: share/completions/modprobe.fish:9 -msgid "Do not actually insert/remove module" -msgstr "" - -#: share/completions/modprobe.fish:10 -#: share/completions/modprobe.fish:11 -msgid "Ignore install and remove commands in configuration file" -msgstr "" - -#: share/completions/modprobe.fish:12 -msgid "Ignore bogus module names" -msgstr "" - -#: share/completions/modprobe.fish:13 -msgid "Remove modules" -msgstr "" - -#: share/completions/modprobe.fish:15 -msgid "Ignore all version information" -msgstr "" - -#: share/completions/modprobe.fish:16 -msgid "Ignore version magic information" -msgstr "" - -#: share/completions/modprobe.fish:17 -msgid "Ignore module interface version" -msgstr "" - -#: share/completions/modprobe.fish:18 -msgid "List all modules matching the given wildcard" -msgstr "" - -#: share/completions/modprobe.fish:19 -msgid "Insert modules matching the given wildcard" -msgstr "" - -#: share/completions/modprobe.fish:20 -msgid "Restrict wildcards to specified directory" -msgstr "" - -#: share/completions/modprobe.fish:21 -msgid "Send error messages through syslog" -msgstr "" - -#: share/completions/modprobe.fish:22 -msgid "Specify kernel version" -msgstr "" - -#: share/completions/modprobe.fish:23 -msgid "List dependencies of module" -msgstr "" - -#: share/completions/modprobe.fish:24 -msgid "Rename module" -msgstr "" - -#: share/completions/modprobe.fish:25 -msgid "Fail if inserting already loaded module" -msgstr "" - -#: share/completions/mount.fish:11 -msgid "Mount filesystems in fstab" -msgstr "" - -#: share/completions/mount.fish:12 -msgid "Fork process for each mount" -msgstr "" - -#: share/completions/mount.fish:13 -msgid "Fake mounting" -msgstr "" - -#: share/completions/mount.fish:14 -msgid "Add label to output" -msgstr "" - -#: share/completions/mount.fish:15 -msgid "Do not write mtab" -msgstr "" - -#: share/completions/mount.fish:16 -msgid "Tolerate sloppy mount options" -msgstr "" - -#: share/completions/mount.fish:17 -msgid "Read only" -msgstr "" - -#: share/completions/mount.fish:18 -msgid "Read/Write mode" +#: share/completions/mosh.fish:20 +msgid "Controls use of speculative local echo" msgstr "" #: share/completions/mount.fish:19 @@ -7206,7 +5492,7 @@ msgid "Mount partition with specified UID" msgstr "" #: share/completions/mount.fish:21 -msgid "Exclude filesystems" +msgid "Exclude file systems" msgstr "" #: share/completions/mount.fish:22 @@ -7218,784 +5504,273 @@ msgid "Move a subtree to a new position" msgstr "" #: share/completions/mount.fish:24 -msgid "Filesystem" -msgstr "" +#, fuzzy +msgid "File system" +msgstr "Reconstruire votre système" #: share/completions/mount.fish:26 msgid "Mount option" msgstr "" -#: share/completions/mplayer.fish:27 -msgid "Dynamically change postprocessing" -msgstr "" - #: share/completions/mplayer.fish:28 msgid "A/V sync speed" msgstr "" -#: share/completions/mplayer.fish:29 -#: share/completions/mplayer.fish:31 -msgid "Skip frames to maintain A/V sync" -msgstr "" - #: share/completions/mplayer.fish:32 msgid "Loop playback" msgstr "" -#: share/completions/mplayer.fish:33 -msgid "Play in random order" -msgstr "" - -#: share/completions/mplayer.fish:36 -msgid "Full screen" -msgstr "" - -#: share/completions/mplayer.fish:37 -msgid "Set playlist" -msgstr "" - -#: share/completions/mplayer.fish:38 -msgid "Audio language" -msgstr "" - -#: share/completions/mplayer.fish:39 -msgid "Play audio from file" -msgstr "" - -#: share/completions/mplayer.fish:40 -msgid "Set default CD-ROM drive" -msgstr "" - -#: share/completions/mplayer.fish:41 -msgid "Set number of audio channels" -msgstr "" - -#: share/completions/mplayer.fish:42 -msgid "Set start chapter" -msgstr "" - -#: share/completions/mplayer.fish:43 -msgid "Set default DVD-ROM drive" -msgstr "" - -#: share/completions/mplayer.fish:44 -msgid "Set dvd viewing angle" -msgstr "" - -#: share/completions/mplayer.fish:45 -msgid "Force rebuilding index" -msgstr "" - -#: share/completions/mplayer.fish:46 -msgid "Override framerate" -msgstr "" - -#: share/completions/mplayer.fish:47 -msgid "Build index if unavailable" -msgstr "" - -#: share/completions/mplayer.fish:48 -msgid "Load index from file" -msgstr "" - -#: share/completions/mplayer.fish:49 -msgid "Force non-interleaved AVI parser" -msgstr "" - -#: share/completions/mplayer.fish:50 -msgid "Rebuild index and save to file" -msgstr "" - -#: share/completions/mplayer.fish:51 -msgid "Seek to given time position" -msgstr "" - -#: share/completions/mplayer.fish:52 -msgid "TV capture mode" -msgstr "" - -#: share/completions/mplayer.fish:53 -msgid "Subtitle language" -msgstr "" - -#: share/completions/mplayer.fish:54 -msgid "Subtitle file" -msgstr "" - -#: share/completions/mplayer.fish:55 -msgid "Handle subtitlefile as unicode" -msgstr "" - -#: share/completions/mplayer.fish:56 -msgid "Handle subtitlefile as utf8" -msgstr "" - -#: share/completions/mplayer.fish:58 -#: share/completions/mplayer.fish:76 +#: share/completions/mplayer.fish:58 share/completions/mplayer.fish:76 msgid "Video output" msgstr "" -#: share/completions/mplayer.fish:64 -#: share/completions/mplayer.fish:70 +#: share/completions/mplayer.fish:64 share/completions/mplayer.fish:70 msgid "Audio output" msgstr "" -#: share/completions/mv.fish:1 -msgid "Make backup of each existing destination file" +#: share/completions/msgfmt.fish:5 +#, fuzzy +msgid "Generate a Java ResourceBundle class" +msgstr "Générer le fichier d'index source" + +#: share/completions/msgfmt.fish:6 +msgid "Like --java, and assume Java2 (JDK 1.2 or higher)" msgstr "" -#: share/completions/mv.fish:2 -msgid "Do not prompt before overwriting" +#: share/completions/msgfmt.fish:7 +#, fuzzy +msgid "Generate a .NET .dll file" +msgstr "Générer un fichier maître" + +#: share/completions/msgfmt.fish:8 +#, fuzzy +msgid "Generate a .NET .resources file" +msgstr "Générer le fichier d'index source" + +#: share/completions/msgfmt.fish:9 +#, fuzzy +msgid "Generate a tcl/msgcat .msg file" +msgstr "Générer un fichier maître" + +#: share/completions/msgfmt.fish:10 +#, fuzzy +msgid "Generate a Qt .qm file" +msgstr "Générer un fichier maître" + +#: share/completions/msgfmt.fish:17 +#, fuzzy +msgid "Resource name" +msgstr "Nom du processus" + +#: share/completions/msgfmt.fish:18 +msgid "Locale name, either language or language_COUNTRY" msgstr "" +#: share/completions/msgfmt.fish:19 +#, fuzzy +msgid "Base directory for output" +msgstr "Nommer le répertoire pour les fichiers de travail" + +#: share/completions/mutt.fish:18 +msgid "An expanded version of the given alias is passed to stdout" +msgstr "" + +#: share/completions/mutt.fish:19 +msgid "Attach a file to your message using MIME" +msgstr "" + +#: share/completions/mutt.fish:20 +msgid "Specify a blind-carbon-copy (BCC) recipient" +msgstr "" + +#: share/completions/mutt.fish:21 +msgid "Specify a carbon-copy (CC) recipient" +msgstr "" + +#: share/completions/mutt.fish:22 +msgid "Run command after processing of initialization files" +msgstr "" + +#: share/completions/mutt.fish:23 +#, fuzzy +msgid "Specify which mailbox to load" +msgstr "Spécifier l'adresse de courriel" + +#: share/completions/mutt.fish:24 +msgid "Specify an initialization file to read instead of ~/.muttrc" +msgstr "" + +#: share/completions/mutt.fish:25 +msgid "Specify a draft file containing header and body for the message" +msgstr "" + +#: share/completions/mutt.fish:26 +msgid "Specify a file to include into the body of a message" +msgstr "" + +#: share/completions/mutt.fish:27 +#, fuzzy +msgid "Specify a default mailbox type" +msgstr "Spécifier le type d'enregistrement" + +#: share/completions/mutt.fish:28 +#, fuzzy +msgid "Query a configuration variables value" +msgstr "Spécifier un fichier de configuration" + +#: share/completions/mutt.fish:29 +#, fuzzy +msgid "Specify the subject of the message" +msgstr "Spécifier le titre du rss" + #: share/completions/mv.fish:4 msgid "Answer for overwrite questions" msgstr "" -#: share/completions/mv.fish:5 -msgid "Remove trailing slashes from source" -msgstr "" - -#: share/completions/mv.fish:6 -msgid "Backup suffix" -msgstr "" - -#: share/completions/mv.fish:7 -msgid "Target directory" -msgstr "" - -#: share/completions/mv.fish:8 -msgid "Do not overwrite newer files" -msgstr "" - -#: share/completions/nextd.fish:1 -#: share/completions/prevd.fish:1 -msgid "Also print directory history" -msgstr "" - -#: share/completions/nice.fish:2 -msgid "Increment priority by specified number first" -msgstr "" - -#: share/completions/patch.fish:5 -msgid "Make backup files, when patching a file, rename or copy the original instead of removing it" -msgstr "" - -#: share/completions/patch.fish:6 -msgid "Back up a file if the patch does not match the file exactly" -msgstr "" - -#: share/completions/patch.fish:7 -msgid "Do not back up a file if the patch does not match the file exactly" -msgstr "" - -#: share/completions/patch.fish:8 -msgid "Prefix pref to a file name when generating its simple backup file name" -msgstr "" - -#: share/completions/patch.fish:9 -msgid "Read and write all files in binary mode" -msgstr "" - -#: share/completions/patch.fish:10 -msgid "Interpret the patch file as a ordinary context diff" -msgstr "" - -#: share/completions/patch.fish:11 -msgid "Change to the directory dir immediately" -msgstr "" - -#: share/completions/patch.fish:12 -msgid "Use the #ifdef ... #endif construct to mark changes" -msgstr "" - -#: share/completions/patch.fish:13 -msgid "Print the results of applying the patches without actually changing any files" -msgstr "" - -#: share/completions/patch.fish:14 -msgid "Interpret the patch file as an ed script" -msgstr "" - -#: share/completions/patch.fish:15 -msgid "Remove output files that are empty after the patches have been applied" -msgstr "" - -#: share/completions/patch.fish:16 -msgid "Assume that the user knows exactly what he/she is doing, and do not ask questions" -msgstr "" - -#: share/completions/patch.fish:17 -msgid "Set the maximum fuzz factor" -msgstr "" - -#: share/completions/patch.fish:18 -msgid "This option controls patch's actions when a file is under RCS or SCCS control, and does not exist or is read-only and matches the default version, or when a file is under ClearCase control and does not exist" -msgstr "" - -#: share/completions/patch.fish:20 -msgid "Read the patch from patchfile" -msgstr "" - -#: share/completions/patch.fish:21 -msgid "Match patterns loosely, in case tabs or spaces have been munged in your files" -msgstr "" - -#: share/completions/patch.fish:22 -msgid "Interpret the patch file as a normal diff" -msgstr "" - -#: share/completions/patch.fish:23 -msgid "Ignore patches that seem to be reversed or already applied" -msgstr "" - -#: share/completions/patch.fish:24 -msgid "Send output to outfile instead of patching files in place" -msgstr "" - -#: share/completions/patch.fish:25 -msgid "Strip the smallest prefix containing num leading slashes from each file name found in the patch file" -msgstr "" - -#: share/completions/patch.fish:26 -msgid "Conform more strictly to the POSIX standard" -msgstr "" - -#: share/completions/patch.fish:27 -msgid "Use style word to quote output names" -msgstr "" - -#: share/completions/patch.fish:28 -msgid "Put rejects into rejectfile instead of the default .rej file" -msgstr "" - -#: share/completions/patch.fish:29 -msgid "Assume that this patch was created with the old and new files swapped" -msgstr "" - -#: share/completions/patch.fish:30 -msgid "Work silently, unless an error occurs" -msgstr "" - -#: share/completions/patch.fish:31 -msgid "Suppress questions like -f, but make some different assumptions" -msgstr "" - -#: share/completions/patch.fish:32 -msgid "Set the modification and access times of patched files from time stamps given in context diff headers, local time" -msgstr "" - -#: share/completions/patch.fish:33 -msgid "Interpret the patch file as a unified context diff" -msgstr "" - -#: share/completions/patch.fish:35 -msgid "Use method to determine backup file names" -msgstr "" - -#: share/completions/patch.fish:36 -msgid "Output extra information about the work being done" -msgstr "" - -#: share/completions/patch.fish:37 -msgid "Set internal debugging flags of interest only to patch patchers" -msgstr "" - -#: share/completions/patch.fish:38 -msgid "Prefix pref to the basename of a file name when generating its simple backup file name" -msgstr "" - -#: share/completions/patch.fish:39 -msgid "Use suffix as the simple backup suffix" -msgstr "" - -#: share/completions/patch.fish:40 -msgid "Set the modification and access times of patched files from time stamps given in context diff headers, UTC, GMT" -msgstr "" - -#: share/completions/perl.fish:1 -#: share/completions/ruby.fish:2 +#: share/completions/perl.fish:6 msgid "Specify record separator" msgstr "" -#: share/completions/perl.fish:2 -#: share/completions/ruby.fish:3 +#: share/completions/perl.fish:7 msgid "Turn on autosplit mode" msgstr "" -#: share/completions/perl.fish:3 -#: share/completions/ruby.fish:4 +#: share/completions/perl.fish:8 msgid "Check syntax" msgstr "" -#: share/completions/perl.fish:4 -#: share/completions/ruby.fish:6 -msgid "Debugger" -msgstr "" - -#: share/completions/perl.fish:5 -msgid "Debug option" -msgstr "" - -#: share/completions/perl.fish:6 -#: share/completions/ruby.fish:7 -msgid "Execute command" -msgstr "" - -#: share/completions/perl.fish:7 -#: share/completions/ruby.fish:9 -msgid "Set regexp used to split input" -msgstr "" - -#: share/completions/perl.fish:8 -#: share/completions/ruby.fish:10 -msgid "Edit files in-place" -msgstr "" - #: share/completions/perl.fish:9 -#: share/completions/ruby.fish:11 -msgid "Include path" +msgid "Control Unicode features" msgstr "" #: share/completions/perl.fish:10 -#: share/completions/ruby.fish:12 -msgid "Automatic line ending processing" +msgid "Debug UTF-8 cache" msgstr "" #: share/completions/perl.fish:11 -#: share/completions/ruby.fish:13 -msgid "Loop script" +msgid "ARGV uses UTF-8" msgstr "" #: share/completions/perl.fish:12 -#: share/completions/ruby.fish:14 +msgid "Opened filehandles are UTF-8" +msgstr "" + +#: share/completions/perl.fish:13 +msgid "STDERR is UTF-8" +msgstr "" + +#: share/completions/perl.fish:14 +msgid "Filehandles that are read are UTF-8" +msgstr "" + +#: share/completions/perl.fish:15 +msgid "STDIN is UTF-8" +msgstr "" + +#: share/completions/perl.fish:16 +msgid "Enable Unicode conditionally" +msgstr "" + +#: share/completions/perl.fish:17 +msgid "Filehandles written to are UTF-8" +msgstr "" + +#: share/completions/perl.fish:18 +msgid "STDOUT is UTF-8" +msgstr "" + +#: share/completions/perl.fish:19 +msgid "STDOUT, STDIN, and STDERR are UTF-8" +msgstr "" + +#: share/completions/perl.fish:20 +msgid "Debugger" +msgstr "" + +#: share/completions/perl.fish:25 +msgid "Disable sitecustomize.pl" +msgstr "" + +#: share/completions/perl.fish:27 +#, fuzzy +msgid "Show help and exit" +msgstr "Afficher l'aide et quitter" + +#: share/completions/perl.fish:30 +msgid "Automatic line ending processing" +msgstr "" + +#: share/completions/perl.fish:33 +msgid "Loop script" +msgstr "" + +#: share/completions/perl.fish:34 #, sh-format msgid "Loop script, print $_" msgstr "" -#: share/completions/perl.fish:13 -msgid "Invoke CPP" -msgstr "" - -#: share/completions/perl.fish:14 -#: share/completions/ruby.fish:16 +#: share/completions/perl.fish:35 msgid "Define custom switches" msgstr "" -#: share/completions/perl.fish:15 -#: share/completions/ruby.fish:17 +#: share/completions/perl.fish:36 #, sh-format msgid "Search $PATH for script" msgstr "" -#: share/completions/perl.fish:16 -#: share/completions/ruby.fish:18 +#: share/completions/perl.fish:37 +msgid "Taint checking, but only with warnings" +msgstr "" + +#: share/completions/perl.fish:38 msgid "Taint checking" msgstr "" -#: share/completions/perl.fish:17 +#: share/completions/perl.fish:39 +msgid "Dump core" +msgstr "" + +#: share/completions/perl.fish:40 msgid "Unsafe mode" msgstr "" -#: share/completions/perl.fish:19 -#: share/completions/ruby.fish:22 -msgid "Extract script" -msgstr "" - -#: share/completions/pine.fish:1 -msgid "Open folder" -msgstr "" - -#: share/completions/pine.fish:2 -msgid "Open file" -msgstr "" - -#: share/completions/pine.fish:4 -msgid "Start in folder index" -msgstr "" - -#: share/completions/pine.fish:5 -msgid "Initial set of keystrokes" -msgstr "" - -#: share/completions/pine.fish:6 -msgid "Use function keys for commands" -msgstr "" - -#: share/completions/pine.fish:7 -msgid "Expand collections in FOLDER LIST display" -msgstr "" - -#: share/completions/pine.fish:8 -msgid "Start with specified current message number" -msgstr "" - -#: share/completions/pine.fish:9 -msgid "Open folder read-only" -msgstr "" - -#: share/completions/pine.fish:10 -msgid "Set configuration file" -msgstr "" - -#: share/completions/pine.fish:11 -msgid "Set global configuration file" -msgstr "" - -#: share/completions/pine.fish:12 -msgid "Restricted mode" -msgstr "" - -#: share/completions/pine.fish:13 -msgid "Enable suspension support" -msgstr "" - -#: share/completions/pine.fish:14 -msgid "Produce a sample global configuration file" -msgstr "" - -#: share/completions/pine.fish:15 -msgid "Produce sample configuration file" -msgstr "" - -#: share/completions/pine.fish:16 -msgid "Set mail sort order" -msgstr "" - -#: share/completions/pine.fish:26 -msgid "Config option" -msgstr "" - -#: share/completions/ping.fish:2 -msgid "Audible ping" -msgstr "" - -#: share/completions/ping.fish:3 -msgid "Adaptive ping" -msgstr "" - -#: share/completions/ping.fish:4 -msgid "Allow pinging a broadcast address" -msgstr "" - -#: share/completions/ping.fish:5 -msgid "Do not allow ping to change source address of probes" -msgstr "" - -#: share/completions/ping.fish:6 -msgid "Stop after specified number of ECHO_REQUEST packets" -msgstr "" - -#: share/completions/ping.fish:7 -msgid "Set the SO_DEBUG option on the socket being used" -msgstr "" - -#: share/completions/ping.fish:8 -msgid "Allocate and set 20 bit flow label on ECHO_REQUEST packets" -msgstr "" - -#: share/completions/ping.fish:9 -msgid "Flood ping" -msgstr "" - -#: share/completions/ping.fish:10 -msgid "Wait specified interval of seconds between sending each packet" -msgstr "" - -#: share/completions/ping.fish:11 -msgid "Set source address to specified interface address" -msgstr "" - -#: share/completions/ping.fish:12 -msgid "Send the specified number of packets without waiting for reply" -msgstr "" - -#: share/completions/ping.fish:13 -msgid "Suppress loopback of multicast packets" -msgstr "" - -#: share/completions/ping.fish:14 -msgid "Numeric output only" -msgstr "" - -#: share/completions/ping.fish:15 -msgid "Pad packet with empty bytes" -msgstr "" - -#: share/completions/ping.fish:16 -msgid "Set Quality of Service -related bits in ICMP datagrams" -msgstr "" - -#: share/completions/ping.fish:18 -msgid "Record route" -msgstr "" - -#: share/completions/ping.fish:19 -msgid "Bypass the normal routing tables and send directly to a host on an attached interface" -msgstr "" - -#: share/completions/ping.fish:20 -msgid "Specifies the number of data bytes to be sent" -msgstr "" - -#: share/completions/ping.fish:21 -msgid "Set socket buffer size" -msgstr "" - -#: share/completions/ping.fish:22 -msgid "Set the IP Time to Live" -msgstr "" - -#: share/completions/ping.fish:23 -msgid "Set special IP timestamp options" -msgstr "" - -#: share/completions/ping.fish:24 -msgid "Select Path MTU Discovery strategy" -msgstr "" - -#: share/completions/ping.fish:25 -msgid "Print full user-to-user latency" -msgstr "" - -#: share/completions/ping.fish:28 -msgid "Specify a timeout, in seconds, before ping exits regardless of how many packets have been sent or received" -msgstr "" - -#: share/completions/ping.fish:29 -msgid "Time to wait for a response, in seconds" -msgstr "" - -#: share/completions/ps.fish:3 -#: share/completions/ps.fish:7 -msgid "Select all" -msgstr "" - -#: share/completions/ps.fish:4 -msgid "Invert selection" -msgstr "" - -#: share/completions/ps.fish:5 -msgid "Select all processes except session leaders and terminal-less" -msgstr "" - -#: share/completions/ps.fish:6 -msgid "Select all processes except session leaders" -msgstr "" - -#: share/completions/ps.fish:8 -msgid "Deselect all processes that do not fulfill conditions" -msgstr "" - -#: share/completions/ps.fish:10 -msgid "Select by command" -msgstr "" - -#: share/completions/ps.fish:11 -msgid "Select by group" -msgstr "" - -#: share/completions/ps.fish:13 -#: share/completions/ps.fish:14 -msgid "Select by user" -msgstr "" - -#: share/completions/ps.fish:15 -msgid "Select by group/session" -msgstr "" - -#: share/completions/ps.fish:16 -msgid "Select by PID" -msgstr "" - -#: share/completions/ps.fish:17 -msgid "Select by parent PID" -msgstr "" - -#: share/completions/ps.fish:18 -msgid "Select by session ID" -msgstr "" - -#: share/completions/ps.fish:19 -msgid "Select by tty" -msgstr "" - -#: share/completions/ps.fish:20 -msgid "Extra full format" -msgstr "" - -#: share/completions/ps.fish:21 -#: share/completions/ps.fish:26 -msgid "User defined format" -msgstr "" - -#: share/completions/ps.fish:22 -#: share/completions/ps.fish:28 -msgid "Add column for security data" -msgstr "" - -#: share/completions/ps.fish:23 -msgid "Full format" -msgstr "" - -#: share/completions/ps.fish:24 -msgid "Jobs format" -msgstr "" - -#: share/completions/ps.fish:25 -#: share/functions/__fish_complete_ls.fish:38 -msgid "Long format" -msgstr "" - -#: share/completions/ps.fish:27 -msgid "Do not show flags" -msgstr "" - -#: share/completions/ps.fish:29 -msgid "Show hierarchy" -msgstr "" - -#: share/completions/ps.fish:30 -msgid "Set namelist file" -msgstr "" - -#: share/completions/ps.fish:31 -msgid "Wide output" -msgstr "" - -#: share/completions/ps.fish:32 -#: share/completions/ps.fish:33 -msgid "Show threads" -msgstr "" - -#: share/completions/python.fish:1 -msgid "Execute argument as command" -msgstr "" - -#: share/completions/python.fish:2 -msgid "Debug on" -msgstr "" - -#: share/completions/python.fish:3 -msgid "Ignore environment variables" -msgstr "" - -#: share/completions/python.fish:5 -msgid "Interactive mode after executing commands" -msgstr "" - -#: share/completions/python.fish:6 -msgid "Enable optimizations" -msgstr "" - -#: share/completions/python.fish:7 -msgid "Division control" -msgstr "" - -#: share/completions/python.fish:8 -msgid "Disable import of site module" -msgstr "" - -#: share/completions/python.fish:9 -msgid "Warn on mixed tabs and spaces" -msgstr "" - -#: share/completions/python.fish:10 -msgid "Unbuffered input and output" -msgstr "" - -#: share/completions/python.fish:13 -msgid "Warning control" -msgstr "" - -#: share/completions/python.fish:14 -msgid "Ignore first line of input" -msgstr "" - -#: share/completions/read.fish:2 -msgid "Set prompt command" -msgstr "" - -#: share/completions/read.fish:3 -#: share/completions/set.fish:59 -msgid "Export variable to subprocess" -msgstr "" - -#: share/completions/read.fish:4 -#: share/completions/set.fish:61 -msgid "Make variable scope global" -msgstr "" - -#: share/completions/read.fish:5 -#: share/completions/set.fish:62 -msgid "Make variable scope local" -msgstr "" - -#: share/completions/read.fish:6 -#: share/completions/set.fish:63 -msgid "Make variable scope universal, i.e. share variable with all the users fish processes on this computer" -msgstr "" - -#: share/completions/read.fish:7 -#: share/completions/set.fish:60 -msgid "Do not export variable to subprocess" -msgstr "" - -#: share/completions/renice.fish:2 -msgid "Force following parameters to be process ID's (The default)" -msgstr "" - -#: share/completions/renice.fish:3 -msgid "Force following parameters to be interpreted as process group ID's" -msgstr "" - -#: share/completions/renice.fish:4 -msgid "Force following parameters to be interpreted as user names" -msgstr "" - -#: share/completions/rm.fish:2 -msgid "Unlink directory (Only by superuser)" -msgstr "" - -#: share/completions/rm.fish:3 -msgid "Never prompt before removal" -msgstr "" - -#: share/completions/rm.fish:4 -msgid "Prompt before removal" -msgstr "" - -#: share/completions/rm.fish:5 -#: share/completions/rm.fish:6 -msgid "Recursively remove subdirectories" -msgstr "" - -#: share/completions/rm.fish:7 -msgid "Explain what is done" -msgstr "" - -#: share/completions/rmdir.fish:3 -msgid "Ignore errors from non-empty directories" -msgstr "" - -#: share/completions/rmdir.fish:4 -msgid "Remove each component of path" -msgstr "" - -#: share/completions/rpm.fish:8 -msgid "List of rpm configuration files" -msgstr "" - -#: share/completions/rpm.fish:9 -msgid "Pipe output through specified command" -msgstr "" - -#: share/completions/rpm.fish:10 -msgid "Specify directory for rpm database" -msgstr "" - -#: share/completions/rpm.fish:15 -msgid "Specify root directory for rpm operations" +#: share/completions/perl.fish:42 +#, fuzzy +msgid "Display configuration and exit" +msgstr "Afficher la version et quitter" + +#: share/completions/perl.fish:43 +#, fuzzy +msgid "Show warnings" +msgstr "Afficher les entrées ARP" + +#: share/completions/perl.fish:44 +#, fuzzy +msgid "Force warnings" +msgstr "Forcer une nouvelle révision" + +#: share/completions/perl.fish:45 +#, fuzzy +msgid "Disable warnings" +msgstr "Désactiver le téléchargement de paquets" + +#: share/completions/portmaster.fish:49 +#, fuzzy +msgid "Ports Directory" +msgstr "Répertoire" + +#: share/completions/portmaster.fish:55 +#, fuzzy +msgid "Installed Package" +msgstr "Installer des paquets source" + +#: share/completions/psql.fish:19 +#, fuzzy +msgid "execute commands from file, then exit" +msgstr "Exécuter la commande si la précédente a échoué" + +#: share/completions/psql.fish:63 +msgid "database server port" msgstr "" #: share/completions/rpm.fish:22 @@ -8003,11 +5778,15 @@ msgid "Add suggested packages to the transaction set when needed" msgstr "" #: share/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" +msgid "" +"Installs or upgrades all the files in the package, even if they aren't " +"needed (missingok) and don't exist" msgstr "" #: share/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 "" #: share/completions/rpm.fish:25 @@ -8031,11 +5810,15 @@ msgid "Don't check for sufficient disk space before installation" msgstr "" #: share/completions/rpm.fish:30 -msgid "Allow installation or upgrading even if the architectures of the binary package and host don't match" +msgid "" +"Allow installation or upgrading even if the architectures of the binary " +"package and host don't match" msgstr "" #: share/completions/rpm.fish:31 -msgid "Allow installation or upgrading even if the operating systems of the binary package and host don't match" +msgid "" +"Allow installation or upgrading even if the operating systems of the binary " +"package and host don't match" msgstr "" #: share/completions/rpm.fish:32 @@ -8046,13 +5829,11 @@ msgstr "" msgid "Update only the database, not the filesystem" msgstr "" -#: share/completions/rpm.fish:34 -#: share/completions/rpm.fish:94 +#: share/completions/rpm.fish:34 share/completions/rpm.fish:94 msgid "Don't verify package or header digests when reading" msgstr "" -#: share/completions/rpm.fish:35 -#: share/completions/rpm.fish:97 +#: share/completions/rpm.fish:35 share/completions/rpm.fish:97 msgid "Don't verify package or header signatures when reading" msgstr "" @@ -8088,8 +5869,7 @@ msgstr "" msgid "Don't execute postun scripts" msgstr "" -#: share/completions/rpm.fish:44 -#: share/completions/rpm.fish:115 +#: share/completions/rpm.fish:44 share/completions/rpm.fish:115 msgid "Don't execute trigger scriptlets" msgstr "" @@ -8097,13 +5877,11 @@ msgstr "" msgid "Don't execute triggerin scriptlets" msgstr "" -#: share/completions/rpm.fish:46 -#: share/completions/rpm.fish:116 +#: share/completions/rpm.fish:46 share/completions/rpm.fish:116 msgid "Don't execute triggerun scriptlets" msgstr "" -#: share/completions/rpm.fish:47 -#: share/completions/rpm.fish:117 +#: share/completions/rpm.fish:47 share/completions/rpm.fish:117 msgid "Don't execute triggerpostun scriptlets" msgstr "" @@ -8112,32 +5890,36 @@ msgid "Allow an upgrade to replace a newer package with an older one" msgstr "" #: share/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" +msgid "" +"Print percentages as files are unpacked from the package archive. This is " +"intended to make rpm easy to run from other tools" msgstr "" #: share/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 "" -#: share/completions/rpm.fish:51 -msgid "Translate all paths that start with first half of following parameter to second half of following parameter" -msgstr "" - -#: share/completions/rpm.fish:52 -#: share/completions/rpm.fish:118 +#: share/completions/rpm.fish:52 share/completions/rpm.fish:118 msgid "Re-package the files before erasing" msgstr "" #: share/completions/rpm.fish:53 -msgid "Install the packages even if they replace files from other, already installed, packages" +msgid "" +"Install the packages even if they replace files from other, already " +"installed, packages" msgstr "" #: share/completions/rpm.fish:54 -msgid "Install the packages even if some of them are already installed on this system" +msgid "" +"Install the packages even if some of them are already installed on this " +"system" msgstr "" #: share/completions/rpm.fish:55 -msgid "Don't install the package, simply check for and report potential conflicts" +msgid "" +"Don't install the package, simply check for and report potential conflicts" msgstr "" #: share/completions/rpm.fish:59 @@ -8161,7 +5943,9 @@ msgid "List all the files in each selected package" msgstr "" #: share/completions/rpm.fish:64 -msgid "Display package information, including name, version, and description. Uses --queryformat if specified" +msgid "" +"Display package information, including name, version, and description. Uses " +"--queryformat if specified" msgstr "" #: share/completions/rpm.fish:65 @@ -8185,11 +5969,12 @@ msgid "List the package specific scriptlets" msgstr "" #: share/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" +msgid "" +"Display the states of files in the package. The state of each file is one of " +"normal, not installed, or replaced" msgstr "" -#: share/completions/rpm.fish:71 -#: share/completions/rpm.fish:72 +#: share/completions/rpm.fish:71 share/completions/rpm.fish:72 msgid "Display the trigger scripts contained in the package" msgstr "" @@ -8202,7 +5987,9 @@ msgid "Query package owning specified file" msgstr "" #: share/completions/rpm.fish:80 -msgid "Query package that contains a given file identifier, i.e. the MD5 digest of the file contents" +msgid "" +"Query package that contains a given file identifier, i.e. the MD5 digest of " +"the file contents" msgstr "" #: share/completions/rpm.fish:81 @@ -8210,7 +5997,9 @@ msgid "Query packages with the specified group" msgstr "" #: share/completions/rpm.fish:82 -msgid "Query package that contains a given header identifier, i.e. the SHA1 digest of the immutable header region" +msgid "" +"Query package that contains a given header identifier, i.e. the SHA1 digest " +"of the immutable header region" msgstr "" #: share/completions/rpm.fish:83 @@ -8218,7 +6007,9 @@ msgid "Query an (uninstalled) package in specified file" msgstr "" #: share/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" +msgid "" +"Query package that contains a given package identifier, i.e. the MD5 digest " +"of the combined header and payload contents" msgstr "" #: share/completions/rpm.fish:85 @@ -8238,7 +6029,8 @@ msgid "Query all packages that provide the specified capability" msgstr "" #: share/completions/rpm.fish:89 -msgid "Query all packages that requires the specified capability for functioning" +msgid "" +"Query all packages that requires the specified capability for functioning" msgstr "" #: share/completions/rpm.fish:93 @@ -8333,44 +6125,74 @@ msgstr "" msgid "Erase package" msgstr "" -#: share/completions/ruby.fish:5 -msgid "Kanji code-set" +#: share/completions/rsync.fish:41 +msgid "Force a fixed checksum block-size" +msgstr "" + +#: share/completions/rsync.fish:42 +#, fuzzy +msgid "Specify the remote shell to use" +msgstr "Spécifier l'expiration de la cache" + +#: share/completions/rsync.fish:43 +msgid "Specify the rsync to run on remote machine" +msgstr "" + +#: share/completions/rsync.fish:69 +msgid "Also compare received files relative to DIR" +msgstr "" + +#: share/completions/rsync.fish:70 +msgid "" +"Also compare received files relative to DIR and include copies of unchanged " +"files" +msgstr "" + +#: share/completions/rsync.fish:93 +msgid "Output filenames using the specified format" +msgstr "" + +#: share/completions/rsync.fish:94 +msgid "Read password from FILE" +msgstr "" + +#: share/completions/rsync.fish:96 +msgid "Limit I/O bandwidth; KBytes per second" +msgstr "" + +#: share/completions/rsync.fish:97 +msgid "Write a batched update to FILE" +msgstr "" + +#: share/completions/rsync.fish:99 +msgid "Read a batched update from FILE" +msgstr "" + +#: share/completions/rsync.fish:100 +msgid "Force an older protocol version to be used" +msgstr "" + +#: share/completions/rsync.fish:101 +msgid "Set block/file checksum seed (advanced)" +msgstr "" + +#: share/completions/ruby.fish:7 +msgid "Execute command" msgstr "" #: share/completions/ruby.fish:15 msgid "Require file" msgstr "" -#: share/completions/ruby.fish:20 -msgid "Verbose mode without message" -msgstr "" - -#: share/completions/ruby.fish:24 -msgid "Compiler debug mode" -msgstr "" - -#: share/completions/scp.fish:29 +#: share/completions/scp.fish:40 msgid "Bandwidth limit" msgstr "" -#: share/completions/scp.fish:30 -#: share/completions/ssh.fish:36 +#: share/completions/scp.fish:41 share/completions/ssh.fish:39 #: share/completions/sshfs.fish:25 msgid "Port" msgstr "" -#: share/completions/scp.fish:31 -msgid "Preserves modification times, access times, and modes from the original file" -msgstr "" - -#: share/completions/scp.fish:33 -msgid "Recursively copy" -msgstr "" - -#: share/completions/scp.fish:34 -msgid "Encyption program" -msgstr "" - #: share/completions/screen.fish:1 msgid "Print a list of running screen sessions" msgstr "" @@ -8383,747 +6205,147 @@ msgstr "" msgid "Evalute file" msgstr "" -#: share/completions/sed.fish:15 -msgid "Edit files in place" -msgstr "" - #: share/completions/sed.fish:22 msgid "Specify line-length" msgstr "" -#: share/completions/sed.fish:23 -msgid "Disable all GNU extensions" -msgstr "" - -#: share/completions/sed.fish:24 -#: share/completions/sed.fish:34 -msgid "Use extended regexp" -msgstr "" - -#: share/completions/sed.fish:25 -msgid "Consider files as separate" -msgstr "" - -#: share/completions/sed.fish:26 -msgid "Use minimal IO buffers" -msgstr "" - -#: share/completions/sed.fish:35 -msgid "Delay opening files until a command containing the related 'w' function is applied" -msgstr "" - -#: share/completions/service.fish:3 -msgid "Service name" -msgstr "" - -#: share/completions/set.fish:58 -msgid "Erase variable" -msgstr "" - -#: share/completions/set.fish:64 -msgid "Test if variable is defined" -msgstr "" - -#: share/completions/set.fish:71 -#: share/completions/set_color.fish:1 +#: share/completions/set.fish:73 share/completions/set_color.fish:1 msgid "Color" msgstr "" -#: share/completions/set.fish:72 -#: share/completions/set_color.fish:2 +#: share/completions/set.fish:74 share/completions/set_color.fish:2 msgid "Change background color" msgstr "" -#: share/completions/set.fish:73 -#: share/completions/set_color.fish:3 -msgid "Make font bold" -msgstr "" - -#: share/completions/set.fish:77 +#: share/completions/set.fish:79 msgid "Locale" msgstr "" -#: share/completions/sort.fish:1 -msgid "Ignore leading blanks" -msgstr "" - -#: share/completions/sort.fish:2 -msgid "Consider only blanks and alphanumerics" -msgstr "" - -#: share/completions/sort.fish:4 -msgid "Compare general numeric value" -msgstr "" - -#: share/completions/sort.fish:5 -msgid "Consider only printable" -msgstr "" - -#: share/completions/sort.fish:6 -msgid "Compare month names" -msgstr "" - -#: share/completions/sort.fish:7 -msgid "Compare string numerical value" -msgstr "" - -#: share/completions/sort.fish:8 -msgid "Reverse results" -msgstr "" - -#: share/completions/sort.fish:9 -msgid "Only check if sorted" -msgstr "" - -#: share/completions/sort.fish:10 -msgid "Define key" -msgstr "" - -#: share/completions/sort.fish:11 -msgid "Merge sorted files" -msgstr "" - #: share/completions/sort.fish:12 msgid "Write to file" msgstr "" -#: share/completions/sort.fish:13 -msgid "Stabilize sort" -msgstr "" - #: share/completions/sort.fish:14 msgid "Set memory buffer size" msgstr "" -#: share/completions/sort.fish:15 -msgid "Field separator" -msgstr "" - #: share/completions/sort.fish:16 msgid "Set temporary directory" msgstr "" -#: share/completions/sort.fish:17 -msgid "Output only first of equal lines" -msgstr "" - -#: share/completions/sort.fish:18 -msgid "Lines end with 0 byte" -msgstr "" - -#: share/completions/ssh.fish:19 -msgid "Disables forwarding of the authentication agent" -msgstr "" - -#: share/completions/ssh.fish:20 -msgid "Enables forwarding of the authentication agent" -msgstr "" - -#: share/completions/ssh.fish:21 +#: share/completions/ssh.fish:24 msgid "Interface to transmit from" msgstr "" -#: share/completions/ssh.fish:27 +#: share/completions/ssh.fish:30 msgid "Escape character" msgstr "" -#: share/completions/ssh.fish:28 -msgid "Go to background" -msgstr "" - -#: share/completions/ssh.fish:29 -msgid "Allow remote host to connect to local forwarded ports" -msgstr "" - -#: share/completions/ssh.fish:30 -msgid "Smartcard device" -msgstr "" - -#: share/completions/ssh.fish:31 -msgid "Disable forwarding of Kerberos tickets" -msgstr "" - -#: share/completions/ssh.fish:32 -msgid "User" -msgstr "" - -#: share/completions/ssh.fish:33 -msgid "MAC algorithm" -msgstr "" - -#: share/completions/ssh.fish:34 -msgid "Prevent reading from stdin" -msgstr "" - #: share/completions/ssh.fish:35 -msgid "Do not execute remote command" -msgstr "" - -#: share/completions/ssh.fish:38 -msgid "Subsystem" -msgstr "" - -#: share/completions/ssh.fish:39 -msgid "Force pseudo-tty allocation" -msgstr "" - -#: share/completions/ssh.fish:40 -msgid "Disable pseudo-tty allocation" -msgstr "" - -#: share/completions/ssh.fish:41 -msgid "Disable X11 forwarding" -msgstr "" - -#: share/completions/ssh.fish:42 -msgid "Enable X11 forwarding" -msgstr "" - -#: share/completions/ssh.fish:43 -msgid "Locally forwarded ports" -msgstr "" - -#: share/completions/ssh.fish:44 -msgid "Remotely forwarded ports" -msgstr "" - -#: share/completions/ssh.fish:45 -msgid "Dynamic port forwarding" -msgstr "" - -#: share/completions/sshfs.fish:26 -msgid "Compression" -msgstr "" - -#: share/completions/sshfs.fish:28 -msgid "Enable debug" -msgstr "" - -#: share/completions/sshfs.fish:29 -msgid "Foreground operation" -msgstr "" - -#: share/completions/sshfs.fish:30 -msgid "Disable multi-threaded operation" -msgstr "" - -#: share/completions/status.fish:2 -msgid "Test if a command substitution is currently evaluated" -msgstr "" - -#: share/completions/status.fish:3 -msgid "Test if a code block is currently evaluated" -msgstr "" - -#: share/completions/status.fish:4 -msgid "Test if this is an interactive shell" -msgstr "" - -#: share/completions/status.fish:5 -msgid "Test if this is a login shell" -msgstr "" - -#: share/completions/status.fish:6 -msgid "Test if all new jobs are put under job control" -msgstr "" - -#: share/completions/status.fish:7 -msgid "Test if only interactive new jobs are put under job control" -msgstr "" - -#: share/completions/status.fish:8 -msgid "Test if new jobs are never put under job control" -msgstr "" - -#: share/completions/status.fish:9 -msgid "Set which jobs are out under job control" -msgstr "" - -#: share/completions/status.fish:10 -msgid "Print a list of all function calls leading up to running the current command" -msgstr "" - -#: share/completions/su.fish:4 -msgid "Make login shell" +msgid "User" msgstr "" #: share/completions/su.fish:5 msgid "Pass command to shell" msgstr "" -#: share/completions/su.fish:6 -msgid "Pass -f to the shell" +#: share/completions/sylpheed.fish:8 +msgid "Open composition window with address" msgstr "" -#: share/completions/su.fish:7 -#: share/completions/su.fish:8 -msgid "Preserve environment" +#: share/completions/sylpheed.fish:9 +msgid "Open composition window with attached files" msgstr "" -#: share/completions/sudo.fish:5 -msgid "Command to run" -msgstr "" - -#: share/completions/sudo.fish:8 -msgid "Validate" -msgstr "" - -#: share/completions/svn.fish:21 -msgid "Place files or directories under version control" -msgstr "" - -#: share/completions/svn.fish:22 -msgid "Output files/URLs with revision and author information inline" -msgstr "" - -#: share/completions/svn.fish:23 -msgid "Output content of files/URLs" -msgstr "" - -#: share/completions/svn.fish:24 -msgid "Check out a working copy from the repository" -msgstr "" - -#: share/completions/svn.fish:25 -msgid "Recursively clean up the working copy" -msgstr "" - -#: share/completions/svn.fish:26 -msgid "Send changes from your working copy to the repository" -msgstr "" - -#: share/completions/svn.fish:27 -msgid "Commit an unversioned file or tree into the repository" -msgstr "" - -#: share/completions/svn.fish:28 -msgid "Display information about a local or remote item" -msgstr "" - -#: share/completions/svn.fish:29 -msgid "List directory entries in the repository" -msgstr "" - -#: share/completions/svn.fish:30 -msgid "Lock working copy paths or URLs in the repository" -msgstr "" - -#: share/completions/svn.fish:31 -msgid "Show the log messages for a set of revision(s) and/or file(s)" -msgstr "" - -#: share/completions/svn.fish:32 -msgid "Apply the differences between two sources to a working copy path" -msgstr "" - -#: share/completions/svn.fish:33 -msgid "Create a new directory under version control" -msgstr "" - -#: share/completions/svn.fish:34 -msgid "Move and/or rename something in working copy or repository" -msgstr "" - -#: share/completions/svn.fish:35 -msgid "Remove a property from files, dirs, or revisions" -msgstr "" - -#: share/completions/svn.fish:36 -msgid "Edit a property with an external editor on targets" -msgstr "" - -#: share/completions/svn.fish:37 -msgid "Print value of a property on files, dirs, or revisions" -msgstr "" - -#: share/completions/svn.fish:38 -msgid "List all properties on files, dirs, or revisions" -msgstr "" - -#: share/completions/svn.fish:39 -msgid "Remove conflicted state on working copy files or directories" -msgstr "" - -#: share/completions/svn.fish:40 -msgid "Restore pristine working copy file" -msgstr "" - -#: share/completions/svn.fish:41 -msgid "Print the status of working copy files and directories" -msgstr "" - -#: share/completions/svn.fish:42 -msgid "Update the working copy to a different URL" -msgstr "" - -#: share/completions/svn.fish:43 -msgid "Unlock working copy paths or URLs" -msgstr "" - -#: share/completions/svn.fish:44 -msgid "Bring changes from the repository into the working copy" -msgstr "" - -#: share/completions/svn.fish:45 -msgid "Describe the usage of this program or its subcommands" -msgstr "" - -#: share/completions/svn.fish:48 -msgid "Specify revision" -msgstr "" - -#: share/completions/svn.fish:50 -msgid "Pass contents of file as additional args" -msgstr "" - -#: share/completions/svn.fish:54 -msgid "Print as little as possible" -msgstr "" - -#: share/completions/svn.fish:56 -msgid "Force operation to run" -msgstr "" - -#: share/completions/svn.fish:58 -msgid "Enable automatic properties" -msgstr "" - -#: share/completions/svn.fish:60 -msgid "Disable automatic properties" -msgstr "" - -#: share/completions/svn.fish:62 -msgid "Print extra info" -msgstr "" - -#: share/completions/svn.fish:64 -msgid "Specify a username" -msgstr "" +#: share/completions/sylpheed.fish:10 +#, fuzzy +msgid "Receive new messages" +msgstr "Remplacer un message du journal" -#: share/completions/svn.fish:66 -msgid "Specify a password" +#: share/completions/sylpheed.fish:11 +msgid "Receive new messages of all accounts" msgstr "" -#: share/completions/svn.fish:68 -msgid "Don't cache auth tokens" +#: share/completions/sylpheed.fish:12 +msgid "Send all queued messages" msgstr "" -#: share/completions/svn.fish:70 -msgid "Do no interactive prompting" +#: share/completions/sylpheed.fish:13 +msgid "Show the total number of messages for folder" msgstr "" -#: share/completions/svn.fish:72 -msgid "Read user config files from named directory" +#: share/completions/sylpheed.fish:14 +msgid "Show the total number of messages for each folder" msgstr "" -#: share/completions/svn.fish:74 -msgid "Don't unlock targets" -msgstr "" - -#: share/completions/svn.fish:76 -msgid "Specify commit message" -msgstr "" - -#: share/completions/svn.fish:78 -msgid "Read commit message from file" -msgstr "" - -#: share/completions/svn.fish:80 -msgid "Force log message source validity" -msgstr "" - -#: share/completions/svn.fish:82 -msgid "Specify external editor" -msgstr "" - -#: share/completions/svn.fish:84 -msgid "Descend recursively" -msgstr "" - -#: share/completions/svn.fish:86 -msgid "Give output suitable for concatenation" -msgstr "" - -#: share/completions/svn.fish:88 -msgid "Output in XML" -msgstr "" - -#: share/completions/svn.fish:90 -msgid "Specify merge command" -msgstr "" - -#: share/completions/svn.fish:92 -msgid "Force encoding" -msgstr "" - -#: share/completions/svn.fish:94 -msgid "Operate on revision property" -msgstr "" - -#: share/completions/svn.fish:96 -msgid "Use strict semantics" -msgstr "" - -#: share/completions/svn.fish:98 -msgid "Ignore externals definitions" -msgstr "" - -#: share/completions/svn.fish:104 -msgid "Do not cross copies" -msgstr "" - -#: share/completions/svn.fish:105 -msgid "Maximum number of log entries" -msgstr "" - -#: share/completions/svn.fish:111 -msgid "Make no changes" -msgstr "" - -#: share/completions/svn.fish:112 -msgid "Ignore ancestry when calculating merge" -msgstr "" - -#: share/completions/svn.fish:118 -msgid "Display update information" -msgstr "" - -#: share/completions/svn.fish:119 -msgid "Disregard ignores" -msgstr "" - -#: share/completions/svn.fish:125 -msgid "Relocate VIA URL-rewriting" -msgstr "" - -#: share/completions/svn.fish:131 -msgid "Print client version info" -msgstr "" - -#: share/completions/tar.fish:1 -#: share/completions/tar.fish:2 -msgid "Append archive to archive" -msgstr "" - -#: share/completions/tar.fish:3 -msgid "Create archive" -msgstr "" - -#: share/completions/tar.fish:4 -#: share/completions/tar.fish:5 -msgid "Compare archive and filesystem" -msgstr "" - -#: share/completions/tar.fish:6 -msgid "Delete from archive" -msgstr "" - -#: share/completions/tar.fish:7 -msgid "Append files to archive" -msgstr "" - -#: share/completions/tar.fish:8 -msgid "List archive" -msgstr "" - -#: share/completions/tar.fish:9 -msgid "Append new files" -msgstr "" - -#: share/completions/tar.fish:10 -#: share/completions/tar.fish:11 -msgid "Extract from archive" -msgstr "" - -#: share/completions/tar.fish:12 -msgid "Keep access time" -msgstr "" - -#: share/completions/tar.fish:14 -msgid "Reblock while reading" -msgstr "" - -#: share/completions/tar.fish:16 -msgid "Print directory names" -msgstr "" - -#: share/completions/tar.fish:17 -msgid "Archive file" -msgstr "" - -#: share/completions/tar.fish:18 -msgid "Archive is local" -msgstr "" - -#: share/completions/tar.fish:19 -msgid "Run script at end of tape" -msgstr "" +#: share/completions/sylpheed.fish:15 +#, fuzzy +msgid "Specify directory with configuration files" +msgstr "Spécifier un fichier de configuration" -#: share/completions/tar.fish:20 -msgid "Use old incremental GNU format" +#: share/completions/tar.fish:19 share/functions/cd.fish:5 +msgid "Change directory" msgstr "" #: share/completions/tar.fish:21 -msgid "Use new incremental GNU format" -msgstr "" - -#: share/completions/tar.fish:22 -msgid "Dereference symlinks" -msgstr "" - -#: share/completions/tar.fish:23 -msgid "Ignore zero block in archive" -msgstr "" - -#: share/completions/tar.fish:24 -msgid "Filter through bzip2" -msgstr "" - -#: share/completions/tar.fish:25 -msgid "Don't exit on unreadable files" -msgstr "" - -#: share/completions/tar.fish:26 -msgid "Don't overwrite" -msgstr "" - -#: share/completions/tar.fish:27 -msgid "Starting file in archive" -msgstr "" - -#: share/completions/tar.fish:28 -msgid "Stay in local filesystem" -msgstr "" - -#: share/completions/tar.fish:29 -msgid "Tape length" -msgstr "" - -#: share/completions/tar.fish:30 -msgid "Don't extract modification time" +msgid "Archive file" msgstr "" #: share/completions/tar.fish:31 -msgid "Multi volume archive" -msgstr "" - -#: share/completions/tar.fish:32 -msgid "Only store newer files" +msgid "Starting file in archive" msgstr "" #: share/completions/tar.fish:33 -#: share/completions/tar.fish:34 -msgid "Use V7 format" -msgstr "" - -#: share/completions/tar.fish:35 -msgid "Extract to stdout" +msgid "Tape length" msgstr "" #: share/completions/tar.fish:36 -#: share/completions/tar.fish:37 -msgid "Extract all permissions" -msgstr "" - -#: share/completions/tar.fish:38 -msgid "Don't strip leading /" -msgstr "" - -#: share/completions/tar.fish:39 -msgid "Preserve all permissions and do not sort file arguments" -msgstr "" - -#: share/completions/tar.fish:40 -msgid "Show record number" -msgstr "" - -#: share/completions/tar.fish:41 -msgid "Remove files after adding to archive" -msgstr "" - -#: share/completions/tar.fish:42 -#: share/completions/tar.fish:43 -msgid "Do not sort file arguments" -msgstr "" - -#: share/completions/tar.fish:44 -msgid "Preserve file ownership" -msgstr "" - -#: share/completions/tar.fish:45 -msgid "Handle sparse files" -msgstr "" - -#: share/completions/tar.fish:46 -msgid "Extract file from file" -msgstr "" - -#: share/completions/tar.fish:47 -msgid "-T has null-terminated names" -msgstr "" - -#: share/completions/tar.fish:48 -msgid "Print total bytes written" +msgid "Only store newer files" msgstr "" #: share/completions/tar.fish:50 -msgid "Set volume name" -msgstr "" - -#: share/completions/tar.fish:52 -#: share/completions/tar.fish:53 -msgid "Ask for confirmation" +msgid "Extract file from file" msgstr "" #: share/completions/tar.fish:54 -msgid "Verify archive" -msgstr "" - -#: share/completions/tar.fish:55 -msgid "Exclude file" -msgstr "" - -#: share/completions/tar.fish:56 -msgid "Exclude files listed in specified file" -msgstr "" - -#: share/completions/tar.fish:57 -#: share/completions/tar.fish:58 -msgid "Filter through compress" +msgid "Set volume name" msgstr "" #: share/completions/tar.fish:59 -#: share/completions/tar.fish:60 -msgid "Filter through gzip" +msgid "Exclude file" msgstr "" -#: share/completions/tar.fish:61 +#: share/completions/tar.fish:60 +msgid "Exclude files listed in specified file" +msgstr "" + +#: share/completions/tar.fish:65 msgid "Filter through specified program" msgstr "" -#: share/completions/telnet.fish:9 -#: share/completions/telnet.fish:14 -msgid "Specifies an 8-bit data path." -msgstr "" +#: share/completions/telnet.fish:9 share/completions/telnet.fish:14 +#, fuzzy +msgid "Specifies an 8-bit data path" +msgstr "Spécifier la variable MANPATH" #: share/completions/telnet.fish:10 -msgid "Do not try to negotiate TELNET BINARY option." +msgid "Do not try to negotiate TELNET BINARY option" msgstr "" #: share/completions/telnet.fish:11 -msgid "Stops any character from being recognized as an escape character." +msgid "Stops any character from being recognized as an escape character" msgstr "" #: share/completions/telnet.fish:12 -msgid "Use local Kerberos authentication, if possible." +msgid "Use local Kerberos authentication, if possible" msgstr "" #: share/completions/telnet.fish:13 -msgid "Specifies no automatic login to remote system." +msgid "Specifies no automatic login to remote system" msgstr "" #: share/completions/telnet.fish:15 -msgid "Attempt automatic login." +msgid "Attempt automatic login" msgstr "" #: share/completions/telnet.fish:16 @@ -9131,245 +6353,66 @@ msgid "Disables reading user's .telnetrc" msgstr "" #: share/completions/telnet.fish:17 -msgid "Sets debug mode." -msgstr "" +#, fuzzy +msgid "Sets debug mode" +msgstr "Mode débogage" #: share/completions/telnet.fish:18 -msgid "Sets IP TOS." +msgid "Sets IP TOS" msgstr "" #: share/completions/telnet.fish:19 -msgid "Disables atype type of authentication." +msgid "Disables specified type of authentication" msgstr "" #: share/completions/telnet.fish:20 -msgid "User login." -msgstr "" +#, fuzzy +msgid "User login" +msgstr "Répertoire personnel" #: share/completions/telnet.fish:21 -msgid "Log to tracefile." +msgid "Log to tracefile" msgstr "" #: share/completions/telnet.fish:22 -msgid "Turn on encryption." +msgid "Turn on encryption" msgstr "" #: share/completions/telnet.fish:23 -msgid "User interface similar to rlogin." +msgid "User interface similar to rlogin" msgstr "" #: share/completions/telnet.fish:24 -msgid "Use Kerberos realm for authentication." +msgid "Use Kerberos realm for authentication" msgstr "" -#: share/completions/test.fish:4 -msgid "Negate expression" +#: share/completions/tmux.fish:1 +#, fuzzy +msgid "available sessions" +msgstr "Afficher la liste disponible" + +#: share/completions/tmux.fish:5 +msgid "connected clients" msgstr "" -#: share/completions/test.fish:5 -msgid "Logical and" +#: share/completions/tmux.fish:9 +#, fuzzy +msgid "window panes" +msgstr "Changement de dimension de fenêtre" + +#: share/completions/totem.fish:18 +msgid "Tell any running totem instance: Add to playlist" msgstr "" -#: share/completions/test.fish:6 -msgid "Logical or" -msgstr "" - -#: share/completions/test.fish:7 -msgid "String length is non-zero" -msgstr "" - -#: share/completions/test.fish:8 -msgid "String length is zero" -msgstr "" - -#: share/completions/test.fish:9 -msgid "Strings are equal" -msgstr "" - -#: share/completions/test.fish:10 -msgid "Strings are not equal" -msgstr "" - -#: share/completions/test.fish:11 -msgid "Integers are equal" -msgstr "" - -#: share/completions/test.fish:12 -msgid "Left integer larger than or equal to right integer" -msgstr "" - -#: share/completions/test.fish:13 -msgid "Left integer larger than right integer" -msgstr "" - -#: share/completions/test.fish:14 -msgid "Left integer less than or equal to right integer" -msgstr "" - -#: share/completions/test.fish:15 -msgid "Left integer less than right integer" -msgstr "" - -#: share/completions/test.fish:16 -msgid "Left integer not equal to right integer" -msgstr "" - -#: share/completions/test.fish:17 -msgid "Left file equal to right file" -msgstr "" - -#: share/completions/test.fish:18 -msgid "Left file newer than right file" -msgstr "" - -#: share/completions/test.fish:19 -msgid "Left file older than right file" -msgstr "" - -#: share/completions/test.fish:20 -msgid "File is block device" -msgstr "" - -#: share/completions/test.fish:21 -msgid "File is character device" -msgstr "" - -#: share/completions/test.fish:22 -msgid "File is directory" -msgstr "" - -#: share/completions/test.fish:23 -msgid "File exists" -msgstr "" - -#: share/completions/test.fish:24 -msgid "File is regular" -msgstr "" - -#: share/completions/test.fish:25 -msgid "File is set-group-ID" -msgstr "" - -#: share/completions/test.fish:26 -#: share/completions/test.fish:29 -msgid "File is symlink" -msgstr "" - -#: share/completions/test.fish:27 -msgid "File owned by effective group ID" -msgstr "" - -#: share/completions/test.fish:28 -msgid "File has sticky bit set" -msgstr "" - -#: share/completions/test.fish:30 -msgid "File owned by effective user ID" -msgstr "" - -#: share/completions/test.fish:31 -msgid "File is named pipe" -msgstr "" - -#: share/completions/test.fish:32 -msgid "File is readable" -msgstr "" - -#: share/completions/test.fish:33 -msgid "File size is non-zero" -msgstr "" - -#: share/completions/test.fish:34 -msgid "File is socket" -msgstr "" - -#: share/completions/test.fish:35 -msgid "FD is terminal" -msgstr "" - -#: share/completions/test.fish:36 -msgid "File set-user-ID bit is set" -msgstr "" - -#: share/completions/test.fish:37 -msgid "File is writable" -msgstr "" - -#: share/completions/test.fish:38 -msgid "File is executable" -msgstr "" - -#: share/completions/time.fish:2 -#: share/completions/type.fish:11 -msgid "Command" -msgstr "" - -#: share/completions/time.fish:4 -msgid "Specify output format" -msgstr "" - -#: share/completions/time.fish:5 -msgid "Use the portable output format" -msgstr "" - -#: share/completions/time.fish:6 -msgid "Do not send the results to stderr, but overwrite the specified file" -msgstr "" - -#: share/completions/time.fish:7 -msgid "(Used together with -o) Do not overwrite but append" -msgstr "" - -#: share/completions/top.fish:3 -msgid "Toggle command line/program name" -msgstr "" - -#: share/completions/top.fish:4 -msgid "Update interval" -msgstr "" - -#: share/completions/top.fish:6 -msgid "Toggle idle processes" -msgstr "" - -#: share/completions/top.fish:7 -msgid "Maximium iterations" -msgstr "" - -#: share/completions/top.fish:8 -msgid "Monitor effective UID" -msgstr "" - -#: share/completions/top.fish:9 -msgid "Monitor user" -msgstr "" - -#: share/completions/top.fish:10 -msgid "Monitor PID" -msgstr "" - -#: share/completions/top.fish:11 -msgid "Secure mode" -msgstr "" - -#: share/completions/top.fish:12 -msgid "Cumulative mode" -msgstr "" - -#: share/completions/touch.fish:1 -msgid "Change access time" +#: share/completions/totem.fish:19 +msgid "Tell any running totem instance: Play from playlist" msgstr "" #: share/completions/touch.fish:2 msgid "Set date back" msgstr "" -#: share/completions/touch.fish:3 -msgid "Do not create file" -msgstr "" - #: share/completions/touch.fish:4 -#: share/completions/touch.fish:8 msgid "Set date" msgstr "" @@ -9377,982 +6420,595 @@ msgstr "" msgid "Set date forward" msgstr "" -#: share/completions/touch.fish:6 -msgid "Change modification time" +#: share/completions/touch.fish:9 +msgid "Set time" msgstr "" -#: share/completions/touch.fish:7 -msgid "Use this files times" +#: share/completions/unrar.fish:5 +#, fuzzy +msgid "Extract files to current directory" +msgstr "Définir le répertoire source" + +#: share/completions/unrar.fish:6 +msgid "List archive" msgstr "" -#: share/completions/trap.fish:2 -msgid "Display names of all signals" +#: share/completions/unrar.fish:7 +msgid "List archive (technical)" msgstr "" -#: share/completions/trap.fish:3 -msgid "Display all currently defined trap handlers" +#: share/completions/unrar.fish:8 +msgid "List archive (bare)" msgstr "" -#: share/completions/type.fish:3 -msgid "Print all possible definitions of the specified name" +#: share/completions/unrar.fish:9 +#, fuzzy +msgid "Print file to stdout" +msgstr "Envoyer les fichiers vers le tube stdout" + +#: share/completions/unrar.fish:10 +msgid "Test archive files" msgstr "" -#: share/completions/type.fish:4 -msgid "Supress function and builtin lookup" +#: share/completions/unrar.fish:11 +msgid "Verbosely list archive" msgstr "" -#: share/completions/type.fish:5 -msgid "Print command type" +#: share/completions/unrar.fish:12 +msgid "Verbosely list archive (technical)" msgstr "" -#: share/completions/type.fish:6 -msgid "Print path to command, or nothing if name is not a command" +#: share/completions/unrar.fish:13 +msgid "Verbosely list archive (bare)" msgstr "" -#: share/completions/type.fish:7 -msgid "Print path to command" +#: share/completions/unrar.fish:14 +#, fuzzy +msgid "Extract files with full path" +msgstr "Commencer les lignes avec une tabulation" + +#: share/completions/update-eix-remote.fish:16 +msgid "" +"Fetch the eix-caches of some layman overlays into a temporary file resp. " +"into FILE and add them to the eix database" msgstr "" -#: share/completions/ulimit.fish:2 -msgid "Set or get all current limits" +#: share/completions/update-eix-remote.fish:16 +msgid "Only fetch the overlays into FILE" msgstr "" -#: share/completions/ulimit.fish:3 -msgid "Maximum size of core files created" +#: share/completions/update-eix-remote.fish:16 +msgid "Only add the overlays from FILE to the eix database" msgstr "" -#: share/completions/ulimit.fish:4 -msgid "Maximum size of a process's data segment" +#: share/completions/update-eix-remote.fish:16 +msgid "Remove all temporarily added virtual overlays from the eix database" msgstr "" -#: share/completions/ulimit.fish:5 -msgid "Maximum size of files created by the shell" -msgstr "" +#: share/completions/vagrant.fish:3 +#, fuzzy +msgid "Test if vagrant has yet to be given the main command" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/ulimit.fish:6 -msgid "Maximum size that may be locked into memory" -msgstr "" - -#: share/completions/ulimit.fish:7 -msgid "Maximum resident set size" -msgstr "" - -#: share/completions/ulimit.fish:8 -msgid "Maximum number of open file descriptors" -msgstr "" - -#: share/completions/ulimit.fish:9 -msgid "Maximum stack size" -msgstr "" - -#: share/completions/ulimit.fish:10 -msgid "Maximum amount of cpu time in seconds" -msgstr "" - -#: share/completions/ulimit.fish:11 -msgid "Maximum number of processes available to a single user" -msgstr "" - -#: share/completions/ulimit.fish:12 -msgid "Maximum amount of virtual memory available to the shell" -msgstr "" - -#: share/completions/umount.fish:13 -msgid "Unmount without writing in /etc/mtab" -msgstr "" - -#: share/completions/umount.fish:14 -msgid "In case unmounting fails, try to remount read-only" -msgstr "" - -#: share/completions/umount.fish:15 -msgid "In case the unmounted device was a loop device, also free this loop device" -msgstr "" - -#: share/completions/umount.fish:16 -msgid "Don't call the /sbin/umount. helper even if it exists" -msgstr "" - -#: share/completions/umount.fish:17 -msgid "Unmount all of the file systems described in /etc/mtab" -msgstr "" - -#: share/completions/umount.fish:18 -msgid "Actions should only be taken on file systems of the specified type" -msgstr "" - -#: share/completions/umount.fish:19 -msgid "Actions should only be taken on file systems with the specified options in /etc/fstab" -msgstr "" - -#: share/completions/umount.fish:20 -msgid "Force unmount (in case of an unreachable NFS system)" -msgstr "" - -#: share/completions/umount.fish:21 -msgid "Detach the filesystem from the filesystem hierarchy now, and cleanup all references to the filesystem as soon as it is not busy" -msgstr "" - -#: share/completions/uname.fish:1 -msgid "Print all information" -msgstr "" - -#: share/completions/uname.fish:2 -msgid "Print kernel name" -msgstr "" - -#: share/completions/uname.fish:3 -msgid "Print network node hostname" -msgstr "" - -#: share/completions/uname.fish:4 -msgid "Print kernel release" -msgstr "" - -#: share/completions/uname.fish:5 -msgid "Print kernel version" -msgstr "" - -#: share/completions/uname.fish:6 -msgid "Print machine name" -msgstr "" - -#: share/completions/uname.fish:7 -msgid "Print processor" -msgstr "" - -#: share/completions/uname.fish:8 -msgid "Print hardware platform" -msgstr "" - -#: share/completions/uname.fish:9 -msgid "Print operating system" -msgstr "" - -#: share/completions/uniq.fish:1 -msgid "Print number of occurences" -msgstr "" - -#: share/completions/uniq.fish:2 -msgid "Only print duplicates" -msgstr "" - -#: share/completions/uniq.fish:3 -msgid "Remove non-duplicate lines" -msgstr "" - -#: share/completions/uniq.fish:8 -msgid "Avoid comparing first N fields" -msgstr "" - -#: share/completions/uniq.fish:9 -msgid "Case insensitive" -msgstr "" - -#: share/completions/uniq.fish:10 -msgid "Avoid comparing first N characters" -msgstr "" - -#: share/completions/uniq.fish:11 -msgid "Only print unique lines" -msgstr "" - -#: share/completions/uniq.fish:12 -msgid "Compare only specified number of characters" +#: share/completions/vagrant.fish:34 +msgid "Lists all available Vagrant boxes" msgstr "" #: share/completions/valgrind.fish:12 msgid "Skin" msgstr "" -#: share/completions/valgrind.fish:25 -msgid "Display help and debug options" -msgstr "" - -#: share/completions/valgrind.fish:29 -msgid "Valgrind-ise children" -msgstr "" - -#: share/completions/valgrind.fish:30 -msgid "Track file descriptors" -msgstr "" - -#: share/completions/valgrind.fish:31 -msgid "Log to file descriptor" -msgstr "" - -#: share/completions/valgrind.fish:32 -msgid "Log to file" -msgstr "" - -#: share/completions/valgrind.fish:33 -msgid "Log to socket" -msgstr "" - -#: share/completions/valgrind.fish:35 -msgid "Callers in stack trace" -msgstr "" - -#: share/completions/valgrind.fish:36 -msgid "Stop showing errors if too many" -msgstr "" - -#: share/completions/valgrind.fish:37 -msgid "Continue trace below main()" -msgstr "" - -#: share/completions/valgrind.fish:38 -msgid "Supress errors from file" -msgstr "" - -#: share/completions/valgrind.fish:39 -msgid "Print suppressions for detected errors" -msgstr "" - -#: share/completions/valgrind.fish:40 -msgid "Start debugger on error" -msgstr "" - -#: share/completions/valgrind.fish:41 -msgid "Debugger command" -msgstr "" - -#: share/completions/valgrind.fish:42 -msgid "File descriptor for input" -msgstr "" - -#: share/completions/valgrind.fish:46 -#: share/completions/valgrind.fish:55 -msgid "Check for memory leaks" -msgstr "" - -#: share/completions/valgrind.fish:47 -#: share/completions/valgrind.fish:56 -msgid "Show reachable leaked memory" -msgstr "" - -#: share/completions/valgrind.fish:48 -msgid "Determines how willing Memcheck is to consider different backtraces to be the same" -msgstr "" - -#: share/completions/valgrind.fish:49 -#: share/completions/valgrind.fish:58 -msgid "Set size of freed memory pool" -msgstr "" - -#: share/completions/valgrind.fish:57 -msgid "Determines how willing Addrcheck is to consider different backtraces to be the same" -msgstr "" - -#: share/completions/valgrind.fish:63 -msgid "Type of L1 instruction cache" -msgstr "" - -#: share/completions/valgrind.fish:64 -msgid "Type of L1 data cache" -msgstr "" - -#: share/completions/valgrind.fish:65 -msgid "Type of L2 cache" -msgstr "" - -#: share/completions/valgrind.fish:69 -msgid "Specify a function that allocates memory" -msgstr "" - -#: share/completions/valgrind.fish:71 +#: share/completions/valgrind.fish:78 msgid "The number of bytes of heap overhead per allocation" msgstr "" -#: share/completions/valgrind.fish:72 +#: share/completions/valgrind.fish:79 msgid "Profile stack usage" msgstr "" -#: share/completions/valgrind.fish:73 +#: share/completions/valgrind.fish:80 msgid "Depth of call chain" msgstr "" -#: share/completions/valgrind.fish:74 +#: share/completions/valgrind.fish:81 msgid "Profiling output format" msgstr "" -#: share/completions/w.fish:1 -msgid "Dont print header" -msgstr "" - -#: share/completions/w.fish:2 -msgid "Ignore username for time calculations" -msgstr "" - -#: share/completions/w.fish:3 -msgid "Short format" -msgstr "" - -#: share/completions/w.fish:4 -msgid "Toggle printing of remote hostname" -msgstr "" - -#: share/completions/wc.fish:1 -msgid "Print byte counts" -msgstr "" - -#: share/completions/wc.fish:2 -msgid "Print character counts" -msgstr "" - -#: share/completions/wc.fish:3 -msgid "Print newline counts" -msgstr "" - -#: share/completions/wc.fish:4 -msgid "Print length of longest line" -msgstr "" - -#: share/completions/wc.fish:5 -msgid "Print word counts" -msgstr "" - -#: share/completions/wget.fish:7 -msgid "Go to background immediately after startup" -msgstr "" - -#: share/completions/wget.fish:8 -msgid "Execute command as if part of .wgetrc" -msgstr "" - -#: share/completions/wget.fish:9 -msgid "Log all messages to logfile" -msgstr "" - -#: share/completions/wget.fish:10 -msgid "Append all messages to logfile" -msgstr "" +#: share/completions/vim-addons.fish:8 +#, fuzzy +msgid "Test if vim-addons has yet to be given the subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/wget.fish:11 -msgid "Turn on debug output" -msgstr "" +#: share/completions/w.fish:6 +msgid "Username" +msgstr "Nom d'utilisateur" -#: share/completions/wget.fish:14 -#: share/completions/wget.fish:15 -msgid "Turn off verbose without being completely quiet" -msgstr "" +#: share/completions/wajig.fish:1 +#, fuzzy +msgid "Test if wajig has yet to be given the subcommand" +msgstr "Tester si apt doit se faire donner la sous-commande" -#: share/completions/wget.fish:16 -msgid "Read URLs from file" +#: share/completions/wajig.fish:10 +#, fuzzy +msgid "Test if wajig command should have packages as potential completion" msgstr "" +"Tester si la commande apt devrait avoir les paquets comme complétion " +"potentielle" -#: share/completions/wget.fish:17 -msgid "Force input to be treated as HTML" +#: share/completions/wajig.fish:97 +msgid "Download package and any packages it depends on" msgstr "" -#: share/completions/wget.fish:18 -msgid "Prepend string to relative links" +#: share/completions/wajig.fish:98 +msgid "Install package and associated recommended packages" msgstr "" -#: share/completions/wget.fish:19 -msgid "Bind address on local machine" +#: share/completions/wajig.fish:99 +msgid "Reconfigure the named installed packages or run gkdebconf" msgstr "" -#: share/completions/wget.fish:20 -msgid "Set number of retries to number" -msgstr "" +#: share/completions/wajig.fish:100 +#, fuzzy +msgid "Reinstall each of the named packages" +msgstr "Installer un ou des paquets" -#: share/completions/wget.fish:21 -msgid "Concatenate output to file" +#: share/completions/wajig.fish:101 +msgid "Reload daemon configs, e.g., gdm, apache (see list-daemons)" msgstr "" -#: share/completions/wget.fish:22 -#: share/completions/wget.fish:23 -msgid "Never overwrite files with same name" -msgstr "" +#: share/completions/wajig.fish:102 +#, fuzzy +msgid "Remove one or more packages (see also purge)" +msgstr "Supprimer un ou des paquets" -#: share/completions/wget.fish:24 -msgid "Continue getting a partially-downloaded file" +#: share/completions/wajig.fish:103 +msgid "Remove package and its dependees not required by others" msgstr "" -#: share/completions/wget.fish:25 -msgid "Select progress meter type" +#: share/completions/wajig.fish:104 +msgid "Remove orphaned libraries (not required by installed packages)" msgstr "" -#: share/completions/wget.fish:32 -msgid "Turn on time-stamping" -msgstr "" +#: share/completions/wajig.fish:105 +#, fuzzy +msgid "Generate a .deb file for an installed package" +msgstr "Reconstruire et installer un paquet installé" -#: share/completions/wget.fish:33 -msgid "Print the headers/responses sent by servers" +#: share/completions/wajig.fish:106 +msgid "Initialise or reset the JIG archive files" msgstr "" -#: share/completions/wget.fish:34 -msgid "Do not download the pages, just check that they are there" +#: share/completions/wajig.fish:107 +msgid "Stop then start a daemon, e.g., gdm, apache (see list-daemons)" msgstr "" -#: share/completions/wget.fish:35 -msgid "Set the network timeout" -msgstr "" +#: share/completions/wajig.fish:108 +#, fuzzy +msgid "Install a RedHat .rpm package" +msgstr "Installer un ou des paquets" -#: share/completions/wget.fish:36 -msgid "Set the DNS lookup timeout" +#: share/completions/wajig.fish:109 +msgid "Convert a RedHat .rpm file to a Debian .deb file" msgstr "" -#: share/completions/wget.fish:37 -msgid "Set the connect timeout" -msgstr "" +#: share/completions/wajig.fish:110 +#, fuzzy +msgid "Search for packages containing listed words" +msgstr "Cherche les paquet contenant le motif" -#: share/completions/wget.fish:38 -msgid "Set the read (and write) timeout" +#: share/completions/wajig.fish:111 +msgid "Find local Debian archives suitable for sources.list" msgstr "" -#: share/completions/wget.fish:39 -msgid "Limit the download speed" +#: share/completions/wajig.fish:112 +msgid "Configure the sources.list file which locates Debian archives" msgstr "" -#: share/completions/wget.fish:40 -msgid "Wait the specified number of seconds between the retrievals" +#: share/completions/wajig.fish:113 +msgid "Provide a detailed description of package [same as detail]" msgstr "" -#: share/completions/wget.fish:41 -msgid "Wait time between retries" +#: share/completions/wajig.fish:114 +msgid "Trace the steps that a dist-upgrade would perform" msgstr "" -#: share/completions/wget.fish:42 -msgid "Wait random amount of time between retrievals" +#: share/completions/wajig.fish:115 +msgid "Trace the steps that an install would perform" msgstr "" -#: share/completions/wget.fish:43 -msgid "Toggle proxy support" +#: share/completions/wajig.fish:116 +msgid "Trace the steps that a remove would perform" msgstr "" -#: share/completions/wget.fish:44 -msgid "Specify download quota for automatic retrievals" +#: share/completions/wajig.fish:117 +msgid "Trace the steps that an upgrade would perform" msgstr "" -#: share/completions/wget.fish:45 -msgid "Turn off caching of DNS lookups" +#: share/completions/wajig.fish:118 share/completions/wajig.fish:119 +msgid "Print out the size (in K) of all, or listed, installed packages" msgstr "" -#: share/completions/wget.fish:46 -msgid "Change which characters found in remote URLs may show up in local file names" +#: share/completions/wajig.fish:120 +msgid "Generates list of package=version for all installed packages" msgstr "" -#: share/completions/wget.fish:53 -#: share/completions/wget.fish:54 -msgid "Do not create a hierarchy of directories" -msgstr "" +#: share/completions/wajig.fish:121 +#, fuzzy +msgid "Retrieve and unpack sources for the named packages" +msgstr "Lister les dépendances inverses du paquet" -#: share/completions/wget.fish:55 -msgid "Force creation of a hierarchy of directories" +#: share/completions/wajig.fish:122 +msgid "Start a daemon, e.g., gdm, apache (see list-daemons)" msgstr "" -#: share/completions/wget.fish:56 -#: share/completions/wget.fish:57 -msgid "Disable generation of host-prefixed directories" -msgstr "" +#: share/completions/wajig.fish:123 +#, fuzzy +msgid "Show the version and available version of packages" +msgstr "Afficher les versions complètes pour les paquets" -#: share/completions/wget.fish:58 -msgid "Use the protocol name as a directory component" +#: share/completions/wajig.fish:124 share/completions/wajig.fish:125 +msgid "Show the version and available version of matching packages" msgstr "" -#: share/completions/wget.fish:59 -msgid "Ignore specified number of directory components" +#: share/completions/wajig.fish:126 +msgid "Stop a daemon, e.g., gdm, apache (see list-daemons)" msgstr "" -#: share/completions/wget.fish:60 -msgid "Set directory prefix" +#: share/completions/wajig.fish:127 +msgid "Install package and associated suggested packages" msgstr "" -#: share/completions/wget.fish:61 -msgid "Force html files to have html extension" +#: share/completions/wajig.fish:128 +msgid "Run the Gnome task selector to install groups of packages" msgstr "" -#: share/completions/wget.fish:62 -msgid "Specify the http username" +#: share/completions/wajig.fish:129 +msgid "List packages with newer versions available for upgrading" msgstr "" -#: share/completions/wget.fish:63 -msgid "Specify the http password" +#: share/completions/wajig.fish:130 +msgid "Remove listed packages from hold so they are again upgraded" msgstr "" -#: share/completions/wget.fish:64 -msgid "Disable server-side cache" +#: share/completions/wajig.fish:131 +msgid "Search for an unofficial Debian package at apt-get.org" msgstr "" -#: share/completions/wget.fish:65 -msgid "Disable the use of cookies" -msgstr "" +#: share/completions/wajig.fish:132 +#, fuzzy +msgid "Update the list of down-loadable packages" +msgstr "Actualiser la liste des paquets source" -#: share/completions/wget.fish:66 -msgid "Load cookies from file" +#: share/completions/wajig.fish:133 +msgid "Update default alternative for things like x-window-manager" msgstr "" -#: share/completions/wget.fish:67 -msgid "Save cookies to file" +#: share/completions/wajig.fish:134 +msgid "Updates the local list of PCI ids from the internet master list" msgstr "" -#: share/completions/wget.fish:68 -msgid "Save session cookies" +#: share/completions/wajig.fish:135 +msgid "Updates the local list of USB ids from the internet master list" msgstr "" -#: share/completions/wget.fish:69 -msgid "Ignore 'Content-Length' header" +#: share/completions/wajig.fish:136 +msgid "Upgrade all of the installed packages or just those listed" msgstr "" -#: share/completions/wget.fish:70 -msgid "Define an additional-header to be passed to the HTTP servers" +#: share/completions/wajig.fish:137 +msgid "List version and distribution of (all) packages." msgstr "" -#: share/completions/wget.fish:71 -msgid "Specify the proxy username" +#: share/completions/wajig.fish:138 +msgid "A synonym for describe" msgstr "" -#: share/completions/wget.fish:72 -msgid "Specify the proxy password" +#: share/completions/wajig.fish:139 +msgid "Find the package that supplies the given command or file" msgstr "" -#: share/completions/wget.fish:73 -msgid "Set referer URL" +#: share/completions/wpa_cli.fish:3 +msgid "get current WPA/EAPOL/EAP status" msgstr "" -#: share/completions/wget.fish:74 -msgid "Save the headers sent by the HTTP server" +#: share/completions/wpa_cli.fish:4 +msgid "get MIB variables (dot1x, dot11)" msgstr "" -#: share/completions/wget.fish:75 -msgid "Identify as agent-string" +#: share/completions/wpa_cli.fish:5 +msgid "show this usage help" msgstr "" -#: share/completions/wget.fish:76 -#: share/completions/wget.fish:77 -msgid "Use POST as the method for all HTTP requests and send the specified data in the request body" -msgstr "" +#: share/completions/wpa_cli.fish:6 +#, fuzzy +msgid "show interfaces/select interface" +msgstr "Sélectionner l'interface" -#: share/completions/wget.fish:78 -msgid "Turn off keep-alive for http downloads" +#: share/completions/wpa_cli.fish:7 +msgid "change debug level" msgstr "" -#: share/completions/wget.fish:82 -msgid "Don't remove the temporary .listing files generated" +#: share/completions/wpa_cli.fish:8 +msgid "show full wpa_cli license" msgstr "" -#: share/completions/wget.fish:83 -msgid "Turn off FTP globbing" +#: share/completions/wpa_cli.fish:9 +msgid "IEEE 802.1X EAPOL state machine logoff" msgstr "" -#: share/completions/wget.fish:84 -msgid "Use the passive FTP retrieval scheme" +#: share/completions/wpa_cli.fish:10 +msgid "IEEE 802.1X EAPOL state machine logon" msgstr "" -#: share/completions/wget.fish:85 -msgid "Traverse symlinks and retrieve pointed-to files" +#: share/completions/wpa_cli.fish:11 +msgid "set/list variables" msgstr "" -#: share/completions/wget.fish:89 -msgid "Turn on recursive retrieving" +#: share/completions/wpa_cli.fish:12 +msgid "show PMKSA cache" msgstr "" -#: share/completions/wget.fish:90 -msgid "Specify recursion maximum depth" -msgstr "" +#: share/completions/wpa_cli.fish:13 +#, fuzzy +msgid "force reassociation" +msgstr "Forcer une association nom/rev" -#: share/completions/wget.fish:91 -msgid "Delete every single file downloaded" +#: share/completions/wpa_cli.fish:14 +msgid "force wpa_supplicant to re-read its config file" msgstr "" -#: share/completions/wget.fish:92 -msgid "Convert the links in the document to make them suitable for local viewing" +#: share/completions/wpa_cli.fish:15 +msgid "force preauthentication" msgstr "" -#: share/completions/wget.fish:93 -msgid "Back up the original version" +#: share/completions/wpa_cli.fish:16 +msgid "configure identity for an SSID" msgstr "" -#: share/completions/wget.fish:94 -msgid "Turn on options suitable for mirroring" +#: share/completions/wpa_cli.fish:17 +msgid "configure password for an SSID" msgstr "" -#: share/completions/wget.fish:95 -msgid "Download all the files that are necessary to properly display a given HTML page" +#: share/completions/wpa_cli.fish:18 +msgid "change password for an SSID" msgstr "" -#: share/completions/wget.fish:96 -msgid "Turn on strict parsing of HTML comments" +#: share/completions/wpa_cli.fish:19 +msgid "configure pin for an SSID" msgstr "" -#: share/completions/wget.fish:100 -msgid "Comma-separated lists of file name suffixes or patterns to accept" +#: share/completions/wpa_cli.fish:20 +msgid "configure one-time-password for an SSID" msgstr "" -#: share/completions/wget.fish:101 -msgid "Comma-separated lists of file name suffixes or patterns to reject" +#: share/completions/wpa_cli.fish:21 +msgid "configure private key passphrase for an SSID" msgstr "" -#: share/completions/wget.fish:102 -msgid "Set domains to be followed" +#: share/completions/wpa_cli.fish:22 +msgid "set preferred BSSID for an SSID" msgstr "" -#: share/completions/wget.fish:103 -msgid "Specify the domains that are not to be followed" +#: share/completions/wpa_cli.fish:23 +msgid "list configured networks" msgstr "" -#: share/completions/wget.fish:104 -msgid "Follow FTP links from HTML documents" +#: share/completions/wpa_cli.fish:24 +msgid "select a network (disable others)" msgstr "" -#: share/completions/wget.fish:105 -msgid "HTML tags to follow" +#: share/completions/wpa_cli.fish:25 +msgid "enable a network" msgstr "" -#: share/completions/wget.fish:106 -msgid "HTML tags to ignore" +#: share/completions/wpa_cli.fish:26 +msgid "disable a network" msgstr "" -#: share/completions/wget.fish:107 -msgid "Enable spanning across hosts" -msgstr "" +#: share/completions/wpa_cli.fish:27 +#, fuzzy +msgid "add a network" +msgstr "Ajouter une nouvelle clé" -#: share/completions/wget.fish:108 -msgid "Follow relative links only" -msgstr "" +#: share/completions/wpa_cli.fish:28 +#, fuzzy +msgid "remove a network" +msgstr "Supprimer une clé" -#: share/completions/wget.fish:109 -msgid "Specify a comma-separated list of directories you wish to follow" +#: share/completions/wpa_cli.fish:29 +msgid "set/list network variables" msgstr "" -#: share/completions/wget.fish:110 -msgid "Specify a comma-separated list of directories you wish to exclude" -msgstr "" +#: share/completions/wpa_cli.fish:30 +#, fuzzy +msgid "get network variables" +msgstr "Gérer les variables d'environnement" -#: share/completions/wget.fish:111 -#: share/completions/wget.fish:112 -msgid "Do not ever ascend to the parent directory" -msgstr "" - -#: share/completions/who.fish:1 -msgid "Same as -b -d --login -p -r -t -T -u" -msgstr "" - -#: share/completions/who.fish:2 -msgid "Print time of last boot" -msgstr "" - -#: share/completions/who.fish:3 -msgid "Print dead processes" -msgstr "" - -#: share/completions/who.fish:4 -msgid "Print line of headings" -msgstr "" - -#: share/completions/who.fish:5 -msgid "Print idle time" -msgstr "" - -#: share/completions/who.fish:6 -msgid "Print login process" -msgstr "" - -#: share/completions/who.fish:7 -msgid "Canonicalize hostnames via DNS" -msgstr "" - -#: share/completions/who.fish:8 -msgid "Print hostname and user for stdin" -msgstr "" - -#: share/completions/who.fish:9 -msgid "Print active processes spawned by init" -msgstr "" - -#: share/completions/who.fish:10 -msgid "Print all login names and number of users logged on" -msgstr "" - -#: share/completions/who.fish:11 -msgid "Print current runlevel" -msgstr "" - -#: share/completions/who.fish:12 -msgid "Print name, line, and time" -msgstr "" - -#: share/completions/who.fish:13 -msgid "Print last system clock change" -msgstr "" - -#: share/completions/who.fish:14 -#: share/completions/who.fish:15 -#: share/completions/who.fish:16 -msgid "Print users message status as +, - or ?" -msgstr "" - -#: share/completions/who.fish:17 -msgid "List users logged in" -msgstr "" - -#: share/completions/xargs.fish:5 -msgid "Input filenames are terminated by a null character instead of by whitespace, and the quotes and backslash are not special" -msgstr "" - -#: share/completions/xargs.fish:6 -#: share/completions/xargs.fish:7 -msgid "Set the end of file string to eof-str" -msgstr "" - -#: share/completions/xargs.fish:9 -#: share/completions/xargs.fish:10 -msgid "Replace replace-str in the initial arguments with names from standard input" -msgstr "" - -#: share/completions/xargs.fish:11 -#: share/completions/xargs.fish:12 -msgid "Use at most max-lines nonblank input lines per command line" -msgstr "" +#: share/completions/wpa_cli.fish:31 +#, fuzzy +msgid "save the current configuration" +msgstr "Recharger la configuration du service" -#: share/completions/xargs.fish:13 -msgid "Use at most max-args arguments per command line" +#: share/completions/wpa_cli.fish:32 +msgid "disconnect and wait for reassociate command before connecting" msgstr "" -#: share/completions/xargs.fish:14 -msgid "Prompt the user about whether to run each command line and read a line from the terminal" +#: share/completions/wpa_cli.fish:33 +msgid "request new BSS scan" msgstr "" -#: share/completions/xargs.fish:15 -msgid "If the standard input does not contain any nonblanks, do not run the command" +#: share/completions/wpa_cli.fish:34 +msgid "get latest scan results" msgstr "" -#: share/completions/xargs.fish:16 -msgid "Use at most max-chars characters per command line" +#: share/completions/wpa_cli.fish:35 +msgid "get capabilies" msgstr "" -#: share/completions/xargs.fish:17 -msgid "Print the command line on the standard error output before executing it" +#: share/completions/wpa_cli.fish:36 +msgid "request STAKey negotiation with " msgstr "" -#: share/completions/xargs.fish:19 -msgid "Exit if the size is exceeded" +#: share/completions/wpa_cli.fish:37 +msgid "set ap_scan parameter" msgstr "" -#: share/completions/xargs.fish:20 -msgid "Run up to max-procs processes at a time" +#: share/completions/wpa_cli.fish:38 +msgid "request STK negotiation with " msgstr "" -#: share/completions/xprop.fish:3 -msgid "Display grammar and exit" +#: share/completions/wpa_cli.fish:39 +msgid "terminate wpa_supplicant" msgstr "" #: share/completions/xprop.fish:4 msgid "Select window by id" msgstr "" -#: share/completions/xprop.fish:5 -msgid "Select window by name" -msgstr "" - #: share/completions/xprop.fish:6 msgid "Display font properties" msgstr "" -#: share/completions/xprop.fish:7 -msgid "Select root window" -msgstr "" - -#: share/completions/xprop.fish:8 -msgid "Specify X server" -msgstr "" - #: share/completions/xprop.fish:9 msgid "Maximum display length" msgstr "" -#: share/completions/xprop.fish:10 -msgid "Do not show property type" -msgstr "" - #: share/completions/xprop.fish:11 msgid "Set format file" msgstr "" -#: share/completions/xprop.fish:12 -msgid "Select a window by clicking on its frame" -msgstr "" - -#: share/completions/xprop.fish:13 -msgid "Remove property" -msgstr "" - -#: share/completions/xprop.fish:19 -msgid "Set property" -msgstr "" - -#: share/completions/xprop.fish:25 -msgid "Examine property updates forever" -msgstr "" - -#: share/completions/xprop.fish:26 -msgid "Set format" -msgstr "" - -#: share/completions/xsel.fish:1 -msgid "Append input to selection" -msgstr "" - -#: share/completions/xsel.fish:2 -msgid "Append to selection as input grows" -msgstr "" - -#: share/completions/xsel.fish:3 -msgid "Read into selection" -msgstr "" - -#: share/completions/xsel.fish:4 -msgid "Write selection" -msgstr "" - -#: share/completions/xsel.fish:5 -msgid "Clear selection" -msgstr "" - -#: share/completions/xsel.fish:6 -msgid "Delete selection" -msgstr "" - -#: share/completions/xsel.fish:7 -msgid "Use primary selection" -msgstr "" - -#: share/completions/xsel.fish:8 -msgid "Use secondary selection" -msgstr "" - -#: share/completions/xsel.fish:9 -msgid "Use clipboard selection" -msgstr "" - -#: share/completions/xsel.fish:10 -msgid "Make current selections persistent after program exit" -msgstr "" - -#: share/completions/xsel.fish:11 -msgid "Exchange primary and secondary selections" -msgstr "" - #: share/completions/xsel.fish:12 msgid "X server display" msgstr "" -#: share/completions/xsel.fish:13 -msgid "Timeout for retrieving selection" -msgstr "" - #: share/completions/xsel.fish:14 msgid "Error log" msgstr "" -#: share/completions/xsel.fish:15 -msgid "Do not detach from the controlling terminal" +#: share/completions/xterm.fish:101 +msgid "Run program in xterm" msgstr "" -#: share/completions/xsel.fish:17 -msgid "Print informative messages" +#: share/completions/xterm.fish:103 +msgid "Blinking cursor will be off for that many milliseconds" msgstr "" -#: share/completions/yum.fish:49 -msgid "Set debug level" +#: share/completions/xterm.fish:104 +msgid "Blinking cursor will be on for that many milliseconds" msgstr "" -#: share/completions/yum.fish:50 -msgid "Set error level" +#: share/completions/xterm.fish:105 +msgid "Override xterm resource class" msgstr "" -#: share/completions/yum.fish:51 -msgid "Be tolerant of errors in commandline" +#: share/completions/xterm.fish:106 +msgid "Color for the text cursor" msgstr "" -#: share/completions/yum.fish:52 -msgid "Set maximum delay between commands" +#: share/completions/xterm.fish:107 +msgid "xterm encoding" +msgstr "" + +#: share/completions/xterm.fish:108 +msgid "Bold font" +msgstr "" + +#: share/completions/xterm.fish:109 +msgid "FreeType font pattern" +msgstr "" + +#: share/completions/xterm.fish:110 +msgid "FreeType double-width font pattern" +msgstr "" + +#: share/completions/xterm.fish:111 +#, fuzzy +msgid "Font for active icons" +msgstr "Forcer le mode interactif" + +#: share/completions/xterm.fish:112 +msgid "Font size for FreeType font" +msgstr "" + +#: share/completions/xterm.fish:113 +msgid "Font for displaying wide text" +msgstr "" + +#: share/completions/xterm.fish:114 +msgid "Font for displaying bold wide text" +msgstr "" + +#: share/completions/xterm.fish:115 +msgid "Font for the preedit string in \"OverTheSpot\"" +msgstr "" + +#: share/completions/xterm.fish:116 +msgid "Color for highlighted text" +msgstr "" + +#: share/completions/xterm.fish:117 +msgid "Embed xterm into window" +msgstr "" + +#: share/completions/xterm.fish:118 +#, fuzzy +msgid "Set keyboard type" +msgstr "Spécifier le type d'enregistrement" + +#: share/completions/xterm.fish:119 +msgid "File name for the encoding converter" +msgstr "" + +#: share/completions/xterm.fish:120 +msgid "Log filename" +msgstr "" + +#: share/completions/xterm.fish:121 +msgid "Maximum time in milliseconds between multi-click selections" +msgstr "" + +#: share/completions/xterm.fish:122 +msgid "Color for the pointer cursor" +msgstr "" + +#: share/completions/xterm.fish:123 +msgid "Distance from the right end for ringing the margin bell" +msgstr "" + +#: share/completions/xterm.fish:124 +#, fuzzy +msgid "Number of scrolled off lines" +msgstr "Numéroter toutes les lignes" + +#: share/completions/xterm.fish:125 +msgid "Terminal identification" +msgstr "" + +#: share/completions/xterm.fish:126 +#, sh-format +msgid "Terminal name for $TERM" +msgstr "" + +#: share/completions/xterm.fish:127 +msgid "zIconBeep percentage" +msgstr "" + +#: share/completions/xterm.fish:129 +msgid "Size of the inner border" msgstr "" #: share/completions/yum.fish:53 -msgid "Run commands from cache" -msgstr "" +#, fuzzy +msgid "Delete cached package files" +msgstr "Supprimer les fichiers obsolètes" + +#: share/completions/yum.fish:54 +#, fuzzy +msgid "Delete cached header files" +msgstr "Supprimer les fichiers obsolètes" #: share/completions/yum.fish:55 -msgid "Specify installroot" -msgstr "" - -#: share/completions/yum.fish:56 -msgid "Enable repository" -msgstr "" - -#: share/completions/yum.fish:57 -msgid "Disable repository" -msgstr "" - -#: share/completions/yum.fish:58 -msgid "Enables obsolets processing logic" -msgstr "" - -#: share/completions/yum.fish:59 -msgid "Output rss-data to file" -msgstr "" - -#: share/completions/yum.fish:60 -msgid "Exclude specified package from updates" -msgstr "" - -#: share/completions/zip.fish:2 -msgid "Freshen: only changed files" -msgstr "" - -#: share/completions/zip.fish:3 -msgid "Delete entries in zipfile" -msgstr "" - -#: share/completions/zip.fish:4 -msgid "Update: only changed or newer files" -msgstr "" - -#: share/completions/zip.fish:5 -msgid "Move into zipfile (delete files)" -msgstr "" - -#: share/completions/zip.fish:7 -msgid "Do not store directory names" -msgstr "" - -#: share/completions/zip.fish:8 -msgid "Do not compress at all" -msgstr "" - -#: share/completions/zip.fish:9 -msgid "Convert LF to CR LF" -msgstr "" - -#: share/completions/zip.fish:10 -msgid "Convert CR LF to LF" -msgstr "" - -#: share/completions/zip.fish:11 -msgid "Compress faster" -msgstr "" - -#: share/completions/zip.fish:12 -msgid "Compress better" -msgstr "" - -#: share/completions/zip.fish:15 -msgid "Add one-line comments" -msgstr "" - -#: share/completions/zip.fish:16 -msgid "Add zipfile comments" -msgstr "" - -#: share/completions/zip.fish:17 -msgid "Read names from stdin" -msgstr "" - -#: share/completions/zip.fish:18 -msgid "Make zipfile as old as the latest entry" +msgid "Delete all cache contents" msgstr "" #: share/completions/zip.fish:19 @@ -10363,77 +7019,228 @@ msgstr "" msgid "Include only the following names" msgstr "" -#: share/completions/zip.fish:21 -msgid "Fix zipfile" -msgstr "" - -#: share/completions/zip.fish:22 -msgid "Fix zipfile (try harder)" -msgstr "" - -#: share/completions/zip.fish:23 -msgid "Adjust offsets to suit self-extracting exe" -msgstr "" - -#: share/completions/zip.fish:24 -msgid "Strip prepended data" -msgstr "" - -#: share/completions/zip.fish:25 -msgid "Test zipfile integrity" -msgstr "" - -#: share/completions/zip.fish:26 -msgid "Exclude extra file attributes" -msgstr "" - -#: share/completions/zip.fish:27 -msgid "Store symbolic links as links" -msgstr "" - -#: share/completions/zip.fish:28 -msgid "PKZIP recursion" -msgstr "" - -#: share/completions/zip.fish:29 -msgid "Encrypt" -msgstr "" - #: share/completions/zip.fish:30 msgid "Don't compress files with these suffixes" msgstr "" -#: share/functions/N_.fish:3 -#: share/functions/_.fish:8 -#: share/functions/_.fish:12 -#: seq:11 -#: seq:16 -msgid "-d" +#: share/completions/zypper.fish:30 +#, fuzzy +msgid "Print help" +msgstr "Afficher les URIs" + +#: share/completions/zypper.fish:31 +msgid "Accept multiple commands at once" msgstr "" +#: share/completions/zypper.fish:32 +msgid "List all defined repositories" +msgstr "" + +#: share/completions/zypper.fish:33 +#, fuzzy +msgid "Add a new repository" +msgstr "Mettre à jour le référentiel" + +#: share/completions/zypper.fish:34 +#, fuzzy +msgid "Remove specified repository" +msgstr "Enlever un fichier du référentiel" + +#: share/completions/zypper.fish:35 +#, fuzzy +msgid "Rename specified repository" +msgstr "Mettre à jour le référentiel" + +#: share/completions/zypper.fish:36 +msgid "Modify specified repository" +msgstr "" + +#: share/completions/zypper.fish:37 +#, fuzzy +msgid "Refresh all repositories" +msgstr "Référentiel en lecture seule" + +#: share/completions/zypper.fish:38 +#, fuzzy +msgid "Clean local caches" +msgstr "Nettoyer les paquets locaux" + +#: share/completions/zypper.fish:39 +msgid "List all defined services" +msgstr "" + +#: share/completions/zypper.fish:40 +#, fuzzy +msgid "Add a new service" +msgstr "Ajouter une nouvelle clé" + +#: share/completions/zypper.fish:41 +#, fuzzy +msgid "Modify specified service" +msgstr "Utiliser la file spécifiée" + +#: share/completions/zypper.fish:42 +#, fuzzy +msgid "Remove specified service" +msgstr "Utiliser la file spécifiée" + +#: share/completions/zypper.fish:43 +msgid "Refresh all services" +msgstr "" + +#: share/completions/zypper.fish:44 +#, fuzzy +msgid "Install packages" +msgstr "Réinstaller les paquets" + +#: share/completions/zypper.fish:46 +#, fuzzy +msgid "Verify integrity of package dependencies" +msgstr "Installer/supprimer les dépendances de construction" + +#: share/completions/zypper.fish:47 +#, fuzzy +msgid "Install source packages and their build dependencies" +msgstr "Installer/supprimer les dépendances de construction" + +#: share/completions/zypper.fish:48 +msgid "Install newly added packages recommended by installed packages" +msgstr "" + +#: share/completions/zypper.fish:49 +#, fuzzy +msgid "Update installed packages with newer versions" +msgstr "Afficher tous les paquets source avec version" + +#: share/completions/zypper.fish:50 +#, fuzzy +msgid "List available updates" +msgstr "Afficher la liste disponible" + +#: share/completions/zypper.fish:51 +#, fuzzy +msgid "Install needed patches" +msgstr "Installer un ou des paquets" + +#: share/completions/zypper.fish:52 +msgid "List needed patches" +msgstr "" + +#: share/completions/zypper.fish:53 +#, fuzzy +msgid "Perform a distribution upgrade" +msgstr "Simuler" + +#: share/completions/zypper.fish:54 +msgid "Check for patches" +msgstr "" + +#: share/completions/zypper.fish:55 +#, fuzzy +msgid "Search for packages matching a pattern" +msgstr "Cherche les paquet contenant le motif" + +#: share/completions/zypper.fish:56 +#, fuzzy +msgid "Show full information for specified packages" +msgstr "Afficher les versions complètes pour les paquets" + +#: share/completions/zypper.fish:57 +#, fuzzy +msgid "Show full information for specified patches" +msgstr "Afficher les versions complètes pour les paquets" + +#: share/completions/zypper.fish:58 +#, fuzzy +msgid "Show full information for specified patterns" +msgstr "Afficher les versions complètes pour les paquets" + +#: share/completions/zypper.fish:59 +#, fuzzy +msgid "Show full information for specified products" +msgstr "Afficher les versions complètes pour les paquets" + +#: share/completions/zypper.fish:60 +#, fuzzy +msgid "List all available patches" +msgstr "Afficher la liste disponible" + +#: share/completions/zypper.fish:61 +#, fuzzy +msgid "List all available packages" +msgstr "Réinstaller les paquets" + +#: share/completions/zypper.fish:62 +msgid "List all available patterns" +msgstr "" + +#: share/completions/zypper.fish:63 +msgid "List all available products" +msgstr "" + +#: share/completions/zypper.fish:64 +msgid "List packages providing specified capability" +msgstr "" + +#: share/completions/zypper.fish:65 +#, fuzzy +msgid "Add a package lock" +msgstr "Reconstruire un paquet" + +#: share/completions/zypper.fish:66 +#, fuzzy +msgid "Remove a package lock" +msgstr "Supprime les paquet" + +#: share/completions/zypper.fish:67 +#, fuzzy +msgid "List current package locks" +msgstr "Lister les bogues des paquets" + +#: share/completions/zypper.fish:68 +#, fuzzy +msgid "Remove unused locks" +msgstr "Supprimer des paquets source" + +#: share/completions/zypper.fish:69 +msgid "Compare two version strings" +msgstr "" + +#: share/completions/zypper.fish:70 +msgid "Print the target operating system ID string" +msgstr "" + +#: share/completions/zypper.fish:71 +msgid "Print report about licenses and EULAs of installed packages" +msgstr "" + +#: share/completions/zypper.fish:72 +msgid "Download source rpms for all installed packages to a local directory" +msgstr "" + +#: share/functions/N_.fish:3 +msgid "No-op" +msgstr "" + +#: share/functions/_.fish:8 share/functions/_.fish:12 +#, fuzzy +msgid "Alias for the gettext command" +msgstr "Définir ou obtenir la ligne de commande" + #: share/functions/_.fish:9 -#: seq:17 msgid "fish" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:4 -msgid "Maximum uploads at once" +#: share/functions/__fish_complete_abook_formats.fish:1 +msgid "Complete abook formats" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:5 -msgid "Number of seconds between keepalives" +#: share/functions/__fish_complete_atool.fish:1 +msgid "Complete atool" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:6 -msgid "Bytes per request" -msgstr "" - -#: share/functions/__fish_complete_bittorrent.fish:7 -msgid "Requests per pipe" -msgstr "" - -#: share/functions/__fish_complete_bittorrent.fish:8 -msgid "Maximum length prefix encoding" +#: share/functions/__fish_complete_atool_archive_contents.fish:1 +msgid "List archive contents" msgstr "" #: share/functions/__fish_complete_bittorrent.fish:9 @@ -10448,88 +7255,254 @@ msgstr "" msgid "Maximum port to listen to" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:12 -msgid "File for server response" +#: share/functions/__fish_complete_command.fish:1 +msgid "Complete using all available commands" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:13 -msgid "URL to get file from" +#: share/functions/__fish_complete_convert_options.fish:1 +#, fuzzy +msgid "Complete Convert options" +msgstr "Définir les options de config" + +#: share/functions/__fish_complete_diff.fish:3 +msgid "Ignore case differences" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:14 -msgid "Local file target" +#: share/functions/__fish_complete_diff.fish:4 +msgid "Ignore case when comparing file names" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:15 -msgid "Time to close inactive socket" +#: share/functions/__fish_complete_diff.fish:5 +msgid "Consider case when comparing file names" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:16 -msgid "Time between checking timeouts" +#: share/functions/__fish_complete_diff.fish:6 +msgid "Ignore changes due to tab expansion" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:17 -msgid "Maximum outgoing slice length" +#: share/functions/__fish_complete_diff.fish:7 +msgid "Ignore changes in the amount of white space" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:18 -msgid "Maximum time to guess rate" +#: share/functions/__fish_complete_diff.fish:8 +msgid "Ignore all white space" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:19 -msgid "IP to bind to locally" +#: share/functions/__fish_complete_diff.fish:9 +msgid "Ignore changes whose lines are all blank" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:20 -msgid "Time between screen updates" +#: share/functions/__fish_complete_diff.fish:11 +msgid "Treat all files as text" +msgstr "Traiter tous les fichiers comme du texte" + +#: share/functions/__fish_complete_diff.fish:12 +msgid "Recursively compare subdirectories" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:21 -msgid "Time to wait between requesting more peers" +#: share/functions/__fish_complete_diff.fish:13 +msgid "Treat absent files as empty" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:22 -msgid "Minimum number of peers to not do requesting" +#: share/functions/__fish_complete_diff.fish:15 +msgid "Output 3 lines of copied context" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:23 -msgid "Number of seconds before assuming http timeout" +#: share/functions/__fish_complete_diff.fish:17 +msgid "Output 3 lines of unified context" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:24 -msgid "Number of peers at which to stop initiating new connections" +#: share/functions/__fish_complete_diff.fish:18 +msgid "Output only whether the files differ" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:25 -msgid "Maximum number of connections to allow" +#: share/functions/__fish_complete_diff.fish:19 +msgid "Output a normal diff" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:26 -msgid "Whether to check hashes on disk" +#: share/functions/__fish_complete_diff.fish:20 +msgid "Output in two columns" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:27 -msgid "Maximum kB/s to upload at" +#: share/functions/__fish_complete_diff.fish:22 +msgid "Try to find a smaller set of changes" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:28 -msgid "Seconds to wait for data to come in before assuming choking" +#: share/functions/__fish_complete_diff.fish:25 +msgid "Pass the output through 'pr'" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:29 -msgid "Whether to display diagnostic info" +#: share/functions/__fish_complete_grep.fish:2 +msgid "Print NUM lines of trailing context" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:30 -msgid "Number of downloads at which to switch from random to rarest first" +#: share/functions/__fish_complete_grep.fish:3 +msgid "Process binary file as text" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:31 -msgid "Number of uploads to fill out to with optimistic unchokes" +#: share/functions/__fish_complete_grep.fish:4 +msgid "Print NUM lines of leading context" msgstr "" -#: share/functions/__fish_complete_bittorrent.fish:32 -msgid "Whether to inform the user that hash failures occur" +#: share/functions/__fish_complete_grep.fish:5 +msgid "Print NUM lines of context" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:6 +msgid "Print byte offset of matches" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:7 +msgid "Assume data type for binary files" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:10 +msgid "Only print number of matches" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:13 +msgid "Pattern is extended regexp" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:14 +msgid "Pattern is a regexp" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:15 +msgid "Read pattern list from file. Skip files whose base name matches list" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:16 +msgid "Exclude matching directories from recursive searches" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:17 +msgid "Pattern is a fixed string" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:19 +msgid "Pattern is basic regex" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:20 +msgid "Print filename" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:21 +msgid "Suppress printing filename" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:23 +msgid "Skip binary files" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:24 +msgid "Ignore case" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:25 +msgid "Print first non-matching file" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:26 +msgid "Print first matching file" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:27 +msgid "Stop reading after NUM matches" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:28 +msgid "Use the mmap system call to read input" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:29 +#, fuzzy +msgid "Print line number" +msgstr "Afficher la licence" + +#: share/functions/__fish_complete_grep.fish:30 +msgid "Show only matching part" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:31 +msgid "Rename stdin" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:32 +msgid "Use line buffering" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:33 +#, fuzzy +msgid "Pattern is a Perl regexp (PCRE) string" +msgstr "Le motif est une regexp" + +#: share/functions/__fish_complete_grep.fish:34 +#: share/functions/__fish_complete_grep.fish:35 +msgid "Do not write anything" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:36 +#: share/functions/__fish_complete_grep.fish:37 +#, fuzzy +msgid "Read files under each directory, recursively" +msgstr "Traiter les répertoires récursivement" + +#: share/functions/__fish_complete_grep.fish:38 +msgid "Search only files matching PATTERN" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:39 +msgid "Skip files matching PATTERN" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:40 +msgid "Suppress error messages" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:41 +msgid "Ensure first character of actual line content lies on a tab stop" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:42 +msgid "Treat files as binary" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:43 +msgid "Report Unix-style byte offsets" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:45 +msgid "Invert the sense of matching" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:46 +msgid "Only whole matching words" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:47 +msgid "Only whole matching lines" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:48 +msgid "Obsolete synonym for -i" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:49 +msgid "treat input as a set of lines each terminated by a zero byte" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:50 +msgid "Output a zero byte after filename" +msgstr "" + +#: share/functions/__fish_complete_groups.fish:2 +msgid "Print a list of local groups, with group members as the description" +msgstr "" + +#: share/functions/__fish_complete_lpr_option.fish:1 +msgid "Complete lpr option" msgstr "" #: share/functions/__fish_complete_ls.fish:16 @@ -10542,7 +7515,6 @@ msgstr "" #: share/functions/__fish_complete_ls.fish:18 #: share/functions/__fish_complete_ls.fish:27 -#: share/functions/__fish_complete_ls.fish:59 msgid "Append filetype indicator" msgstr "" @@ -10556,7 +7528,7 @@ msgid "List subdirectory recursively" msgstr "" #: share/functions/__fish_complete_ls.fish:22 -#: share/functions/__fish_complete_ls.fish:97 +#: share/functions/__fish_complete_ls.fish:102 msgid "Octal escapes for non graphic characters" msgstr "" @@ -10564,6 +7536,10 @@ msgstr "" msgid "List directories, not their content" msgstr "" +#: share/functions/__fish_complete_ls.fish:24 +msgid "Human readable sizes" +msgstr "" + #: share/functions/__fish_complete_ls.fish:25 msgid "Print inode number of files" msgstr "" @@ -10608,6 +7584,10 @@ msgstr "" msgid "Set blocksize to 1kB" msgstr "" +#: share/functions/__fish_complete_ls.fish:38 +msgid "Long format" +msgstr "" + #: share/functions/__fish_complete_ls.fish:39 msgid "Comma separated format" msgstr "" @@ -10629,125 +7609,139 @@ msgid "List one file per line" msgstr "" #: share/functions/__fish_complete_ls.fish:49 -msgid "Print author" +msgid "Do not list implied entries matching specified shell pattern" msgstr "" #: share/functions/__fish_complete_ls.fish:50 -msgid "Set block size" -msgstr "" +#, fuzzy +msgid "Display security context" +msgstr "Afficher la version et quitter" #: share/functions/__fish_complete_ls.fish:51 -msgid "Ignore files ending with ~" +msgid "Display security context so it fits on most displays" msgstr "" #: share/functions/__fish_complete_ls.fish:52 -#: share/functions/__fish_complete_ls.fish:98 -msgid "Use colors" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:53 -msgid "Generate dired output" +msgid "Display only security context and file name" msgstr "" #: share/functions/__fish_complete_ls.fish:54 -msgid "List format" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:55 -msgid "Long format, full-iso time" +msgid "Print author" msgstr "" #: share/functions/__fish_complete_ls.fish:56 -msgid "Don't print group information" +msgid "Ignore files ending with ~" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:58 +msgid "Generate dired output" msgstr "" #: share/functions/__fish_complete_ls.fish:60 -msgid "Skip entries matching pattern" +msgid "Long format, full-iso time" msgstr "" #: share/functions/__fish_complete_ls.fish:61 -#: share/functions/__fish_complete_ls.fish:105 -msgid "Print raw entry names" +msgid "Don't print group information" msgstr "" #: share/functions/__fish_complete_ls.fish:62 -msgid "Long format without groups" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:63 -msgid "Non graphic as-is" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:64 -msgid "Enclose entry in quotes" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:65 -msgid "Select quoting style" +msgid "Human readable sizes, powers of 1000" msgstr "" #: share/functions/__fish_complete_ls.fish:66 -msgid "Sort criteria" +#: share/functions/__fish_complete_ls.fish:110 +msgid "Print raw entry names" msgstr "" -#: share/functions/__fish_complete_ls.fish:77 -msgid "Show time type" +#: share/functions/__fish_complete_ls.fish:67 +msgid "Long format without groups" msgstr "" -#: share/functions/__fish_complete_ls.fish:84 -msgid "Select time style" +#: share/functions/__fish_complete_ls.fish:68 +msgid "Non graphic as-is" msgstr "" -#: share/functions/__fish_complete_ls.fish:85 -msgid "Assume tab stops at each COLS" +#: share/functions/__fish_complete_ls.fish:69 +msgid "Enclose entry in quotes" msgstr "" -#: share/functions/__fish_complete_ls.fish:86 +#: share/functions/__fish_complete_ls.fish:91 msgid "Do not sort" msgstr "" -#: share/functions/__fish_complete_ls.fish:87 +#: share/functions/__fish_complete_ls.fish:92 msgid "Sort by version" msgstr "" -#: share/functions/__fish_complete_ls.fish:88 -msgid "Assume screen width" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:89 +#: share/functions/__fish_complete_ls.fish:94 msgid "Sort by extension" msgstr "" -#: share/functions/__fish_complete_ls.fish:99 -msgid "Prevent -A from being automatically set for root" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:100 -msgid "Don't follow symlinks" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:101 -msgid "Show modification time" -msgstr "" - -#: share/functions/__fish_complete_ls.fish:102 -msgid "Show whiteouts when scanning directories" -msgstr "" - #: share/functions/__fish_complete_ls.fish:103 -msgid "Display each file's MAC label" +msgid "Use colors" msgstr "" #: share/functions/__fish_complete_ls.fish:104 +msgid "Prevent -A from being automatically set for root" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:105 +msgid "Don't follow symlinks" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:106 +msgid "Show modification time" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:107 +msgid "Show whiteouts when scanning directories" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:108 +msgid "Display each file's MAC label" +msgstr "" + +#: share/functions/__fish_complete_ls.fish:109 msgid "Include the file flags in a long (-l) output" msgstr "" +#: share/functions/__fish_complete_ppp_peer.fish:1 +msgid "Complete isp name for pon/poff" +msgstr "" + +#: share/functions/__fish_complete_proc.fish:1 +msgid "Complete by list of running processes" +msgstr "" + +#: share/functions/__fish_complete_python.fish:2 +#: share/functions/__fish_complete_python.fish:28 +#: share/functions/__fish_complete_vi.fish:54 +msgid "Don\\t" +msgstr "" + +#: share/functions/__fish_complete_python.fish:12 +msgid "Disable import of site module" +msgstr "" + +#: share/functions/__fish_complete_python.fish:13 +msgid "Unbuffered input and output" +msgstr "" + +#: share/functions/__fish_complete_python.fish:24 +msgid "Warn on mixed tabs and spaces" +msgstr "" + +#: share/functions/__fish_complete_setxkbmap.fish:1 +msgid "Complete setxkb options" +msgstr "" + #: share/functions/__fish_complete_ssh.fish:4 -msgid "Protocoll version 1 only" +msgid "Protocol version 1 only" msgstr "" #: share/functions/__fish_complete_ssh.fish:5 -msgid "Protocoll version 2 only" +msgid "Protocol version 2 only" msgstr "" #: share/functions/__fish_complete_ssh.fish:6 @@ -10766,6 +7760,10 @@ msgstr "" msgid "Encryption algorithm" msgstr "" +#: share/functions/__fish_complete_ssh.fish:10 +msgid "Configuration file" +msgstr "" + #: share/functions/__fish_complete_ssh.fish:11 msgid "Identity file" msgstr "" @@ -10774,20 +7772,709 @@ msgstr "" msgid "Options" msgstr "" +#: share/functions/__fish_complete_svn.fish:48 +msgid "" +"Put files and directories under version control, scheduling them for " +"addition to repository. They will be added in next commit." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:49 +#: share/functions/__fish_complete_svn.fish:51 +msgid "" +"Output the content of specified files or URLs with revision and author " +"information in-line." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:50 +msgid "Output the content of specified files or URLs." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:52 +#, fuzzy +msgid "Check out a working copy from a repository." +msgstr "Enlever un fichier du référentiel" + +#: share/functions/__fish_complete_svn.fish:53 +msgid "" +"Recursively clean up the working copy, removing locks, resuming unfinished " +"operations, etc." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:54 +#, fuzzy +msgid "Send changes from your working copy to the repository." +msgstr "Ajouter un fichier/répertoire au référentiel" + +#: share/functions/__fish_complete_svn.fish:55 +msgid "Duplicate something in working copy or repository, remembering history." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:56 +#, fuzzy +msgid "Display the differences between two revisions or paths." +msgstr "Afficher les différences entre les révisions" + +#: share/functions/__fish_complete_svn.fish:57 +msgid "Create an unversioned copy of a tree." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:58 +msgid "Describe the usage of this program or its subcommands." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:59 +#, fuzzy +msgid "Commit an unversioned file or tree into the repository." +msgstr "Ajouter un fichier/répertoire au référentiel" + +#: share/functions/__fish_complete_svn.fish:60 +#, fuzzy +msgid "Display information about a local or remote item." +msgstr "Afficher l'état des fichiers extraits" + +#: share/functions/__fish_complete_svn.fish:61 +#, fuzzy +msgid "List directory entries in the repository." +msgstr "Appliquer les modifications au référentiel" + +#: share/functions/__fish_complete_svn.fish:62 +msgid "" +"Lock working copy paths or URLs in the repository, so that no other user can " +"commit changes to them." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:63 +msgid "Show the log messages for a set of revision(s) and/or file(s)." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:64 +msgid "Apply the differences between two sources to a working copy path." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:65 +#, fuzzy +msgid "Display information related to merges" +msgstr "Afficher l'état des fichiers extraits" + +#: share/functions/__fish_complete_svn.fish:66 +msgid "Create a new directory under version control." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:67 +msgid "Move and/or rename something in working copy or repository." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:68 +msgid "Apply a unidiff patch to the working copy" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:69 +msgid "Remove a property from files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:70 +msgid "Edit a property with an external editor." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:71 +msgid "Print the value of a property on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:72 +msgid "List all properties on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:73 +msgid "Set the value of a property on files, dirs, or revisions." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:74 +msgid "Rewrite working copy url metadata" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:75 +msgid "Remove files and directories from version control." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:76 +msgid "Remove conflicts on working copy files or directories." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:77 +msgid "Remove \\conflicted state on working copy files or directories." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:78 +msgid "Restore pristine working copy file (undo most local edits)." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:79 +msgid "Print the status of working copy files and directories." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:80 +msgid "Update the working copy to a different URL." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:81 +msgid "Unlock working copy paths or URLs." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:82 +msgid "Bring changes from the repository into the working copy." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:83 +msgid "Upgrade the metadata storage format for a working copy." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:90 +msgid "Do not cache authentication tokens" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:91 +msgid "Do no interactive prompting" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:92 +msgid "" +"Accept SSL server certificates from unknown authorities (ony with --non-" +"interactive)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:103 +#, fuzzy +msgid "Specify log message" +msgstr "Remplacer un message du journal" + +#: share/functions/__fish_complete_svn.fish:105 +msgid "Read log message from file" +msgstr "Lire le journal depuis le fichier" + +#: share/functions/__fish_complete_svn.fish:106 +msgid "Force validity of log message source" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:118 +#, fuzzy +msgid "Print nothing, or only summary information" +msgstr "Afficher l'historique pour les fichiers" + +#: share/functions/__fish_complete_svn.fish:122 +msgid "Force operation to run" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:126 +msgid "Process contents of file ARG as additional args" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:130 +msgid "Operate only on members of changelist" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:134 +msgid "Output in xml" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:138 +msgid "Retrieve revision property" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:150 +msgid "Ignore externals definitions" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:154 +#, fuzzy +msgid "Print extra information" +msgstr "Obtention des informations utilisateur impossible." + +#: share/functions/__fish_complete_svn.fish:158 +msgid "Operate on a revision property (use with -r)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:162 +msgid "Add intermediate parents" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:189 +msgid "Try operation but make no changes" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:193 +#, fuzzy +msgid "Ignore ancestry when calculating merges" +msgstr "Ignorer les changements correspondants à la regexp" + +#: share/functions/__fish_complete_svn.fish:197 +msgid "Override diff-cmd specified in config file" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:198 +#, fuzzy +msgid "Use external diff command" +msgstr "Annuler une commande d'édition" + +#: share/functions/__fish_complete_svn.fish:202 +msgid "Disable automatic properties" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:206 +#, fuzzy +msgid "Set new working copy depth" +msgstr "Utiliser le mode d'écriture brut" + +#: share/functions/__fish_complete_svn.fish:230 +msgid "don\\t" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:241 +msgid "Use ARG as the older target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:242 +msgid "Use ARG as the newer target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:243 +#, fuzzy +msgid "Do not print differences for deleted files" +msgstr "Ne pas afficher les lignes sans délimiteur" + +#: share/functions/__fish_complete_svn.fish:244 +msgid "Notice ancestry when calculating differences" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:245 +msgid "Show a summary of the results" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:257 +msgid "Do not cross copies while traversing history" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:259 +msgid "Produce diff output" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:279 +msgid "Use strict semantics" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:306 +msgid "Relocate via URL-rewriting" +msgstr "" + +#: share/functions/__fish_complete_svn_diff.fish:1 +msgid "Complete \"svn diff\" arguments" +msgstr "" + +#: share/functions/__fish_complete_tar.fish:14 +#: share/functions/__fish_complete_tar.fish:21 +#: share/functions/__fish_complete_tar.fish:28 +#: share/functions/__fish_complete_unrar.fish:14 +msgid "%s\\tArchived file\\n" +msgstr "" + +#: share/functions/__fish_complete_users.fish:2 +msgid "Print a list of local users, with the real user name as a description" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:37 +#, fuzzy +msgid "Start in Arabic mode" +msgstr "Démarrer le service" + +#: share/functions/__fish_complete_vi.fish:38 +#, fuzzy +msgid "Start in binary mode" +msgstr "Mode binaire" + +#: share/functions/__fish_complete_vi.fish:39 +msgid "Behave mostly like vi" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:40 +msgid "Start in diff mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:41 +#, fuzzy +msgid "Debugging mode" +msgstr "Mode débogage" + +#: share/functions/__fish_complete_vi.fish:42 +#, fuzzy +msgid "Start in Ex mode" +msgstr "Utiliser le mode d'écriture brut" + +#: share/functions/__fish_complete_vi.fish:43 +msgid "Start in improved Ex mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:44 +#: share/functions/__fish_complete_vi.fish:67 +msgid "Start in foreground mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:45 +#, fuzzy +msgid "Start in Farsi mode" +msgstr "Mode binaire" + +#: share/functions/__fish_complete_vi.fish:46 +msgid "Start in GUI mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:69 +#, fuzzy +msgid "Print help message and exit" +msgstr "Charger le média et quitter" + +#: share/functions/__fish_complete_vi.fish:48 +msgid "Start in Hebrew mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:49 +msgid "List swap files" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:50 +msgid "Start in lisp mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:51 +msgid "Disable file modification" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:52 +#, fuzzy +msgid "Disallow file modification" +msgstr "Afficher les dernières modifications seulement" + +#: share/functions/__fish_complete_vi.fish:53 +msgid "Reset compatibility mode" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:62 +#, fuzzy +msgid "Start in easy mode" +msgstr "Mode binaire" + +#: share/functions/__fish_complete_vi.fish:63 +#, fuzzy +msgid "Start in restricted mode" +msgstr "Forcer le mode interactif" + +#: share/functions/__fish_complete_vi.fish:65 +msgid "Become an editor server for NetBeans" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:68 +msgid "Echo the Window ID on stdout (GTK GUI only)" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:70 +#, fuzzy +msgid "Do not expand wildcards" +msgstr "Ne pas développer le motif" + +#: share/functions/__fish_complete_vi.fish:71 +msgid "Skip loading plugins" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:72 +#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:77 +msgid "Edit files on Vim server" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:73 +msgid "Evaluate expr on Vim server" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:74 +#, fuzzy +msgid "Send keys to Vim server" +msgstr "Envoyer un couriel à l'utilisateur" + +#: share/functions/__fish_complete_vi.fish:78 +msgid "List all Vim servers that can be found" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:79 +#, fuzzy +msgid "Set server name" +msgstr "Mode serveur" + +#: share/functions/__fish_complete_vi.fish:80 +#, fuzzy +msgid "Print version information and exit" +msgstr "Afficher l'historique d'un module" + +#: share/functions/__fish_complete_vi.fish:91 +msgid "Suppress all interactive user feedback" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:92 +#: share/functions/__fish_complete_vi.fish:99 +msgid "Encrypt/decrypt text" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:93 +msgid "Set up for editing LISP programs" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:94 +msgid "List saved file names after crash" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:95 +#, fuzzy +msgid "Read-only mode" +msgstr "Référentiel en lecture seule" + +#: share/functions/__fish_complete_vi.fish:96 +msgid "Use linear search for tags if tag file not sorted" +msgstr "" + +#: share/functions/__fish_complete_vi.fish:97 +msgid "Start in display editing state" +msgstr "" + +#: share/functions/__fish_complete_wvdial_peers.fish:1 +msgid "Complete wvdial peers" +msgstr "" + +#: share/functions/__fish_complete_xsum.fish:1 +msgid "Complete md5sum sha1 etc" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:65 +#, sh-format +msgid "" +"\\nWARNING\\n\\nThe location for fish configuration files has changed to %s." +"\\nYour old files have been moved to this location.\\nYou can change to a " +"different location by changing the value of the variable $XDG_CONFIG_HOME.\\n" +"\\n" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:82 +msgid "Welcome to fish, the friendly interactive shell" +msgstr "Bienvenue dans fish, le shell amical et interactif" + +#: share/functions/__fish_config_interactive.fish:83 +msgid "Type %shelp%s for instructions on how to use fish" +msgstr "Tappez %shelp%s pour des instructions sur l'utilisation de fish" + +#: share/functions/__fish_config_interactive.fish:173 +msgid "Event handler, repaints the prompt when fish_color_cwd changes" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:180 +msgid "Event handler, repaints the prompt when fish_color_cwd_root changes" +msgstr "" + +#: share/functions/__fish_config_interactive.fish:192 +msgid "Start service" +msgstr "Démarrer le service" + +#: share/functions/__fish_config_interactive.fish:193 +msgid "Stop service" +msgstr "Arrêter le service" + +#: share/functions/__fish_config_interactive.fish:194 +msgid "Print service status" +msgstr "Afficher l'état du service" + +#: share/functions/__fish_config_interactive.fish:195 +msgid "Stop and then start service" +msgstr "Redémarrer le service" + +#: share/functions/__fish_config_interactive.fish:196 +msgid "Reload service configuration" +msgstr "Recharger la configuration du service" + +#: share/functions/__fish_config_interactive.fish:228 +#, sh-format +msgid "Notify VTE of change to $PWD" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:173 +msgid "Helper function for __fish_git_prompt" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:244 +msgid "svn_upstream" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:348 +#, fuzzy +msgid "Prompt function for Git" +msgstr "Les fonctions courantes sont: " + +#: share/functions/__fish_git_prompt.fish:458 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has staged " +"files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:471 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has " +"tracked, modified files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:526 +msgid "__fish_git_prompt helper, returns the current Git operation and branch" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:639 +msgid "__fish_git_prompt helper, checks char variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:690 +msgid "__fish_git_prompt helper, checks color variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:730 +msgid "Event handler, repaints prompt when functionality changes" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:748 +msgid "Event handler, repaints prompt when any color changes" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:768 +msgid "Event handler, repaints prompt when any char changes" +msgstr "" + +#: share/functions/__fish_is_token_n.fish:1 +msgid "Test if current token is on Nth place" +msgstr "" + +#: share/functions/__fish_make_completion_signals.fish:1 +msgid "Make list of kill signals for completion" +msgstr "" + #: share/functions/__fish_move_last.fish:9 msgid "Hit end of history...\\n" msgstr "" -#: share/functions/contains.fish:2 -msgid "Test if a key is contained in a set of values" +#: share/functions/__fish_print_abook_emails.fish:1 +#, fuzzy +msgid "Print email addresses (abook)" +msgstr "Spécifier l'adresse de courriel" + +#: share/functions/__fish_print_addresses.fish:1 +msgid "Print a list of known network addresses" msgstr "" -#: share/functions/contains.fish:15 -msgid "%s: Unknown option '%s'\\n" +#: share/functions/__fish_print_arch_daemons.fish:1 +#, fuzzy +msgid "Print arch daemons" +msgstr "Afficher tous les noms" + +#: share/functions/__fish_print_commands.fish:1 +msgid "Print a list of documented fish commands" msgstr "" -#: share/functions/contains.fish:28 -msgid "%s: Key not specified\\n" +#: share/functions/__fish_print_debian_services.fish:1 +#, fuzzy +msgid "Prints services installed" +msgstr "Afficher l'état du service" + +#: share/functions/__fish_print_help.fish:2 +#, fuzzy +msgid "Print help message for the specified fish function or builtin" +msgstr "Afficher toutes les complétions pour la commande spécifiée" + +#: share/functions/__fish_print_interfaces.fish:1 +msgid "Print a list of known network interfaces" +msgstr "" + +#: share/functions/__fish_print_lpr_options.fish:1 +#, fuzzy +msgid "Print lpr options" +msgstr "Afficher toutes les versions" + +#: share/functions/__fish_print_lpr_printers.fish:1 +#, fuzzy +msgid "Print lpr printers" +msgstr "Afficher les fiches complètes" + +#: share/functions/__fish_print_lsblk_columns.fish:1 +#, fuzzy +msgid "Print available lsblk columns" +msgstr "Afficher la liste disponible" + +#: share/functions/__fish_print_mounted.fish:1 +#, fuzzy +msgid "Print mounted devices" +msgstr "Afficher les dépendances importantes" + +#: share/functions/__fish_print_svn_rev.fish:1 +#, fuzzy +msgid "Print svn revisions" +msgstr "Afficher la version des paquets" + +#: share/functions/__fish_print_users.fish:2 +msgid "Print a list of local users" +msgstr "" + +#: share/functions/__fish_print_xdg_mimeapps.fish:1 +msgid "Print xdg mime applications" +msgstr "" + +#: share/functions/__fish_print_xdg_mimetypes.fish:1 +msgid "Print XDG mime types" +msgstr "" + +#: share/functions/__fish_print_xrandr_modes.fish:1 +#, fuzzy +msgid "Print xrandr modes" +msgstr "Afficher tous les noms" + +#: share/functions/__fish_print_xrandr_outputs.fish:1 +msgid "Print xrandr outputs" +msgstr "" + +#: share/functions/__fish_print_xwindows.fish:1 +#, fuzzy +msgid "Print X windows" +msgstr "Afficher les informations APM" + +#: share/functions/__fish_pwd.fish:3 share/functions/__fish_pwd.fish:7 +#, fuzzy +msgid "Show current path" +msgstr "Afficher le paquet source" + +#: share/functions/__fish_test_arg.fish:2 +msgid "Test if the token under the cursor matches the specified wildcard" +msgstr "" + +#: share/functions/__fish_urlencode.fish:1 +msgid "URL-encode stdin" +msgstr "" + +#: share/functions/__terlar_git_prompt.fish:23 +msgid "Write out the git prompt" +msgstr "" + +#: share/functions/alias.fish:2 +msgid "" +"Legacy function for creating shellscript functions using an alias-like syntax" +msgstr "" + +#: share/functions/alias.fish:34 +#, fuzzy +msgid "%s: Expected one or two arguments, got %d\\n" +msgstr "%ls: Un argument attendu, %d obtenu(s)\n" + +#: share/functions/contains_seq.fish:1 +msgid "Return true if array contains a sequence" msgstr "" #: share/functions/dirh.fish:2 @@ -10798,53 +8485,120 @@ msgstr "" msgid "Print directory stack" msgstr "" -#: share/functions/fish_prompt.fish:6 -msgid "Event handler, repaints the prompt when fish_color_cwd changes" +#: share/functions/fish_config.fish:1 +msgid "Launch fish's web based configuration" msgstr "" -#: share/functions/fish_prompt.fish:10 +#: share/functions/fish_indent.fish:1 +msgid "Indenter and prettifier for fish code" +msgstr "" + +#: share/functions/fish_prompt.fish:5 msgid "Write out the prompt" msgstr "" -#: share/functions/help.fish:10 +#: share/functions/fish_update_completions.fish:1 +#, fuzzy +msgid "Update man-page based completions" +msgstr "Éditer les complétions spécifiques aux commandes" + +#: share/functions/funced.fish:1 +#, fuzzy +msgid "Edit function definition" +msgstr "bloc de définition de fonction" + +#: share/functions/funced.fish:24 share/functions/nextd.fish:22 +#: share/functions/prevd.fish:22 share/functions/vared.fish:15 +msgid "%s: Unknown option %s\\n" +msgstr "" + +#: share/functions/funced.fish:36 +#, fuzzy +msgid "funced: You must specify one function name\n" +msgstr "%ls: Exactement un nom de fonction est attendu\n" + +#: share/functions/funcsave.fish:2 +msgid "Save the current definition of all specified functions to file" +msgstr "" + +#: share/functions/funcsave.fish:11 +#, fuzzy +msgid "%s: Expected function name\\n" +msgstr "%ls: Exactement un nom de fonction est attendu\n" + +#: share/functions/funcsave.fish:26 +#, fuzzy +msgid "%s: Could not create configuration directory\\n" +msgstr "%ls: Répertoire personnel introuvable\n" + +#: share/functions/funcsave.fish:37 +#, fuzzy +msgid "%s: Unknown function '%s'\\n" +msgstr "Fonction inconnue '%ls'" + +#: share/functions/help.fish:1 msgid "Show help for the fish shell" msgstr "" -#: share/functions/help.fish:59 +#: share/functions/help.fish:76 msgid "%s: Could not find a web browser.\\n" msgstr "" -#: share/functions/help.fish:60 +#: share/functions/help.fish:77 #, sh-format msgid "" -"Please set the variable $BROWSER to a suitable browser and try again\\n" -"\\n" +"Please set the variable $BROWSER to a suitable browser and try again.\\n\\n" +msgstr "" + +#: share/functions/help.fish:129 +msgid "help: Help is being displayed in your default browser.\\n" +msgstr "" + +#: share/functions/help.fish:132 +msgid "help: Help is being displayed in %s.\\n" +msgstr "" + +#: share/functions/history.fish:5 +#, fuzzy +msgid "Deletes an item from history" +msgstr "Enlever un fichier du référentiel" + +#: share/functions/hostname.fish:7 +msgid "Show or set the system's host name\r" msgstr "" #: share/functions/la.fish:4 -msgid "List contents of directory, including hidden files in directory using long format" +msgid "" +"List contents of directory, including hidden files in directory using long " +"format" msgstr "" #: share/functions/ll.fish:4 msgid "List contents of directory using long format" msgstr "" -#: share/functions/ls.fish:7 -#: share/functions/ls.fish:54 +#: share/functions/ls.fish:7 share/functions/ls.fish:24 msgid "List contents of directory" msgstr "" +#: share/functions/man.fish:1 +msgid "Format and display the on-line manual pages" +msgstr "" + +#: share/functions/math.fish:2 +#, fuzzy +msgid "Perform math calculations in bc" +msgstr "Simuler" + +#: share/functions/mimedb.fish:8 +msgid "Look up file information via the mimedb database" +msgstr "" + #: share/functions/nextd.fish:2 msgid "Move forward in the directory history" msgstr "" -#: share/functions/nextd.fish:12 -#: share/functions/prevd.fish:12 -#: share/functions/vared.fish:15 -msgid "%s: Unknown option %s\\n" -msgstr "" - -#: share/functions/nextd.fish:18 +#: share/functions/nextd.fish:28 msgid "%s: The number of positions to skip must be a non-negative integer\\n" msgstr "" @@ -10856,106 +8610,830 @@ msgstr "" msgid "Pop dir from stack" msgstr "" -#: share/functions/popd.fish:6 -msgid "%s: Directory stack is empty..." +#: share/functions/popd.fish:14 +msgid "%s: Directory stack is empty...\\n" msgstr "" #: share/functions/prevd.fish:2 msgid "Move back in the directory history" msgstr "" -#: share/functions/prevd.fish:18 +#: share/functions/prevd.fish:28 msgid "The number of positions to skip must be a non-negative integer\\n" msgstr "" -#: share/functions/prompt_pwd.fish:3 -#: share/functions/prompt_pwd.fish:12 -msgid "Print the current working directory, shortend to fit the prompt" +#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:7 +#: share/functions/prompt_pwd.fish:11 +msgid "Print the current working directory, shortened to fit the prompt" msgstr "" #: share/functions/psub.fish:3 -msgid "Read from stdin into a file and output the filename. Remove the file when the command that called psub exits." -msgstr "" - -#: share/functions/psub.fish:16 -msgid "%s: Unknown argument '%s'\\n" +msgid "" +"Read from stdin into a file and output the filename. Remove the file when " +"the command that called psub exits." msgstr "" #: share/functions/pushd.fish:3 msgid "Push directory to stack" msgstr "" +#: share/functions/seq.fish:7 +msgid "Print sequences of numbers" +msgstr "" + +#: share/functions/seq.fish:11 +#, fuzzy +msgid "Fallback implementation of the seq command" +msgstr "Afficher toutes les complétions pour la commande spécifiée" + +#: share/functions/seq.fish:31 +msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" +msgstr "" + +#: share/functions/seq.fish:38 +msgid "%s: '%s' is not a number\\n" +msgstr "" + +#: share/functions/setenv.fish:2 +msgid "Set global variable. Alias for set -g, made for csh compatibility" +msgstr "" + #: share/functions/type.fish:2 msgid "Print the type of a command" msgstr "" -#: share/functions/type.fish:73 +#: share/functions/type.fish:84 msgid "%s is a function with definition\\n" msgstr "" -#: share/functions/type.fish:77 -msgid "function\\n" -msgstr "" +#: share/functions/type.fish:88 +#, fuzzy +msgid "function" +msgstr "Fonction" -#: share/functions/type.fish:94 +#: share/functions/type.fish:105 msgid "%s is a builtin\\n" msgstr "" -#: share/functions/type.fish:97 -msgid "builtin\\n" -msgstr "" +#: share/functions/type.fish:108 +#, fuzzy +msgid "builtin" +msgstr "Commande interne" -#: share/functions/type.fish:115 +#: share/functions/type.fish:132 msgid "%s is %s\\n" msgstr "" -#: share/functions/type.fish:118 -msgid "file\\n" -msgstr "" +#: share/functions/type.fish:135 +#, fuzzy +msgid "file" +msgstr "Fichier de config" -#: share/functions/type.fish:129 +#: share/functions/type.fish:147 msgid "%s: Could not find '%s'\\n" msgstr "" -#: share/functions/umask.fish:10 -#: share/functions/umask.fish:67 -#: share/functions/umask.fish:74 +#: share/functions/umask.fish:11 share/functions/umask.fish:69 +#: share/functions/umask.fish:76 msgid "%s: Invalid mask '%s'\\n" msgstr "" -#: share/functions/umask.fish:135 +#: share/functions/umask.fish:137 msgid "Set default file permission mask" msgstr "" -#: share/functions/umask.fish:202 +#: share/functions/umask.fish:212 msgid "%s: Too many arguments\\n" msgstr "" -#: share/functions/vared.fish:7 +#: share/functions/vared.fish:6 msgid "Edit variable value" msgstr "" -#: share/functions/vared.fish:40 -msgid "%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of %s\\n" -msgstr "" - -#: share/functions/vared.fish:44 +#: share/functions/vared.fish:41 msgid "" -"%s: Expected exactly one argument, got %s.\\n" -"\\n" -"Synopsis:\\n" -"\\t%svared%s VARIABLE\\n" +"%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of " +"%s\\n" msgstr "" -#: seq:15 -msgid "^/dev/null" +#: share/functions/vared.fish:45 +msgid "" +"%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " +"VARIABLE\\n" msgstr "" -#: seq:36 -msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" -msgstr "" +#~ msgid "" +#~ "Current function definitions are:\n" +#~ "\n" +#~ msgstr "" +#~ "Définitions de fonctions courantes:\n" +#~ "\n" -#: seq:43 -msgid "%s: '%s' is not a number\\n" -msgstr "" +#~ msgid "" +#~ "%ls: '%ls' is not a directory or you do not have permission to enter it\n" +#~ msgstr "" +#~ "%ls: '%ls' n'est pas un répertoire ou vous n'avez pas l'autorisation d'y " +#~ "entrer\n" +#~ msgid "%ls: Expected at least one argument, got %d\n" +#~ msgstr "%ls: Au moins un argument attendu, %d obtenu\n" + +#~ msgid "%ls: Argument must be a number: %ls\n" +#~ msgstr "%ls: L'argument doit être un nombre: %ls\n" + +#~ msgid "Evaluate parameters as a command" +#~ msgstr "Évaluer le paramètre comme une commande" + +#~ msgid "%ls: Command only available in interactive sessions" +#~ msgstr "%ls: Commande disponible seulement dans les sessions interactives" + +#~ msgid "Procces\n" +#~ msgstr "Processus\n" + +#~ msgid "Could not create child process - exiting" +#~ msgstr "Impossible de créer le processus fils - fermeture" + +#~ msgid "Failed to execute process '%ls'" +#~ msgstr "L'exécution du processus '%ls' a échoué" + +#~ msgid "Could not send process %d from group %d to group %d" +#~ msgstr "Déplacement du processus %d du groupe %d au groupe %d impossible" + +#~ msgid "" +#~ "Sent null command to subshell. This is a fish bug. If it can be " +#~ "reproduced, please send a bug report to %s." +#~ msgstr "" +#~ "Commande nulle envoyé au sous-shell. Ceci est un bogue de fish. S'il peut " +#~ "être reproduit, envoyez un rapport de bogue à %s." + +#~ msgid "Invalid Control sequence" +#~ msgstr "Séquence de contrôle invalide" + +#~ msgid "Could not parse sequence '%ls'" +#~ msgstr "Analyse de la séquence '%ls' impossible" + +#~ msgid "Invalid sequence - no dash after control\n" +#~ msgstr "Séquence invalide - pas de tiret après CTRL\n" + +#~ msgid "Invalid sequence - Control-nothing?\n" +#~ msgstr "Séquence invalide - CTRL-rien?\n" + +#~ msgid "Invalid sequence - no dash after meta\n" +#~ msgstr "Séquence invalide - pas de tiret après méta\n" + +#~ msgid "Invalid sequence - Meta-nothing?" +#~ msgstr "Séquence invalide - Méta-rien?" + +#~ msgid "Invalid sequence - '%ls' expanded to zero characters" +#~ msgstr "Séquence invalide - '%ls' ne contient aucun caractère" + +#~ msgid "Mismatched $endif in inputrc file" +#~ msgstr "Les $endif ne concordent pas dans le fichier inputrc" + +#~ msgid "Mismatched quote" +#~ msgstr "Apostrophe non-concordante" + +#~ msgid "Expected a ':'" +#~ msgstr "Attendu ':'" + +#~ msgid "I don't know what '%ls' means" +#~ msgstr "Je ne sais pas ce que '%ls' veut dire" + +#~ msgid "Expected end of line, got '%ls'" +#~ msgstr "Fin de ligne attendu, '%ls' obtenu" + +#~ msgid "Syntax: set KEY VALUE" +#~ msgstr "Syntaxe: set CLÉ VALEUR" + +#~ msgid "Unable to parse key binding" +#~ msgstr "Incapable d'analyser le raccourci clavier" + +#~ msgid "I don't know what %ls means" +#~ msgstr "Je ne sais pas ce que %ls veut dire" + +#~ msgid "Error while reading input information from file '%ls'" +#~ msgstr "Erreur lors de la lecture d'information d'entrée du fichier '%ls'" + +#~ msgid "If this error can be reproduced, please send a bug report to %s." +#~ msgstr "" +#~ "Si cette erreur peut être reproduite, envoyez un rapport de bogue à %s." + +#~ msgid "Pipe or short circuit command requires additional command" +#~ msgstr "" +#~ "Le tube ou la commande court-circuit exige une commande additionnelle" + +#~ msgid "Maximum recursion depth reached. Accidental infinite loop?" +#~ msgstr "" +#~ "Profondeur maximale de récursion atteinte. Boucle infinie accidentelle?" + +#~ msgid "Maximum number of nested blocks reached." +#~ msgstr "Nombre maximum de blocs imbriqués atteint." + +#~ msgid "" +#~ "Warning: No match for wildcard '%ls'. The command will not be executed." +#~ msgstr "" +#~ "Avertissement: Aucune correspondance pour l'expression générique '%ls'. " +#~ "La commande ne sera pas exécutée." + +#~ msgid "Tried to evaluate null pointer." +#~ msgstr "Évaluation de pointeur nul." + +#~ msgid "in . (source) call of file '%ls',\n" +#~ msgstr "dans . (source) appel du fichier '%ls',\n" + +#~ msgid "Unknown command '%ls'" +#~ msgstr "Commande inconnue '%ls'" + +#~ msgid "Job command" +#~ msgstr "Commande de tâche" + +#~ msgid "Job list pointer" +#~ msgstr "Pointeur de la liste des tâches" + +#~ msgid "Process command" +#~ msgstr "Commande du processus" + +#~ msgid "There are stopped jobs\n" +#~ msgstr "Il y a des tâches arrêtées\n" + +#~ msgid "Error while reading commands" +#~ msgstr "Erreur lors de la lecture des commandes" + +#~ msgid "Could not convert input. Read %d bytes." +#~ msgstr "Impossible de convertir l'entrée. %d octets lus." + +#~ msgid "Could not read input stream" +#~ msgstr "Impossible de lire le flux d'entrée" + +#~ msgid "%s: Too many arguments\n" +#~ msgstr "%s: Trop d'arguments\n" + +#~ msgid "Parenthesis mismatch" +#~ msgstr "Incohérence de parenthèses" + +#~ msgid "Invalid input" +#~ msgstr "Entrée invalide" + +#~ msgid "Commands to execute when fish exits" +#~ msgstr "Commandes à exécuter à la fermeture de fish" + +#~ msgid "Good bye\\n" +#~ msgstr "Au revoir\\n" + +#~ msgid "" +#~ "%s: Warning: The directory %s has been removed from your PATH, because it " +#~ "does not exist\\n" +#~ msgstr "" +#~ "%s: Attention: Le répertoire %s a été enlevé de votre variable PATH, " +#~ "parce qu'il n'existe pas\\n" + +#~ msgid "whatis entry" +#~ msgstr "whatis entry" + +#~ msgid "Use to build" +#~ msgstr "Utiliser pour construire" + +#~ msgid "Prefix to strip on patch" +#~ msgstr "Préfixe à sauter dans la patch" + +#~ msgid "Use purge instead of remove" +#~ msgstr "Purger au lieu de supprimer" + +#~ msgid "Do not run update" +#~ msgstr "Ne pas lancer de mise à jour" + +#~ msgid "Search full package name" +#~ msgstr "Chercher le nom complet de paquet" + +#~ msgid "Access config file from shell" +#~ msgstr "Accéder au fichier de config à partir du shell" + +#~ msgid "Use cdrom-mount-point" +#~ msgstr "Utiliser le point de montage du cdrom" + +#~ msgid "Download Only" +#~ msgstr "Télécharger seulement" + +#~ msgid "Correct broken dependencies" +#~ msgstr "Corriger les dépendances brisées" + +#~ msgid "Ignore missing packages" +#~ msgstr "Ignorer les paquets manquants" + +#~ msgid "Automatic yes to prompts" +#~ msgstr "Assumer Oui aux questions" + +#~ msgid "Compile source packages" +#~ msgstr "Compiler les paquets source" + +#~ msgid "Do not upgrade packages" +#~ msgstr "Aucune mise à niveau" + +#~ msgid "Force yes" +#~ msgstr "Forcer oui" + +#~ msgid "Erase obsolete files" +#~ msgstr "Effacer les fichiers obsolètes" + +#~ msgid "Control default input to the policy engine" +#~ msgstr "Choisir la version" + +#~ msgid "Only perform operations that are trivial" +#~ msgstr "Effectuer seulement les opérations triviales" + +#~ msgid "Abort if any packages are to be removed" +#~ msgstr "Abandonner si un paquet doit être enlevé" + +#~ msgid "Only accept source packages" +#~ msgstr "Seulement accepter les paquets source" + +#~ msgid "Download only diff file" +#~ msgstr "Télécharger seulement le fichier diff" + +#~ msgid "Download only tar file" +#~ msgstr "Télécharger seulement le fichier tar" + +#~ msgid "Only process arch-dependant build-dependencies" +#~ msgstr "" +#~ "Traiter seulement les dépendances de construction dépendantes de " +#~ "l'architecture" + +#~ msgid "Ignore non-authenticated packages" +#~ msgstr "Ignorer les paquets non-authentifiés" + +#~ msgid "Specify apt config file" +#~ msgstr "Spécifier le fichier de config d'APT" + +#~ msgid "List bugs in rss format" +#~ msgstr "Lister les bogues au format rss" + +#~ msgid "Read filenames from pipe" +#~ msgstr "Lire les noms de fichier depuis un tube" + +#~ msgid "Alias for 'get'" +#~ msgstr "Alias pour 'get'" + +#~ msgid "Use specific conffile" +#~ msgstr "Utiliser un fichier de config spécifique" + +#~ msgid "Comma-separated list of dependancy types to follow recursively" +#~ msgstr "" +#~ "Liste séparée par des virgules de types de dépendances à suivre " +#~ "récursivement" + +#~ msgid "Comma-separated list of dependancy types to show" +#~ msgstr "Liste séparée par des virgules de types de dépendances à afficher" + +#~ msgid "" +#~ "Comma-separated list of package installation states to follow recursively" +#~ msgstr "" +#~ "Liste séparée par des virgules d'états d'installation de paquet à suivre " +#~ "récursivement" + +#~ msgid "Comma-separated list of package installation states to show" +#~ msgstr "" +#~ "Liste séparée par des virgules d'états d'installation de paquet à afficher" + +#~ msgid "Probe a CD" +#~ msgstr "Analyser un CD" + +#~ msgid "Run in noninteractive mode" +#~ msgstr "Exécuter en mode noninteractif" + +#~ msgid "File as input" +#~ msgstr "Fichier d'entrée" + +#~ msgid "Mirror-list file" +#~ msgstr "Liste de miroirs" + +#~ msgid "Run on current dir" +#~ msgstr "Exécuter dans le répertoire courant" + +#~ msgid "Removable medium" +#~ msgstr "Média amovible" + +#~ msgid "Specify a non-mountpoint dir" +#~ msgstr "Spécifier un rep. qui n'est pas un point de montage" + +#~ msgid "Select a method" +#~ msgstr "Choisir une méthode" + +#~ msgid "Accept protocols" +#~ msgstr "Accepter les protocoles" + +#~ msgid "Reject protocols" +#~ msgstr "Rejeter les protocoles" + +#~ msgid "Numerical address" +#~ msgstr "Adresse numérique" + +#~ msgid "Use hardware address" +#~ msgstr "Utiliser l'adresse matérielle" + +#~ msgid "Define math library" +#~ msgstr "Définir la bibliothèque mathématique" + +#~ msgid "Give warnings for extensions to POSIX bc" +#~ msgstr "Avertir lors d'utilisations d'extensions de bc POSIX" + +#~ msgid "Process exactly POSIX bc" +#~ msgstr "Traiter exactement comme bc POSIX" + +#~ msgid "Do not print the GNU welcome" +#~ msgstr "Ne pas afficher le message de bienvenue GNU" + +#~ msgid "Decompress to stdout" +#~ msgstr "Décompresser vers stdout" + +#~ msgid "Overwrite" +#~ msgstr "Écraser" + +#~ msgid "Do not overwrite" +#~ msgstr "Ne pas écraser" + +#~ msgid "Reduce memory usage" +#~ msgstr "Réduire l'utilisation de la mémoire" + +#~ msgid "Print compression ratios" +#~ msgstr "Afficher les ratios de compression" + +#~ msgid "Compress to stdout" +#~ msgstr "Compresser vers stdout" + +#~ msgid "Compress file" +#~ msgstr "Compresser le fichier" + +#~ msgid "Check integrity" +#~ msgstr "Vérifier l'intégrité" + +#~ msgid "Supress errors" +#~ msgstr "Supprimer les erreurs" + +#~ msgid "Small block size" +#~ msgstr "Petite taille de blocs" + +#~ msgid "Large block size" +#~ msgstr "Grande taille de blocs" + +#~ msgid "Escape all non-printing characters" +#~ msgstr "Échapper tous les caractères non-imprimables" + +#~ msgid "Number nonblank lines" +#~ msgstr "Numéroter les lignes non blanches" + +#~ msgid "Escape non-printing characters except tab" +#~ msgstr "Échapper les caractères non-imprimables sauf tab" + +#~ msgid "Display $ at end of line" +#~ msgstr "Afficher $ à la fin du fichier" + +#~ msgid "Never more than single blank line" +#~ msgstr "Jamais plus d'une seule ligne blanche" + +#~ msgid "Escape non-printing characters except newline" +#~ msgstr "Échapper tous les caractères non-imprimables sauf nouvelle ligne" + +#~ msgid "Escape tab" +#~ msgstr "Échapper tab" + +#~ msgid "Escape non-printing except newline and tab" +#~ msgstr "Échapper les caractères non-imprimables sauf tab et nouvelle ligne" + +#~ msgid "Increment the level of general verbosity by one" +#~ msgstr "Incrémenter de un le niveau général de verbosité" + +#~ msgid "" +#~ "Increment the verbose level in respect of SCSI command transport by one" +#~ msgstr "" +#~ "Incrémenter de un le niveau de verbosité en respect des commandes de " +#~ "transport SCSI" + +#~ msgid "Set the misc debug value to #" +#~ msgstr "Définir le niveau de débogage misc" + +#~ msgid "Increment the misc debug level by one" +#~ msgstr "Incrémenter de un le niveau de débogage misc" + +#~ msgid "Do not print out a status report for failed SCSI commands" +#~ msgstr "Ne pas afficher un rapport pour les commandes SCSI qui ont échoué" + +#~ msgid "Force to continue on some errors" +#~ msgstr "Forcer à continuer lors de certaines erreurs" + +#~ msgid "Tell cdrecord to set the SCSI IMMED flag in certain commands" +#~ msgstr "" +#~ "Dire à cdrecord de définir le drapeau SCSI IMMED pour certaines commandes" + +#~ msgid "" +#~ "Defines the minimum drive buffer fill ratio for the experimental ATAPI " +#~ "wait mode intended to free the IDE bus to allow hard disk and CD/DVD " +#~ "writer on the same IDE cable" +#~ msgstr "" +#~ "Définir le tampon de ratio de remplissage maximal pour le mode ATAPI " +#~ "expérimental d'attente dont l'objectif est de libérer le bus IDE pour " +#~ "permettre d'autres périphériques sur le même câble IDE" + +#~ msgid "Complete CD/DVD-Recorder recording process with the laser turned off" +#~ msgstr "Compléter l'enregistrement du CD/DVD avec le laser éteint" + +#~ msgid "Tells cdrecord to handle images created by readcd -clone" +#~ msgstr "Dire à cdrecord de gérer les images créées par readcd -clone" + +#~ msgid "Set SAO (Session At Once) mode, usually called Disk At Once mode" +#~ msgstr "" +#~ "Utiliser le mode SAO (Session At One), habituellement appelé mode DAO" + +#~ msgid "Set TAO (Track At Once) writing mode" +#~ msgstr "Utiliser le mode d'écriture TAO (Track At Once)" + +#~ msgid "Select Set RAW writing, the preferred raw writing mode" +#~ msgstr "Utiliser l'écriture brute, le mode d'écriture brute préféré" + +#~ msgid "Allow multi session CDs to be made" +#~ msgstr "Permettre la création de CDs multi sessions" + +#~ msgid "Eject disk after doing the work" +#~ msgstr "Éjecter le disque après le travail" + +#~ msgid "Set the speed factor of the writing process to #" +#~ msgstr "Définir la vitesse d'écriture" + +#~ msgid "Blank a CD-RW and exit or blank a CD-RW before writing" +#~ msgstr "Effacer un CD-RW" + +#~ msgid "Format a CD-RW/DVD-RW/DVD+RW disc" +#~ msgstr "Formatter un CD-RW" + +#~ msgid "Allows the user to manually select a driver for the device" +#~ msgstr "" +#~ "Permettre à l'utilisateur de choisir un pilote manuellement pour le " +#~ "périphérique" + +#~ msgid "Checks if a driver for the current drive is present and exit" +#~ msgstr "Vérifier si le pilote pour le lecteur est présent" + +#~ msgid "Output diagnostic for changed files" +#~ msgstr "Rapporter les changements effectués" + +#~ msgid "Dereferense symbolic links" +#~ msgstr "Déréférencer les liens symboliques" + +#~ msgid "Do not dereference symbolic links" +#~ msgstr "Ne pas déréférencer les liens symboliques" + +#~ msgid "Use same owner/group as file" +#~ msgstr "Utiliser le même propriétaire/groupe que celui du fichier" + +#~ msgid "Operate recursively" +#~ msgstr "Opérer récursivement" + +#~ msgid "Output diagnostic for every file" +#~ msgstr "Afficher les détails pour chaque fichier" + +#~ msgid "Add text to the end of the selected area" +#~ msgstr "Ajouter du texte à la fin de la sélection" + +#~ msgid "Add text at cursor" +#~ msgstr "Ajouter du texte au curseur" + +#~ msgid "Replace selected part" +#~ msgstr "Remplacer la partie sélectionnée" + +#~ msgid "Select job under cursor" +#~ msgstr "Sélectionner la tâche sous le curseur" + +#~ msgid "Select process under cursor" +#~ msgstr "Sélectionner le processus sous le curseur" + +#~ msgid "Select token under cursor" +#~ msgstr "Sélectionner le jeton sous le curseur" + +#~ msgid "Select entire command line (default)" +#~ msgstr "Sélectionner la ligne de commande entière (défaut)" + +#~ msgid "Only return that part of the command line before the cursor" +#~ msgstr "" +#~ "Retourner seulement la partie de la ligne de commande avant le curseur" + +#~ msgid "Path to add completion to" +#~ msgstr "Chemin à ajouter une complétion" + +#~ msgid "Posix-style option to complete" +#~ msgstr "Option de style Posix à compléter" + +#~ msgid "GNU-style option to complete" +#~ msgstr "Option de style GNU à compléter" + +#~ msgid "Old style long option to complete" +#~ msgstr "Vieux type d'option longue à compléter" + +#~ msgid "Do not use file completion" +#~ msgstr "Ne pas utiliser la complétion de fichier" + +#~ msgid "Require parameter" +#~ msgstr "Requiert un paramètre" + +#~ msgid "Require parameter and do not use file completion" +#~ msgstr "Requiert un paramètre et ne pas utiliser la complétion de fichier" + +#~ msgid "A list of possible arguments" +#~ msgstr "Une liste d'arguments possibles" + +#~ msgid "Description of this completions" +#~ msgstr "Description de cette complétion" + +#~ msgid "Option list is not complete" +#~ msgstr "Liste d'options incomplète" + +#~ msgid "Remove completion" +#~ msgstr "Enlever la complétion" + +#~ msgid "" +#~ "The completion should only be used if the specified command has a zero " +#~ "exit status" +#~ msgstr "" +#~ "La complétion devrait seulement être utilisée si la commande spécifiée a " +#~ "un état de sortie de zéro" + +#~ msgid "Architecture-independent install directory" +#~ msgstr "" +#~ "Répertoire d'installation des fichiers indépendants de l'architecture" + +#~ msgid "Architecture-dependent install directory" +#~ msgstr "" +#~ "Répertoire d'installation des fichiers dépendants de l'architectures" + +#~ msgid "Select output delimiter" +#~ msgstr "Choisir le délimiteur de sortie" + +#~ msgid "Kerberos server mode" +#~ msgstr "Mode serveur Kerberos" + +#~ msgid "Prompt for password for authenticating server" +#~ msgstr "Demander le mot de passe pour l'authentification" + +#~ msgid "Show last revision where each line of module was modified" +#~ msgstr "" +#~ "Afficher la dernière révision où chaque ligne de module a été modifiée" + +#~ msgid "Indicate that a Module is no longer in use" +#~ msgstr "Indiquer qu'un module n'est plus utilisé" + +#~ msgid "Add a symbolic tag to a module" +#~ msgstr "Ajouter une étiquette symbolique à un module" + +#~ msgid "Add a symbolic tag to checked out version of files" +#~ msgstr "Ajouter une étiquette symbolique aux fichiers extraits" + +#~ msgid "Bring work tree in sync with repository" +#~ msgstr "Synchroniser le répertoire de travail avec le référentiel" + +#~ msgid "Set watches" +#~ msgstr "Surveiller des fichiers" + +#~ msgid "Authenticate all net traffic" +#~ msgstr "Authentifier tout le trafic réseau" + +#~ msgid "Do not use the ~/.cvsrc file" +#~ msgstr "ne pas utiliser ~/.cvsrc" + +#~ msgid "Do not change any files" +#~ msgstr "Ne pas modifier aucun fichier" + +#~ msgid "Cause CVS to be really quiet" +#~ msgstr "Forcer le plus grand silence" + +#~ msgid "Cause CVS to be somewhat quiet" +#~ msgstr "Forcer un certain silence" + +#~ msgid "Make checked-out files read-only" +#~ msgstr "Mettre les fichiers extraits en lecture seule" + +#~ msgid "Make checked-out files read-write (default)" +#~ msgstr "Mettre en lecture-écriture les fichiers extraits (défaut)" + +#~ msgid "Encrypt all net traffic" +#~ msgstr "Encrypter tout le trafic réseau" + +#~ msgid "Use the most recent revision no later than date" +#~ msgstr "Utiliser la plus récente version en date spécifiée" + +#~ msgid "Retrieve files even when no match for tag/date" +#~ msgstr "Extraire les fichiers même si la date/étiquette ne concorde pas" + +#~ msgid "Alter default keyword processing" +#~ msgstr "Altérer le traitement des mots-clés par défaut" + +#~ msgid "Specify log message instead of invoking editor" +#~ msgstr "Spécifier le message de journal au lieu d'invoquer l'éditeur" + +#~ msgid "Prune empty directories" +#~ msgstr "Effacer les répertoires vides" + +#~ msgid "Specify filenames to be filtered" +#~ msgstr "Spécifier les noms de fichier à filtrer" + +#~ msgid "Make a name/rev association" +#~ msgstr "Faire une association nom/rev" + +#~ msgid "Run quietly" +#~ msgstr "Exécution en silence" + +#~ msgid "Set a state attribute for a revision" +#~ msgstr "Définir un attribut d'état pour une révision" + +#~ msgid "Unlock a revision" +#~ msgstr "Déverrouiller une révision" + +#~ msgid "Annotate binary files" +#~ msgstr "Annoter un fichier binaire" + +#~ msgid "Copy module file to stdout" +#~ msgstr "Copier le fichier module vers stdout" + +#~ msgid "For -d. Don't shorten paths" +#~ msgstr "Pour -d. Ne pas réduire les chemins" + +#~ msgid "Treat all whitespace as one space" +#~ msgstr "Traiter tous les blancs comme un seul espace" + +#~ msgid "Ignore blank line only changes" +#~ msgstr "Ignorer les changements de lignes blanches" + +#~ msgid "Report only whether files differ" +#~ msgstr "Rapporter seulement si les fichiers diffèrent" + +#~ msgid "Use context format" +#~ msgstr "Utiliser le format du contexte" + +#~ msgid "Set context size" +#~ msgstr "Définir la taille du contexte" + +#~ msgid "Make output a valid ed script" +#~ msgstr "Faire de la sortie un script ed valide" + +#~ msgid "Expand tabs to spaces" +#~ msgstr "Remplacer les tabs par des espaces" + +#~ msgid "Output that looks like an ed script" +#~ msgstr "Sortie qui ressemble à un script ed" + +#~ msgid "Speed handling of large files with small changes" +#~ msgstr "Traitement rapide des gros fichiers avec de petits changements" + +#~ msgid "Ignore changes in case" +#~ msgstr "Ignorer les changements de casse" + +#~ msgid "Ignore whitespace" +#~ msgstr "Ignorer les blancs" + +#~ msgid "Use label instead of filename in output" +#~ msgstr "Utiliser l'étiquette au lieu du nom de fichier pour la sortie" + +#~ msgid "Print only left column" +#~ msgstr "Afficher seulement la colonne de gauche" + +#~ msgid "Treat files absent from one dir as empty" +#~ msgstr "Traiter les fichiers absents d'un rép. comme vides" + +#~ msgid "Identify the C function each change is in" +#~ msgstr "Identifier la fonction C contenant chaque changement" + +#~ msgid "Use side-by-side format" +#~ msgstr "Utiliser le format côte-à-côte" + +#~ msgid "Suppress common lines in side-by-side" +#~ msgstr "Supprimer les lignes communes dans le côte-à-côte" + +#~ msgid "Use unified format" +#~ msgstr "Utiliser le format unifié" + +#~ msgid "Set context size in unified" +#~ msgstr "Définir la taille du contexte du format unifié" + +#~ msgid "Set column width for side-by-side format" +#~ msgstr "Définir la largeur des colonnes pour le côte-à-côte" + +#~ msgid "Report on everything" +#~ msgstr "Tout rapporter" + +#~ msgid "Report on a module" +#~ msgstr "Rapporter un module" + +#~ msgid "Report on checked-out modules" +#~ msgstr "Rapporter les modules extraits" + +#~ msgid "Report on all tags" +#~ msgstr "Rapporter les étiquettes" + +#~ msgid "Show history for all users" +#~ msgstr "Afficher l'historique de tous les utilisateurs" + +#~ msgid "Show only records for this directory" +#~ msgstr "Afficher seulement les enregistrements pour ce répertoire" + +#~ msgid "Multiple vendor branch" +#~ msgstr "Branche à vendeur multiple" + +#~ msgid "Files to ignore during import" +#~ msgstr "Fichier à ignorer durant l'import" diff --git a/po/sv.po b/po/sv.po index 045c32b55..81a100354 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,107 +7,128 @@ msgid "" msgstr "" "Project-Id-Version: fish 1.22.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-10-27 11:34+0200\n" +"POT-Creation-Date: 2014-03-13 21:29+0800\n" "PO-Revision-Date: 2006-03-13 18:06+0100\n" "Last-Translator: Axel Liljencrantz \n" "Language-Team: Swedish \n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin.c:83 +#: autoload.cpp:113 +#, c-format +msgid "Could not autoload item '%ls', it is already being autoloaded. " +msgstr "Kunde inte automatiskt ladda elementet â€%lsâ€, det autoladdas redan. " + +#: builtin.cpp:83 #, c-format msgid "Send job %d, '%ls' to foreground\n" msgstr "Skicka job %d, â€%ls†till förgrunden\n" -#: builtin.c:352 +#: builtin.cpp:344 #, c-format -msgid "%ls: Type 'help %ls' for related documentation\n" +msgid "" +"%ls: Type 'help %ls' for related documentation\n" "\n" -msgstr "%ls: Skriv 'help %ls' för relaterad dokumnetation\n" +msgstr "" +"%ls: Skriv 'help %ls' för relaterad dokumnetation\n" "\n" -#: builtin.c:498 +#: builtin.cpp:484 #, c-format msgid "%ls: No key with name '%ls' found\n" msgstr "%ls: Ingen tangent med namn â€%ls†kunde hittas\n" -#: builtin.c:504 +#: builtin.cpp:490 #, c-format msgid "%ls: Key with name '%ls' does not have any mapping\n" msgstr "%ls: Tangent mad namn “%ls“ har ingen mappning\n" -#: builtin.c:510 +#: builtin.cpp:496 #, c-format -msgid "%ls: Unknown error trying to bind to key named '%ls'\n" -msgstr "%ls: Okänt fel inträffade vid försök att binda till tangen med namn â€%lsâ€\n" +msgid "%ls: Unknown error trying to bind to key named '%ls'\n" +msgstr "" +"%ls: Okänt fel inträffade vid försök att binda till tangen med namn â€%lsâ€\n" -#: builtin.c:701 -#, c-format -msgid "%ls: Expected zero or two parameters, got %d" +#: builtin.cpp:668 +#, fuzzy, c-format +msgid "%ls: Expected zero or two parameters, got %d\n" msgstr "%ls: Förväntade noll eller tvÃ¥ argument, fick %d" -#: builtin.c:725 +#: builtin.cpp:692 #, c-format msgid "%ls: Invalid state\n" msgstr "%ls: Ogiltigt tillstÃ¥nd\n" -#: builtin.c:830 +#: builtin.cpp:796 #, c-format msgid "%ls: Can not specify scope when removing block\n" msgstr "%ls: Kan inte ange definitionsomrÃ¥de vid blockradering\n" -#: builtin.c:836 +#: builtin.cpp:802 #, c-format msgid "%ls: No blocks defined\n" msgstr "%ls: Inga block definerade\n" -#: builtin.c:1328 builtin.h:29 +#: builtin.cpp:1312 builtin.h:32 #, c-format msgid "%ls: Invalid combination of options\n" msgstr "%ls: Ogiltig kombination av flaggor\n" -#: builtin.c:1350 +#: builtin.cpp:1334 #, c-format msgid "%ls: Expected exactly one function name\n" msgstr "%ls: Förväntade exakt ett funktionsnamn\n" -#: builtin.c:1360 +#: builtin.cpp:1344 builtin.cpp:1406 #, c-format msgid "%ls: Function '%ls' does not exist\n" msgstr "%ls: Funktionen â€%ls†existerar inte\n" -#: builtin.c:1534 -#, c-format -msgid "%ls: Unknown signal '%ls'\n" -msgstr "%ls: Okänd signal â€%lsâ€\n" +#: builtin.cpp:1394 +#, fuzzy, c-format +msgid "" +"%ls: Expected exactly two names (current function name, and new function " +"name)\n" +msgstr "%ls: Förväntade exakt ett funktionsnamn\n" -#: builtin.c:1558 builtin.c:1728 -#, c-format -msgid "%ls: Invalid variable name '%ls'\n" -msgstr "%ls: Ogiltigt variabelnamn â€%lsâ€\n" - -#: builtin.c:1624 -#, c-format -msgid "%ls: Cannot find calling job for event handler\n" -msgstr "%ls: Kan inte hitta anropande job för händelsehanterare\n" - -#: builtin.c:1642 -#, c-format -msgid "%ls: Invalid process id %ls\n" -msgstr "%ls: Ogiltigt processid %ls\n" - -#: builtin.c:1693 -#, c-format -msgid "%ls: Expected function name\n" -msgstr "%ls: Förväntade ett funktionsnamn\n" - -#: builtin.c:1700 +#: builtin.cpp:1417 builtin.cpp:1952 builtin.cpp:2259 #, c-format msgid "%ls: Illegal function name '%ls'\n" msgstr "%ls: Ogiltigt funktionsnamn â€%lsâ€\n" -#: builtin.c:1710 +#: builtin.cpp:1428 +#, fuzzy, c-format +msgid "%ls: Function '%ls' already exists. Cannot create copy '%ls'\n" +msgstr "%ls: Funktionen â€%ls†existerar inte\n" + +#: builtin.cpp:1809 builtin.cpp:2114 +#, c-format +msgid "%ls: Unknown signal '%ls'\n" +msgstr "%ls: Okänd signal â€%lsâ€\n" + +#: builtin.cpp:1824 builtin.cpp:1984 builtin.cpp:2129 builtin.cpp:2291 +#, c-format +msgid "%ls: Invalid variable name '%ls'\n" +msgstr "%ls: Ogiltigt variabelnamn â€%lsâ€\n" + +#: builtin.cpp:1877 builtin.cpp:2182 +#, c-format +msgid "%ls: Cannot find calling job for event handler\n" +msgstr "%ls: Kan inte hitta anropande job för händelsehanterare\n" + +#: builtin.cpp:1895 builtin.cpp:2200 +#, c-format +msgid "%ls: Invalid process id %ls\n" +msgstr "%ls: Ogiltigt processid %ls\n" + +#: builtin.cpp:1945 builtin.cpp:2252 +#, c-format +msgid "%ls: Expected function name\n" +msgstr "%ls: Förväntade ett funktionsnamn\n" + +#: builtin.cpp:1962 builtin.cpp:2269 #, c-format msgid "" "%ls: The name '%ls' is reserved,\n" @@ -116,135 +137,140 @@ msgstr "" "%ls: Namnet â€%ls†är reserverat,\n" " och kan inte användas som funktionsnamn\n" -#: builtin.c:1741 +#: builtin.cpp:1970 builtin.cpp:2277 builtin.cpp:3824 +#, fuzzy, c-format +msgid "%ls: No function name given\n" +msgstr "%ls: Förväntade ett funktionsnamn\n" + +#: builtin.cpp:1997 builtin.cpp:2304 #, c-format msgid "%ls: Expected one argument, got %d\n" msgstr "%ls: Förväntade ett argument, fick %d\n" -#: builtin.c:1757 +#: builtin.cpp:2319 msgid "Current functions are: " msgstr "Nuvarande funktioner är: " -#: builtin.c:1901 +#: builtin.cpp:2459 #, c-format msgid "%ls: Seed value '%ls' is not a valid number\n" msgstr "%ls: Slumpfrö â€%ls†är inte ett giltigt nummer\n" -#: builtin.c:1915 +#: builtin.cpp:2473 #, c-format msgid "%ls: Expected zero or one argument, got %d\n" msgstr "%ls: Förväntade noll eller ett argument, fick %d\n" -#: builtin.c:2421 main.c:389 parser.c:1208 +#: builtin.cpp:2981 fish.cpp:518 parser.cpp:1095 msgid "Standard input" msgstr "Standard in" -#: builtin.c:2464 +#: builtin.cpp:3024 msgid "This is a login shell\n" msgstr "Detta är ett login-skal\n" -#: builtin.c:2466 +#: builtin.cpp:3026 msgid "This is not a login shell\n" msgstr "Detta är inte ett login-skal\n" -#: builtin.c:2468 +#: builtin.cpp:3028 #, c-format msgid "Job control: %ls\n" msgstr "Jobkontroll: %ls\n" -#: builtin.c:2469 +#: builtin.cpp:3029 msgid "Only on interactive jobs" msgstr "Bara för interaktiva jobb" -#: builtin.c:2470 +#: builtin.cpp:3030 msgid "Never" msgstr "Aldrig" -#: builtin.c:2470 +#: builtin.cpp:3030 msgid "Always" msgstr "Alltid" -#: builtin.c:2506 builtin.c:3443 +#: builtin.cpp:3066 builtin.cpp:3995 #, c-format msgid "%ls: Argument '%ls' must be an integer\n" msgstr "%ls: Argumentet â€%ls†mÃ¥ste vara ett heltal\n" -#: builtin.c:2566 +#: builtin.cpp:3108 #, c-format msgid "%ls: Could not find home directory\n" msgstr "%ls: Kunde inte hitta hemkatalogen\n" -#: builtin.c:2580 builtin.c:2636 +#: builtin.cpp:3128 builtin.cpp:3182 #, c-format msgid "%ls: '%ls' is not a directory\n" msgstr "%ls: â€%ls†är inte en katalog\n" -#: builtin.c:2587 +#: builtin.cpp:3135 #, c-format msgid "%ls: The directory '%ls' does not exist\n" msgstr "%ls: Katalogen â€%ls†existerar inte\n" -#: builtin.c:2594 +#: builtin.cpp:3142 #, c-format msgid "%ls: '%ls' is a rotten symlink\n" msgstr "%ls: â€%ls†är en rutten symbolisk länk\n" -#: builtin.c:2602 +#: builtin.cpp:3150 #, c-format msgid "%ls: Unknown error trying to locate directory '%ls'\n" msgstr "%ls: Okänd fel inträffade under lokalisering av katalogen â€%lsâ€\n" -#: builtin.c:2627 +#: builtin.cpp:3173 #, c-format -msgid "%ls: Permission denied: '%ls'\n" +msgid "%ls: Permission denied: '%ls'\n" msgstr "%ls: Ã…tkomst nekad till katalogen â€%lsâ€\n" -#: builtin.c:2653 +#: builtin.cpp:3197 #, c-format msgid "%ls: Could not set PWD variable\n" msgstr "%ls: Kunde inte sätta variableln PWD\n" -#: builtin.c:2739 +#: builtin.cpp:3284 #, c-format msgid "%ls: Key not specified\n" msgstr "%ls: Ingen nyckel angiven\n" -#: builtin.c:2784 builtin.c:2798 +#: builtin.cpp:3328 builtin.cpp:3336 #, c-format msgid "%ls: Error encountered while sourcing file '%ls':\n" msgstr "%ls: Ett fel uppstod medan filen â€%ls†lästes\n" -#: builtin.c:2792 +#: builtin.cpp:3344 #, c-format msgid "%ls: '%ls' is not a file\n" msgstr "%ls: â€%ls†är inte en fil\n" -#: builtin.c:2831 +#: builtin.cpp:3363 #, c-format msgid "%ls: Error while reading file '%ls'\n" msgstr "%ls: Ett fel uppstod medan filen â€%ls†lästes\n" -#: builtin.c:2903 builtin.c:3083 +#: builtin.cpp:3419 builtin.cpp:3599 #, c-format msgid "%ls: There are no suitable jobs\n" msgstr "%ls: Det finns inga lämpliga jobb\n" -#: builtin.c:2932 +#: builtin.cpp:3448 #, c-format msgid "%ls: Ambiguous job\n" msgstr "%ls: Mer än ett jobb matchar\n" -#: builtin.c:2938 builtin.c:3106 builtin_jobs.c:301 +#: builtin.cpp:3454 builtin.cpp:3622 builtin_jobs.cpp:301 #, c-format msgid "%ls: '%ls' is not a job\n" msgstr "%ls: â€%ls†är inte ett jobb\n" -#: builtin.c:2969 builtin_jobs.c:316 +#: builtin.cpp:3485 builtin_jobs.cpp:316 #, c-format msgid "%ls: No suitable job: %d\n" msgstr "%ls: Inget passande jobb: %d\n" -#: builtin.c:2978 +#: builtin.cpp:3494 #, c-format msgid "" "%ls: Can't put job %d, '%ls' to foreground because it is not under job " @@ -253,12 +279,12 @@ msgstr "" "Kan inte skicka jobb %d, â€%ls†till förgrunden eftersom det inte anväder " "jobbkontroll\n" -#: builtin.c:3032 +#: builtin.cpp:3547 #, c-format msgid "%ls: Unknown job '%ls'\n" msgstr "%ls: Okänt jobb â€%lsâ€\n" -#: builtin.c:3041 +#: builtin.cpp:3556 #, c-format msgid "" "%ls: Can't put job %d, '%ls' to background because it is not under job " @@ -267,429 +293,1596 @@ msgstr "" "Kan inte skicka jobb %d, â€%ls†till bakgrunden eftersom det inte anväder " "jobbkontrol\n" -#: builtin.c:3051 +#: builtin.cpp:3566 #, c-format msgid "Send job %d '%ls' to background\n" msgstr "Skicka jobb %d â€%ls†till bakgrunden\n" -#: builtin.c:3089 +#: builtin.cpp:3605 msgid "(default)" msgstr "(standard)" -#: builtin.c:3218 +#: builtin.cpp:3737 #, c-format msgid "%ls: Not inside of block\n" msgstr "%ls: Inte i ett block\n" -#: builtin.c:3308 -#, c-format -msgid "%ls: Missing function definition information." -msgstr "%ls: Funktionsdefinition saknas." - -#: builtin.c:3339 +#: builtin.cpp:3884 #, c-format msgid "%ls: Not inside of 'if' block\n" msgstr "%ls: Inte i ett â€if†block\n" -#: builtin.c:3391 +#: builtin.cpp:3938 #, c-format msgid "%ls: Not inside of loop\n" msgstr "%ls: Inte i en loop\n" -#: builtin.c:3453 builtin_complete.c:601 builtin.h:76 +#: builtin.cpp:4005 builtin_complete.cpp:539 builtin_set_color.cpp:140 +#: builtin.h:83 #, c-format msgid "%ls: Too many arguments\n" msgstr "%ls: För mÃ¥nga argument\n" -#: builtin.c:3469 +#: builtin.cpp:4023 #, c-format msgid "%ls: Not inside of function\n" msgstr "%ls: Inte i en funktion\n" -#: builtin.c:3499 +#: builtin.cpp:4059 #, c-format msgid "%ls: Expected exactly one argument, got %d\n" msgstr "%ls: Förväntade exakt ett argument, fick %d\n" -#: builtin.c:3531 +#: builtin.cpp:4090 #, c-format msgid "%ls: 'case' command while not in switch block\n" msgstr "%ls: â€case†kommandot kan bara användas i ett â€switchâ€-block\n" -#: builtin.c:3575 -msgid "Temporarily block delivery of events" -msgstr "Blockera tillfälligt leverans av händelser" +#: builtin.cpp:4317 builtin.cpp:4360 +#, fuzzy +msgid "Test a condition" +msgstr "Välj en konfigurationsinställning" -#: builtin.c:3579 -msgid "Run a builtin command instead of a function" -msgstr "Utför ett inbyggt kommando istället för en funktion" +#: builtin.cpp:4318 +msgid "Try out the new parser" +msgstr "" -#: builtin.c:3583 -msgid "Change working directory" -msgstr "Ändra arbetskatalog" - -#: builtin.c:3587 -msgid "Count the number of arguments" -msgstr "Räkna antalet argument" - -#: builtin.c:3591 -msgid "Search for a specified string in a list" -msgstr "Sök efter en angiven sträng i en lista" - -#: builtin.c:3595 -msgid "Emit an event" -msgstr "Sänd en händelse" - -#: builtin.c:3599 -msgid "Exit the shell" -msgstr "Avsluta fish" - -#: builtin.c:3603 -msgid "Define a new function" -msgstr "Definera ny funktion" - -#: builtin.c:3607 -msgid "List or remove functions" -msgstr "Visa eller ta bort funktioner" - -#: builtin.c:3611 -msgid "Edit command specific completions" -msgstr "Redigera kommando-specifika kompletteringar" - -#: builtin.c:3615 -msgid "End a block of commands" -msgstr "Avsluta ett block av kommandon" - -#: builtin.c:3619 -msgid "Evaluate block if condition is false" -msgstr "Utför block om ett villkor inte är uppfyllt" - -#: builtin.c:3623 -msgid "Perform a set of commands multiple times" -msgstr "Utför ett block flera gÃ¥nger" - -#: builtin.c:3627 -msgid "Evaluate contents of file" -msgstr "Utför filinnehÃ¥ll som kommandon" - -#: builtin.c:3631 -msgid "Handle environment variables" -msgstr "Redigera miljövariabler" - -#: builtin.c:3635 -msgid "Send job to foreground" -msgstr "Skick jobb till förgrunden" - -#: builtin.c:3639 -msgid "Send job to background" -msgstr "Skicka jobb till bakgrunden" - -#: builtin.c:3643 -msgid "Print currently running jobs" -msgstr "Visa nuvarande jobb" - -#: builtin.c:3647 -msgid "Read a line of input into variables" -msgstr "Läs in en rad till variabler" - -#: builtin.c:3651 -msgid "Stop the innermost loop" -msgstr "Avbryt den innersta loopen" - -#: builtin.c:3655 -msgid "Skip the rest of the current lap of the innermost loop" -msgstr "Avbryt nuvarande varv i den innersta loopen" - -#: builtin.c:3659 -msgid "Stop the currently evaluated function" -msgstr "Avbryt den nuvarande funktionen" - -#: builtin.c:3663 -msgid "Set or get the commandline" -msgstr "Ändra eller visa kommandoraden" - -#: builtin.c:3667 builtin.c:3671 -msgid "Conditionally execute a block of commands" -msgstr "Utför ett kommando om ett villkor är uppfyllt" - -#: builtin.c:3675 -msgid "Handle fish key bindings" -msgstr "Hantera tangentbordsgenvägar för fish" - -#: builtin.c:3679 -msgid "Generate random number" -msgstr "Generera ett slumptal" - -#: builtin.c:3683 -msgid "Return status information about fish" -msgstr "Visa statusinformation om fish" - -#: builtin.c:3687 -msgid "Set or get the shells resource usage limits" -msgstr "Redigera eller visa skalets resursanvändningsgränser" - -#: builtin.c:3691 -msgid "Create a block of code" -msgstr "Skapa ett kodblock" - -#: builtin.c:3695 -msgid "Temporarily halt execution of a script and launch an interactive debug prompt" -msgstr "Avbryt exekvering tillfälligt och starta en interaktiv debugprompt" - -#: builtin.c:3705 -msgid "Run a program instead of a function or builtin" -msgstr "Kör ett program istället för en funktion eller ett inbuggt kommando" - -#: builtin.c:3709 -msgid "Evaluate block if condition is true" -msgstr "Utför ett block om ett villkor är uppfyllt" - -#: builtin.c:3713 -msgid "Perform a command multiple times" -msgstr "Utför ett kommando upprepade gÃ¥nger" - -#: builtin.c:3717 -msgid "Negate exit status of job" -msgstr "Negera resultatet av ett kommando" - -#: builtin.c:3721 +#: builtin.cpp:4319 msgid "Execute command if previous command suceeded" msgstr "Utför kommando om föregÃ¥ende kommando lyckades" -#: builtin.c:3725 -msgid "Execute command if previous command failed" -msgstr "Utför kommando om föregÃ¥ende kommando misslyckades" +#: builtin.cpp:4320 +msgid "Create a block of code" +msgstr "Skapa ett kodblock" -#: builtin.c:3729 +#: builtin.cpp:4321 +msgid "Send job to background" +msgstr "Skicka jobb till bakgrunden" + +#: builtin.cpp:4322 +msgid "Handle fish key bindings" +msgstr "Hantera tangentbordsgenvägar för fish" + +#: builtin.cpp:4323 +msgid "Temporarily block delivery of events" +msgstr "Blockera tillfälligt leverans av händelser" + +#: builtin.cpp:4324 +msgid "Stop the innermost loop" +msgstr "Avbryt den innersta loopen" + +#: builtin.cpp:4325 +msgid "" +"Temporarily halt execution of a script and launch an interactive debug prompt" +msgstr "Avbryt exekvering tillfälligt och starta en interaktiv debugprompt" + +#: builtin.cpp:4326 +msgid "Run a builtin command instead of a function" +msgstr "Utför ett inbyggt kommando istället för en funktion" + +#: builtin.cpp:4327 builtin.cpp:4359 +msgid "Conditionally execute a block of commands" +msgstr "Utför ett kommando om ett villkor är uppfyllt" + +#: builtin.cpp:4328 +msgid "Change working directory" +msgstr "Ändra arbetskatalog" + +#: builtin.cpp:4329 +msgid "Run a program instead of a function or builtin" +msgstr "Kör ett program istället för en funktion eller ett inbuggt kommando" + +#: builtin.cpp:4330 +msgid "Set or get the commandline" +msgstr "Ändra eller visa kommandoraden" + +#: builtin.cpp:4331 +msgid "Edit command specific completions" +msgstr "Redigera kommando-specifika kompletteringar" + +#: builtin.cpp:4332 +msgid "Search for a specified string in a list" +msgstr "Sök efter en angiven sträng i en lista" + +#: builtin.cpp:4333 +msgid "Skip the rest of the current lap of the innermost loop" +msgstr "Avbryt nuvarande varv i den innersta loopen" + +#: builtin.cpp:4334 +msgid "Count the number of arguments" +msgstr "Räkna antalet argument" + +#: builtin.cpp:4335 +#, fuzzy +msgid "Print arguments" +msgstr "Visa antal ord" + +#: builtin.cpp:4336 +msgid "Evaluate block if condition is false" +msgstr "Utför block om ett villkor inte är uppfyllt" + +#: builtin.cpp:4337 +msgid "Emit an event" +msgstr "Sänd en händelse" + +#: builtin.cpp:4338 +msgid "End a block of commands" +msgstr "Avsluta ett block av kommandon" + +#: builtin.cpp:4339 msgid "Run command in current process" msgstr "Kör ett kommando i den nuvarande processen" -#: builtin.c:3817 parser.c:63 +#: builtin.cpp:4340 +msgid "Exit the shell" +msgstr "Avsluta fish" + +#: builtin.cpp:4341 +msgid "Send job to foreground" +msgstr "Skick jobb till förgrunden" + +#: builtin.cpp:4342 +msgid "Perform a set of commands multiple times" +msgstr "Utför ett block flera gÃ¥nger" + +#: builtin.cpp:4343 +msgid "Define a new function" +msgstr "Definera ny funktion" + +#: builtin.cpp:4344 +msgid "List or remove functions" +msgstr "Visa eller ta bort funktioner" + +#: builtin.cpp:4345 +msgid "History of commands executed by user" +msgstr "" + +#: builtin.cpp:4346 +msgid "Evaluate block if condition is true" +msgstr "Utför ett block om ett villkor är uppfyllt" + +#: builtin.cpp:4347 +msgid "Print currently running jobs" +msgstr "Visa nuvarande jobb" + +#: builtin.cpp:4348 +msgid "Negate exit status of job" +msgstr "Negera resultatet av ett kommando" + +#: builtin.cpp:4349 +msgid "Execute command if previous command failed" +msgstr "Utför kommando om föregÃ¥ende kommando misslyckades" + +#: builtin.cpp:4350 +#, fuzzy +msgid "Prints formatted text" +msgstr "Visa informativa meddelanden" + +#: builtin.cpp:4351 +#, fuzzy +msgid "Print the working directory" +msgstr "Visa nuvarande katalog" + +#: builtin.cpp:4352 +msgid "Generate random number" +msgstr "Generera ett slumptal" + +#: builtin.cpp:4353 +msgid "Read a line of input into variables" +msgstr "Läs in en rad till variabler" + +#: builtin.cpp:4354 +msgid "Stop the currently evaluated function" +msgstr "Avbryt den nuvarande funktionen" + +#: builtin.cpp:4355 +msgid "Handle environment variables" +msgstr "Redigera miljövariabler" + +#: builtin.cpp:4356 +#, fuzzy +msgid "Set the terminal color" +msgstr "Sätt maximal fuzzfaktor" + +#: builtin.cpp:4357 +msgid "Evaluate contents of file" +msgstr "Utför filinnehÃ¥ll som kommandon" + +#: builtin.cpp:4358 +msgid "Return status information about fish" +msgstr "Visa statusinformation om fish" + +#: builtin.cpp:4361 +msgid "Set or get the shells resource usage limits" +msgstr "Redigera eller visa skalets resursanvändningsgränser" + +#: builtin.cpp:4362 +msgid "Perform a command multiple times" +msgstr "Utför ett kommando upprepade gÃ¥nger" + +#: builtin.cpp:4442 parser.cpp:53 #, c-format msgid "Unknown builtin '%ls'" msgstr "Okänt inbyggt kommando â€%lsâ€" -#: builtin_commandline.c:464 +#: builtin_commandline.cpp:411 #, c-format msgid "%ls: Unknown input function '%ls'\n" msgstr "%ls: Okänd inläsnings-function â€%lsâ€\n" -#: builtin_complete.c:313 -#, c-format -msgid "%ls: Command only available in interactive sessions" -msgstr "%ls: Kommandot finns bara tillgängligt under interaktiva sessioner" - -#: builtin_jobs.c:87 +#: builtin_jobs.cpp:87 msgid "Job\tGroup\t" msgstr "Jobb\tGrupp\t" -#: builtin_jobs.c:89 +#: builtin_jobs.cpp:89 msgid "CPU\t" msgstr "CPU\t" -#: builtin_jobs.c:91 +#: builtin_jobs.cpp:91 msgid "State\tCommand\n" msgstr "Status\tKommando\n" -#: builtin_jobs.c:100 proc.c:661 +#: builtin_jobs.cpp:99 proc.cpp:751 msgid "stopped" msgstr "stannat" -#: builtin_jobs.c:100 +#: builtin_jobs.cpp:99 msgid "running" msgstr "kör" -#: builtin_jobs.c:115 +#: builtin_jobs.cpp:113 msgid "Group\n" msgstr "Grupp\n" -#: builtin_jobs.c:128 -msgid "Procces\n" -msgstr "Process\n" +#: builtin_jobs.cpp:126 +#, fuzzy +msgid "Process\n" +msgstr "Process" -#: builtin_jobs.c:145 +#: builtin_jobs.cpp:143 msgid "Command\n" msgstr "Kommando\n" -#: builtin_jobs.c:342 +#: builtin_jobs.cpp:344 #, c-format msgid "%ls: There are no jobs\n" msgstr "%ls: Det finns inga jobb\n" -#: builtin_set.c:158 +#: builtin_printf.cpp:175 +#, c-format +msgid "" +"warning: %ls: character(s) following character constant have been ignored" +msgstr "" + +#: builtin_printf.cpp:256 +#, fuzzy, c-format +msgid "%ls: expected a numeric value" +msgstr "%s: Förväntade argument\n" + +#: builtin_printf.cpp:258 +#, c-format +msgid "%ls: value not completely converted" +msgstr "" + +#: builtin_printf.cpp:359 +msgid "missing hexadecimal number in escape" +msgstr "" + +#: builtin_printf.cpp:387 +msgid "Missing hexadecimal number in Unicode escape" +msgstr "" + +#: builtin_printf.cpp:401 +#, c-format +msgid "Unicode character out of range: \\%c%0*x" +msgstr "" + +#: builtin_printf.cpp:668 +#, c-format +msgid "invalid field width: %ls" +msgstr "" + +#: builtin_printf.cpp:706 +#, fuzzy, c-format +msgid "invalid precision: %ls" +msgstr "%ls: Ogiltigt processid %ls\n" + +#: builtin_printf.cpp:737 +#, fuzzy, c-format +msgid "%.*ls: invalid conversion specification" +msgstr "%ls: Ogiltig kombination av flaggor\n" + +#: builtin_printf.cpp:769 +msgid "printf: not enough arguments" +msgstr "" + +#: builtin_set.cpp:155 #, c-format msgid "%ls: Tried to change the read-only variable '%ls'\n" msgstr "%ls: Försökte ändra den skrivskyddade variablen â€%lsâ€\n" -#: builtin_set.c:165 +#: builtin_set.cpp:162 #, c-format msgid "%ls: Unknown error" msgstr "%ls: Okänt fel" -#: builtin_set.c:217 +#: builtin_set.cpp:214 #, c-format msgid "%ls: Multiple variable names specified in single call (%ls and %.*ls)\n" msgstr "%ls: Flera variabelnamn angivna i ett anrop (%ls och %.*ls)\n" -#: builtin_set.c:244 +#: builtin_set.cpp:241 #, c-format msgid "%ls: Invalid index starting at '%ls'\n" msgstr "%ls: Ogiltigt index vid â€%lsâ€\n" -#: builtin_set.c:689 -#, c-format -msgid "" -"%ls: Erase needs a variable name\n" -"%ls\n" +#: builtin_set.cpp:640 +#, fuzzy, c-format +msgid "%ls: Erase needs a variable name\n" msgstr "" "%ls: Radering kräver ett variabelnamn\n" "%ls\n" -#: builtin_set.c:733 +#: builtin_set.cpp:684 #, c-format msgid "%ls: Can not specify scope when erasing array slice\n" msgstr "%ls: Kan inte ange definitionsomrÃ¥de vid radering av arraydel\n" -#: builtin_set.c:847 +#: builtin_set.cpp:783 #, c-format -msgid "%ls: Values cannot be specfied with erase\n" +msgid "%ls: Values cannot be specfied with erase\n" msgstr "%ls: Värden kan inte anges vid radering\n" -#: common.c:1756 -msgid "This is a bug. " -msgstr "Detta är en bug. " +#: builtin_set_color.cpp:149 +#, fuzzy, c-format +msgid "%ls: Expected an argument\n" +msgstr "%s: Förväntade argument\n" -#: complete.c:61 -#, c-format -msgid "Home for %s" +#: builtin_set_color.cpp:157 builtin_set_color.cpp:164 +#, fuzzy, c-format +msgid "%ls: Unknown color '%ls'\n" +msgstr "%s: Okänd färg â€%sâ€\n" + +#: builtin_set_color.cpp:171 +#, fuzzy, c-format +msgid "%ls: Could not set up terminal\n" +msgstr "Kunde inte initiera terminalen" + +#: common.cpp:1882 +msgid "This is a bug. Break on bugreport to debug." +msgstr "" + +#: common.cpp:1901 +msgid "empty" +msgstr "tom" + +#: complete.cpp:61 +#, fuzzy, c-format +msgid "Home for %ls" msgstr "Hemkatalog för %s" -#: complete.c:66 +#: complete.cpp:66 #, c-format msgid "Variable: %ls" msgstr "Variabel: %ls" -#: complete.c:808 complete.c:826 +#: complete.cpp:907 complete.cpp:925 msgid "Unknown option: " msgstr "Okänd flagga: " -#: complete.c:831 +#: complete.cpp:929 msgid "Multiple matches for option: " msgstr "Mer än en flagga matchar: " -#: env.c:238 +#: env.cpp:251 msgid "Could not get user information" msgstr "Kunde inte hitta information om användare" -#: env.c:340 env.c:344 +#: env.cpp:362 msgid "Changing language to English" msgstr "Byter sprÃ¥k till svenska" -#: env.c:1309 +#: env.cpp:1252 msgid "Tried to pop empty environment stack." msgstr "Försökte ta bort element frÃ¥n tom variabelstack" -#: env_universal_common.c:510 +#: env_universal_common.cpp:529 #, c-format msgid "Could not convert message '%s' to wide character string" msgstr "Kunde inte konvertera meddelandet â€%s†till en bred teckensträng" -#: event.c:225 +#: event.cpp:168 #, c-format msgid "signal handler for %ls (%ls)" msgstr "signalhanterare för %ls (%ls)" -#: event.c:229 +#: event.cpp:172 #, c-format msgid "handler for variable '%ls'" msgstr "hanterare för variabel â€%lsâ€" -#: event.c:235 +#: event.cpp:178 #, c-format msgid "exit handler for process %d" msgstr "avslutshanterare för process %d" -#: event.c:241 event.c:252 +#: event.cpp:184 event.cpp:195 #, c-format msgid "exit handler for job %d, '%ls'" msgstr "avslutshanterare för jobb %d, â€%lsâ€" -#: event.c:243 +#: event.cpp:186 #, c-format msgid "exit handler for job with process group %d" msgstr "avslutshanterare för jobb med processgrupp %d" -#: event.c:254 +#: event.cpp:197 #, c-format msgid "exit handler for job with job id %d" msgstr "avslutshanterare för jobb med jobid %d" -#: event.c:260 +#: event.cpp:203 #, c-format msgid "handler for generic event '%ls'" msgstr "hanterare för generisk händelse â€%lsâ€" -#: event.c:264 -msgid "Unknown event type" +#: event.cpp:207 +#, fuzzy, c-format +msgid "Unknown event type '0x%x'" msgstr "Okänd händelsetyp" -#: event.c:588 +#: event.cpp:621 msgid "Signal list overflow. Signals have been ignored." msgstr "Signallistan är full. Signaler har ignorerats." -#: exec.c:54 +#: exec.cpp:57 #, c-format msgid "An error occurred while redirecting file descriptor %d" msgstr "Ett fel inträffade vid IO dirigering av filidentifierare %d" -#: exec.c:59 -#, c-format -msgid "An error occurred while redirecting file '%ls'" +#: exec.cpp:62 +#, fuzzy +msgid "An error occurred while writing output" +msgstr "Ett fel inträffade under skapandet av ett rör" + +#: exec.cpp:67 +#, fuzzy, c-format +msgid "An error occurred while redirecting file '%s'" msgstr "Ett fel inträffade vid IO dirigering av filen â€%lsâ€" -#: exec.c:64 -#, c-format -msgid "The file '%ls' already exists" -msgstr "Filen â€%ls†existerar redan" - -#: exec.c:69 -msgid "Could not create child process - exiting" -msgstr "Kunde inte skapa barnprocess - avslutar programmet" - -#: exec.c:289 -#, c-format -msgid "Failed to close file descriptor %d" -msgstr "Misslyckades med att stänga filidentifierare %d" - -#: exec.c:509 -#, c-format -msgid "Failed to execute process '%ls'" -msgstr "Misslyckades med att exekvera processen â€%lsâ€" - -#: exec.c:689 -#, c-format -msgid "" -"Could not send process %d, '%ls' in job %d, '%ls' from group %d to group %d" -msgstr "" -"Kunde inte skicka process %d, â€%lsâ€, i jobb %d, â€%ls†frÃ¥n grupp %d till " -"grupp %d" - -#: exec.c:711 proc.c:893 proc.c:905 -#, c-format -msgid "Could not send job %d ('%ls') to foreground" -msgstr "Kunde inte skicka jobb %d (â€%lsâ€) till förgrunden" - -#: exec.c:1047 +#: exec.cpp:912 #, c-format msgid "Unknown function '%ls'" msgstr "Okänd funktion â€%lsâ€" -#: exec.c:1167 +#: exec.cpp:1063 #, c-format msgid "Unknown input redirection type %d" msgstr "Okänd dirigering av standard in av typ %d" -#: expand.c:53 +#: expand.cpp:59 +msgid "Child process" +msgstr "Barnprocess" + +#: expand.cpp:64 +msgid "Process" +msgstr "Process" + +#: expand.cpp:69 +msgid "Job" +msgstr "Jobb" + +#: expand.cpp:74 +#, c-format +msgid "Job: %ls" +msgstr "Jobb: %ls" + +#: expand.cpp:79 +msgid "Shell process" +msgstr "Skalprocess" + +#: expand.cpp:84 +msgid "Last background job" +msgstr "Senaste bakgrundsjobb" + +#: expand.cpp:1306 +msgid "Mismatched brackets" +msgstr "Klammerparanteser matchar inte varandra" + +#: fish.cpp:320 +#, c-format +msgid "Invalid value '%s' for debug level switch" +msgstr "Ogiltigt värde â€%s†för debugnivÃ¥flagga" + +#: fish.cpp:361 mimedb.cpp:1335 +#, c-format +msgid "%s, version %s\n" +msgstr "%s, version %s\n" + +#: fish.cpp:416 +msgid "Can not use the no-execute mode when running an interactive session" +msgstr "no-execute läget kan inte användas i en i interaktiv session" + +#: fish.cpp:517 +#, c-format +msgid "Error while reading file %ls\n" +msgstr "Ett fel uppstod medan filen â€%ls†lästes\n" + +#: fish_indent.cpp:345 +#, c-format +msgid "%ls, version %s\n" +msgstr "%ls, version %s\n" + +#: fish_pager.cpp:113 +#, c-format +msgid "%ls: Argument '%s' is not a valid file descriptor\n" +msgstr "%ls: Argumentet â€%s†är inte en giltig filidentifierare\n" + +#: fish_pager.cpp:703 +#, c-format +msgid " %d to %d of %d" +msgstr " %d till %d av %d" + +#: fish_pager.cpp:1012 +msgid "Could not set up output file descriptors for pager" +msgstr "Kunde inte initiera utdata-filidentifierare för visare" + +#: fish_pager.cpp:1018 +msgid "Could not set up input file descriptors for pager" +msgstr "Kunde inte initiera indata-filidentifierare för visare" + +#: fish_pager.cpp:1024 +msgid "Could not open tty for pager" +msgstr "Kunde inte öppna tty för visare" + +#: fish_pager.cpp:1031 +msgid "Could not initialize result pipe" +msgstr "Kunde inte initiera rör för utskrift av resultat" + +#: fish_pager.cpp:1075 input.cpp:384 input.cpp:394 +msgid "Could not set up terminal" +msgstr "Kunde inte initiera terminalen" + +#: fish_pager.cpp:1110 input.cpp:436 +msgid "Error while closing terminfo" +msgstr "Ett fel inträffade medan terminfo stängdes" + +# +#: fish_pager.cpp:1306 +msgid "Unspecified file descriptors" +msgstr "Ospecificerad filidentifierare" + +# +#: fish_pager.cpp:1318 +msgid "Could not read completions" +msgstr "Kunde inte läsa kompletteringar" + +#: fishd.cpp:766 path.cpp:358 +msgid "" +"Unable to create a configuration directory for fish. Your personal settings " +"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " +"where the current user has write access." +msgstr "" +"Kunde inte skapa en konfigurationskatalog för fish. Dina personliga " +"inställningar kommer inte sparas. Var vänlig sätt variabeln $XDH_CONFIG_HOME " +"till en katalog där den nuvarande användaren har skrivrättigheter." + +#: input.cpp:387 +#, c-format +msgid "Check that your terminal type, '%ls', is supported on this system" +msgstr "" + +#: input.cpp:389 +#, c-format +msgid "Attempting to use '%ls' instead" +msgstr "" + +#: io.cpp:110 +#, c-format +msgid "" +"An error occured while reading output from code block on file descriptor %d" +msgstr "" +"Ett fel inträffade under inläsning av utdata frÃ¥n kodblock pÃ¥ " +"filidentifierare %d" + +#: mimedb.cpp:173 mimedb.cpp:187 mimedb.cpp:1177 +#, c-format +msgid "%s: Out of memory\n" +msgstr "%s: Slut pÃ¥ minne\n" + +#: mimedb.cpp:462 +#, c-format +msgid "%s: Unknown error in munge()\n" +msgstr "%s: Okänt fel i munge()\n" + +#: mimedb.cpp:480 +#, c-format +msgid "%s: Locale string too long\n" +msgstr "%s: Lokalsträng för lÃ¥ng\n" + +#: mimedb.cpp:550 mimedb.cpp:558 +#, c-format +msgid "%s: Could not compile regular expressions %s with error %s\n" +msgstr "%s: Kunde inte kompilera reguljärt uttryck %s med fel %s\n" + +#: mimedb.cpp:674 +#, c-format +msgid "%s: No description for type %s\n" +msgstr "%s: Beskrivning saknas för typ %s\n" + +#: mimedb.cpp:742 +#, c-format +msgid "%s: Could not parse launcher string '%s'\n" +msgstr "%s: Kunde inte tolka körsträng â€%lsâ€\n" + +#: mimedb.cpp:778 +#, c-format +msgid "%s: Default launcher '%s' does not specify how to start\n" +msgstr "%s: Standardkörsträng â€%s†anger inte hur programmet ska startas\n" + +#: mimedb.cpp:1156 +#, c-format +msgid "%s: Unsupported switch '%c' in launch string '%s'\n" +msgstr "%s: Flaggan â€%c†i körsträng â€%s†stöds inte\n" + +#: mimedb.cpp:1346 +#, c-format +msgid "%s: Can not launch a mimetype\n" +msgstr "%s: Kan inte köra en mimetyp\n" + +#: mimedb.cpp:1374 +#, c-format +msgid "%s: Could not parse mimetype from argument '%s'\n" +msgstr "%s: Kunde inte tolka mimetyp frÃ¥n argument â€%sâ€\n" + +#: mimedb.cpp:1394 signal.cpp:407 signal.cpp:422 +msgid "Unknown" +msgstr "Okänd" + +#: pager.cpp:24 +#, fuzzy +msgid "search: " +msgstr "Välj arkitektur" + +#: parse_execution.cpp:526 parse_execution.cpp:961 parser.cpp:1404 +#, c-format +msgid "Could not expand string '%ls'" +msgstr "Kunde inte expandera strängen â€%lsâ€" + +#: parse_execution.cpp:549 +#, fuzzy, c-format +msgid "switch: Expected exactly one argument, got %lu\n" +msgstr "%ls: Förväntade exakt ett argument, fick %d\n" + +#: parse_execution.cpp:749 parser.cpp:2053 +#, fuzzy, c-format +msgid "" +"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'." +msgstr "" +"Okänt kommando â€%lsâ€. Menade du â€set %ls %lsâ€? För mer information om hur " +"man tilldelar variabler, se hjälpsektionen om det inbyggda kommandot â€set†" +"genom att skriva â€help setâ€." + +#: parse_execution.cpp:774 parser.cpp:2078 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function like " +"'function %ls; %ls $argv; end' or use the eval builtin instead, like 'eval " +"%ls'. See the help section for the function command by typing 'help " +"function'." +msgstr "" +"Variabler fÃ¥r inte användas som kommandon. Definera istället en funktion, t." +"ex. â€function %ls; %ls $argv; endâ€. Se hjälpsektionen för function-kommandot " +"genom att skriva â€help functionâ€" + +#: parse_execution.cpp:783 parser.cpp:2087 +#, fuzzy, c-format +msgid "" +"Variables may not be used as commands. Instead, define a function or use the " +"eval builtin instead, like 'eval %ls'. See the help section for the function " +"command by typing 'help function'." +msgstr "" +"Variabler fÃ¥r inte användas som kommandon. Definera istället en funktion. Se " +"hjälpsektionen för function-kommandot genom att skriva â€help functionâ€" + +#: parse_execution.cpp:791 parser.cpp:2095 +#, c-format +msgid "" +"Commands may not contain variables. Use the eval builtin instead, like 'eval " +"%ls'. See the help section for the eval command by typing 'help eval'." +msgstr "" +"Okänt kommando â€%lsâ€. Menade du â€set VARIABEL VÄRDEâ€? Se hjälpsektionen om " +"det inbyggda kommandot â€set†genom att skriva â€help setâ€." + +#: parse_execution.cpp:798 parser.cpp:2102 +#, fuzzy, c-format +msgid "The file '%ls' is not executable by this user" +msgstr "Filen â€%ls†existerar redan" + +#: parse_execution.cpp:1029 +#, fuzzy, c-format +msgid "Invalid redirection target: %ls" +msgstr "Ogiltig IO omdirigering" + +#: parse_execution.cpp:1053 +#, fuzzy, c-format +msgid "Requested redirection to '%ls', which is not a valid file descriptor" +msgstr "IO dirigering till nÃ¥gonting som inte är en filidentifierare" + +#: parse_util.cpp:47 +#, fuzzy, c-format +msgid "The '%ls' command can not be used in a pipeline" +msgstr "Detta kommando kan ej användas i ett rör" + +#: parser.cpp:58 +msgid "This command can not be used in a pipeline" +msgstr "Detta kommando kan ej användas i ett rör" + +#: parser.cpp:64 +#, c-format +msgid "Tokenizer error: '%ls'" +msgstr "Ett fel inträffade vid symboluppdelning: â€%lsâ€" + +#: parser.cpp:69 +msgid "An additional command is required" +msgstr "Ett till kommand krävs" + +#: parser.cpp:74 +msgid "" +"The function calls itself immediately, which would result in an infinite " +"loop." +msgstr "" + +#: parser.cpp:79 +msgid "" +"Could not locate end of block. The 'end' command is missing, misspelled or a " +"';' is missing." +msgstr "" +"Kunde inte hitta slutet pÃ¥ kodblock. Kommandot â€end†saknas, är felstavat " +"eller ett â€;†saknas." + +#: parser.cpp:82 +#, c-format +msgid "Expected a command name, got token of type '%ls'" +msgstr "" +"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€" + +#: parser.cpp:87 parse_constants.h:158 +#, c-format +msgid "Illegal command name '%ls'" +msgstr "Ogiltigt kommandonamn â€%lsâ€" + +#: parser.cpp:92 parse_constants.h:164 +#, fuzzy, c-format +msgid "Illegal file descriptor in redirection '%ls'" +msgstr "Ogiltig filidentifierare â€%lsâ€" + +#: parser.cpp:97 parse_constants.h:167 +#, c-format +msgid "No matches for wildcard '%ls'." +msgstr "" + +#: parser.cpp:102 +msgid "'case' builtin not inside of switch block" +msgstr "Det inbyggda kommandot â€case†fÃ¥r bara användas i ett â€switchâ€-block." + +#: parser.cpp:107 +msgid "Loop control command while not inside of loop" +msgstr "Loopstyrningskommandon fÃ¥r bara användas i loopar." + +#: parser.cpp:112 parse_constants.h:176 +msgid "'return' builtin command outside of function definition" +msgstr "" +"Det inbyggda kommandot â€return†pÃ¥träffades utanför en funktionsdefinition" + +#: parser.cpp:117 +#, fuzzy, c-format +msgid "'%ls' builtin not inside of if block" +msgstr "Det inbyggda kommandot â€else†fÃ¥r bara användas i ett if-block" + +#: parser.cpp:122 +#, c-format +msgid "'%ls' used past terminating 'else'" +msgstr "" + +#: parser.cpp:127 +msgid "'end' command outside of block" +msgstr "Det inbyggda kommandot â€end†fÃ¥r bara användas i ett block" + +#: parser.cpp:132 parse_constants.h:179 +#, fuzzy, c-format +msgid "" +"Unknown command '%ls'. Did you mean 'set %ls %ls'? See the help section on " +"the set command by typing 'help set'." +msgstr "" +"Okänt kommando â€%lsâ€. Menade du â€set %ls %lsâ€? För mer information om hur " +"man tilldelar variabler, se hjälpsektionen om det inbyggda kommandot â€set†" +"genom att skriva â€help setâ€." + +#: parser.cpp:137 +#, c-format +msgid "Expected redirection specification, got token of type '%ls'" +msgstr "Förväntade en IO dirigering, hittade en symbol av typen â€%lsâ€" + +#: parser.cpp:142 +msgid "" +"Encountered redirection when expecting a command name. Fish does not allow a " +"redirection operation before a command." +msgstr "" +"Förväntade ett kommandonamn, hittade en IO dirigering. Fish tillÃ¥ter into IO " +"dirigeringar före kommandonamn" + +#: parser.cpp:147 +#, c-format +msgid "Tried to evaluate commands using invalid block type '%ls'" +msgstr "Försökte utföra kommandon i ogiltig blocktyp â€%lsâ€" + +#: parser.cpp:153 +#, c-format +msgid "Unexpected token of type '%ls'" +msgstr "Oväntad symbol av typ â€%lsâ€" + +#: parser.cpp:158 parse_constants.h:209 +msgid "'while' block" +msgstr "â€while†block" + +#: parser.cpp:163 parse_constants.h:214 +msgid "'for' block" +msgstr "â€for†block" + +#: parser.cpp:168 parse_constants.h:219 +msgid "Block created by breakpoint" +msgstr "Block skapat av det inbuggde kommandot breakpoint" + +#: parser.cpp:175 parse_constants.h:226 +msgid "'if' conditional block" +msgstr "â€if†villkorligt block" + +#: parser.cpp:181 parse_constants.h:232 +msgid "function definition block" +msgstr "funktionsdefinition-block" + +#: parser.cpp:187 parse_constants.h:238 +msgid "function invocation block" +msgstr "funktionsanropp-block" + +#: parser.cpp:192 parse_constants.h:243 +msgid "function invocation block with no variable shadowing" +msgstr "funktionsanroppsblock utan variabelskuggning" + +#: parser.cpp:198 parse_constants.h:249 +msgid "'switch' block" +msgstr "â€switch†block" + +#: parser.cpp:204 parse_constants.h:255 +msgid "unexecutable block" +msgstr "oexekverbart block" + +#: parser.cpp:210 parse_constants.h:261 +msgid "global root block" +msgstr "globalt rot-block" + +#: parser.cpp:216 parse_constants.h:267 +msgid "command substitution block" +msgstr "kommandosubstitution-block" + +#: parser.cpp:222 parse_constants.h:273 +msgid "'begin' unconditional block" +msgstr "â€begin†ovillkorligen exekverat block" + +#: parser.cpp:228 parse_constants.h:279 +msgid "Block created by the . builtin" +msgstr "Block skapat av det inbyggda kommandot â€.â€" + +#: parser.cpp:233 parse_constants.h:284 +msgid "event handler block" +msgstr "händelsehanterarblock" + +#: parser.cpp:239 parse_constants.h:290 +msgid "unknown/invalid block" +msgstr "okänt/ogiltigt block" + +#: parser.cpp:645 +#, c-format +msgid "Could not write profiling information to file '%s'" +msgstr "Kunde inte skriva profileringsinformation till filen â€%sâ€" + +#: parser.cpp:651 +msgid "Time\tSum\tCommand\n" +msgstr "Tid\tSumma\tKommando\n" + +#: parser.cpp:811 +#, c-format +msgid "in event handler: %ls\n" +msgstr "i händelsehanterare: %ls\n" + +#: parser.cpp:839 +#, fuzzy, c-format +msgid "from sourcing file %ls\n" +msgstr "Ett fel uppstod medan filen â€%ls†lästes\n" + +#: parser.cpp:845 +#, fuzzy, c-format +msgid "in function '%ls'\n" +msgstr "i funktion â€%lsâ€,\n" + +#: parser.cpp:850 +msgid "in command substitution\n" +msgstr "i kommandosubstitution\n" + +#: parser.cpp:863 +#, fuzzy, c-format +msgid "\tcalled on line %d of file %ls\n" +msgstr "\tanropad pÃ¥ rad %d i fil â€%lsâ€,\n" + +#: parser.cpp:869 +#, fuzzy +msgid "\tcalled during startup\n" +msgstr "\tanropad frÃ¥n standard in,\n" + +#: parser.cpp:873 +#, fuzzy +msgid "\tcalled on standard input\n" +msgstr "\tanropad frÃ¥n standard in,\n" + +#: parser.cpp:890 +#, c-format +msgid "\twith parameter list '%ls'\n" +msgstr "\tmed parameterlista â€%lsâ€\n" + +#: parser.cpp:1087 +#, c-format +msgid "%ls (line %d): " +msgstr "%ls (rad %d): " + +#: parser.cpp:1091 +msgid "Startup" +msgstr "" + +#: parser.cpp:1197 +msgid "Job inconsistency" +msgstr "Jobb i ogiltigt tillstÃ¥nd" + +#: parser.cpp:1520 +msgid "Invalid IO redirection" +msgstr "Ogiltig IO omdirigering" + +#: parser.cpp:1541 +#, c-format +msgid "Requested redirection to something that is not a file descriptor %ls" +msgstr "IO dirigering till nÃ¥gonting som inte är en filidentifierare" + +#: parser.cpp:2667 parser.cpp:2750 +msgid "End of block mismatch. Program terminating." +msgstr "Blockslut matchar inte. Programmet avslutas." + +#: parser.cpp:3034 +#, fuzzy, c-format +msgid "%ls (line %lu): " +msgstr "%ls (rad %d): " + +#: path.cpp:24 +#, c-format +msgid "Error while searching for command '%ls'" +msgstr "Ett fel uppstod under sökning efter kommandot â€%lsâ€" + +#: proc.cpp:615 +#, c-format +msgid "Job %d, '%ls' has %ls" +msgstr "Jobb %d, â€%ls†har %ls" + +#: proc.cpp:699 +#, c-format +msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "%ls: Jobb %d, â€%ls†avslutat av signal %ls (%ls)" + +#: proc.cpp:707 +#, c-format +msgid "" +"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" +msgstr "" +"%ls: Process %d, â€%lsâ€, frÃ¥n jobb %d, â€%ls†avslutat av signal %ls (%ls)" + +#: proc.cpp:736 +msgid "ended" +msgstr "avslutat" + +#: proc.cpp:969 +msgid "An error occured while reading output from code block" +msgstr "Ett fel inträffade under läsandet av utdata frÃ¥n kodblock" + +#: proc.cpp:998 proc.cpp:1010 +#, c-format +msgid "Could not send job %d ('%ls') to foreground" +msgstr "Kunde inte skicka jobb %d (â€%lsâ€) till förgrunden" + +#: proc.cpp:1030 proc.cpp:1040 proc.cpp:1055 +msgid "Could not return shell to foreground" +msgstr "Kunde inte Ã¥terställa skalet till förgrunden" + +#: proc.cpp:1280 proc.cpp:1304 +msgid "Process list pointer" +msgstr "Processlistepekare" + +#: proc.cpp:1291 +#, c-format +msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" +msgstr "Mer än ett jobb i förgrunden: job 1: â€%lsâ€, jobb 2 â€%lsâ€" + +#: proc.cpp:1302 +msgid "Process argument list" +msgstr "Processargumentlista" + +#: proc.cpp:1303 +msgid "Process name" +msgstr "Processnamn" + +#: proc.cpp:1309 +#, c-format +msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" +msgstr "Jobb â€%lsâ€, process â€%ls†har ogiltigt tillstÃ¥nd â€stoppedâ€=%d" + +#: proc.cpp:1319 +#, c-format +msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" +msgstr "Jobb â€%lsâ€, process â€%ls†har ogiltigt tillstÃ¥nd â€completedâ€=%d" + +#: reader.cpp:453 +msgid "Could not set terminal mode for new job" +msgstr "Kunde inte Ã¥terställa terminalen för nytt jobb" + +#: reader.cpp:477 +msgid "Could not set terminal mode for shell" +msgstr "Kunde inte Ã¥terställa terminalen till skalet" + +#: reader.cpp:2133 +msgid "No TTY for interactive shell (tcgetpgrp failed)" +msgstr "" + +#: reader.cpp:2148 +#, c-format +msgid "" +"I appear to be an orphaned process, so I am quitting politely. My pid is %d." +msgstr "" + +#: reader.cpp:2179 +msgid "Couldn't put the shell in its own process group" +msgstr "Kunde inte skicka skalet till sin egen processgrupp" + +#: reader.cpp:2189 +msgid "Couldn't grab control of terminal" +msgstr "Kunde inte ta kontroll över terminalen" + +#: reader.cpp:2703 +msgid "Pop null reader block" +msgstr "Ta bort element frÃ¥n tomt läsarblock" + +#: reader.cpp:2956 +msgid "" +"There are stopped jobs. A second attempt to exit will enforce their " +"termination.\n" +msgstr "" + +#: reader.cpp:4069 +#, c-format +msgid "Unknown keybinding %d" +msgstr "Okänd tangentbordsbindning %d" + +#: reader.cpp:4210 +msgid "Error while reading from file descriptor" +msgstr "Ett fel uppstod under inläsning frÃ¥n filidentifierare" + +#: reader.cpp:4227 +msgid "Error while closing input stream" +msgstr "Ett fel inträffade medan indataström stängdes" + +#: reader.cpp:4248 +msgid "Error while opening input stream" +msgstr "Ett fel inträffade medan indataström öppnades" + +#: sanity.cpp:37 +#, fuzzy +msgid "Errors detected, shutting down. Break on sanity_lose() to debug." +msgstr "Fel har upptäckts, avslutar programmet" + +#: sanity.cpp:65 +#, c-format +msgid "The pointer '%ls' is invalid" +msgstr "Pekaren â€%ls†är ogiltig" + +#: sanity.cpp:71 +#, c-format +msgid "The pointer '%ls' is null" +msgstr "Pekaren â€%ls†är noll" + +#: signal.cpp:69 +msgid "Terminal hung up" +msgstr "Terminalen bröt uppkopplingen" + +#: signal.cpp:77 +msgid "Quit request from job control (^C)" +msgstr "Avslutning via jobbkontroll (^C)" + +#: signal.cpp:85 +msgid "Quit request from job control with core dump (^\\)" +msgstr "Avslutning via jobbkontroll med minnesdump (^\\)" + +#: signal.cpp:93 +msgid "Illegal instruction" +msgstr "Ogiltig instruktion" + +#: signal.cpp:101 +msgid "Trace or breakpoint trap" +msgstr "SpÃ¥rnings eller brytpunktsfälla utlöstes" + +#: signal.cpp:109 +msgid "Abort" +msgstr "Avbrott" + +#: signal.cpp:117 +msgid "Misaligned address error" +msgstr "Bussfel (Ogiltigt justerad minnesadress)" + +#: signal.cpp:125 +msgid "Floating point exception" +msgstr "Flyttalsundantag" + +#: signal.cpp:133 +msgid "Forced quit" +msgstr "Tvingad avslutning" + +#: signal.cpp:141 +msgid "User defined signal 1" +msgstr "Användardefinerad signal 1" + +#: signal.cpp:148 +msgid "User defined signal 2" +msgstr "Användardefinerad signal 2" + +#: signal.cpp:156 +msgid "Address boundary error" +msgstr "Minnesadress korsar segmentgräns" + +#: signal.cpp:164 +msgid "Broken pipe" +msgstr "Avbrutet rör" + +#: signal.cpp:172 +msgid "Timer expired" +msgstr "Timer utlöstes" + +#: signal.cpp:180 +msgid "Polite quit request" +msgstr "Artig avslutning" + +#: signal.cpp:188 +msgid "Child process status changed" +msgstr "Barnprocess fick ändrad status" + +#: signal.cpp:196 +msgid "Continue previously stopped process" +msgstr "Fortsätt tidigare stannad process" + +#: signal.cpp:204 +msgid "Forced stop" +msgstr "Tvingad att stoppa" + +#: signal.cpp:212 +msgid "Stop request from job control (^Z)" +msgstr "Stoppad genom jobbkontroll (^Z)" + +#: signal.cpp:220 +msgid "Stop from terminal input" +msgstr "Stoppad frÃ¥n terminalläsning" + +#: signal.cpp:228 +msgid "Stop from terminal output" +msgstr "Stoppad frÃ¥n terminalskrivning" + +#: signal.cpp:236 +msgid "Urgent socket condition" +msgstr "Viktig socket-situation" + +#: signal.cpp:244 +msgid "CPU time limit exceeded" +msgstr "Slut pÃ¥ processortid" + +#: signal.cpp:252 +msgid "File size limit exceeded" +msgstr "Maximal filstorlek överskriden" + +#: signal.cpp:260 +msgid "Virtual timer expired" +msgstr "Virtuell timer utlöst" + +#: signal.cpp:268 +msgid "Profiling timer expired" +msgstr "Profileringstimer utlöst" + +#: signal.cpp:276 signal.cpp:284 +msgid "Window size change" +msgstr "Terminalfönstret ändrade storlek" + +#: signal.cpp:292 +msgid "I/O on asynchronous file descriptor is possible" +msgstr "Läsning/skrivning pÃ¥ asynkron filidentifierare möjligt" + +#: signal.cpp:300 +msgid "Power failure" +msgstr "Strömavbrott" + +#: signal.cpp:308 +msgid "Bad system call" +msgstr "Felaktigt systemanrop" + +#: signal.cpp:316 +msgid "Information request" +msgstr "Informationsbegäran" + +#: signal.cpp:324 +msgid "Stack fault" +msgstr "Stackfel" + +#: signal.cpp:332 +msgid "Emulator trap" +msgstr "Emulatorfälla" + +#: signal.cpp:340 +msgid "Abort (Alias for SIGABRT)" +msgstr "Avbrott (Alias för SIGABRT)" + +#: signal.cpp:348 +msgid "Unused signal" +msgstr "Oanvänd signal" + +#: signal.cpp:684 +msgid "Signal block mismatch" +msgstr "Signalblockeringar matchar inte varandra" + +#: tokenizer.cpp:32 +msgid "Unexpected end of string, quotes are not balanced" +msgstr "Oväntat slut pÃ¥ textsträng, citationstecknen är inte balanserade" + +#: tokenizer.cpp:37 +msgid "Unexpected end of string, parenthesis do not match" +msgstr "Oväntat slut pÃ¥ textsträng, paranteserna är inte balanserade" + +#: tokenizer.cpp:42 +#, fuzzy +msgid "Unexpected end of string, square brackets do not match" +msgstr "Oväntat slut pÃ¥ textsträng, paranteserna är inte balanserade" + +#: tokenizer.cpp:48 +msgid "Invalid input/output redirection" +msgstr "Ogiltig IO dirigering" + +#: tokenizer.cpp:53 +#, fuzzy +msgid "Cannot use stdin (fd 0) as pipe output" +msgstr "Kan inte skicka rördata till filidentifierare 0" + +#: tokenizer.cpp:65 +msgid "Tokenizer not yet initialized" +msgstr "Symbolavdelaren inte initierad" + +#: tokenizer.cpp:66 +msgid "Tokenizer error" +msgstr "Symbolavdelarfel" + +#: tokenizer.cpp:67 +msgid "String" +msgstr "Textsträng" + +#: tokenizer.cpp:68 +msgid "Pipe" +msgstr "Rör" + +#: tokenizer.cpp:69 +msgid "End of command" +msgstr "Slut av kommando" + +#: tokenizer.cpp:70 +msgid "Redirect output to file" +msgstr "IO dirigering av utdata till fil" + +#: tokenizer.cpp:71 +msgid "Append output to file" +msgstr "IO dirigering av utdata till slutet av fil" + +#: tokenizer.cpp:72 +msgid "Redirect input to file" +msgstr "IO dirigering av indata till fil" + +#: tokenizer.cpp:73 +msgid "Redirect to file descriptor" +msgstr "IO dirigering till filidentifierare" + +#: tokenizer.cpp:74 +msgid "Redirect output to file if file does not exist" +msgstr "IO dirigering av utdata till fil om filen inte existerar" + +#: tokenizer.cpp:75 +msgid "Run job in background" +msgstr "Kör jobb i bakgrunden" + +#: tokenizer.cpp:76 +msgid "Comment" +msgstr "Kommentar" + +#: tokenizer.cpp:602 +msgid "Invalid token type" +msgstr "Ogiltig symboltyp" + +#: wgetopt.cpp:536 +#, c-format +msgid "%ls: Option '%ls' is ambiguous\n" +msgstr "%ls: Flaggan â€%ls†är tvetydig\n" + +#: wgetopt.cpp:560 +#, c-format +msgid "%ls: Option '--%ls' doesn't allow an argument\n" +msgstr "%ls: Flaggan â€--%ls†tar inget argument\n" + +#: wgetopt.cpp:565 +#, c-format +msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" +msgstr "%ls: Flaggan â€%lc%ls†tar inget argument\n" + +#: wgetopt.cpp:579 +#, c-format +msgid "%ls: Option '%ls' requires an argument\n" +msgstr "%ls: Flaggan â€%ls†kräver ett argument\n" + +#: wgetopt.cpp:607 +#, c-format +msgid "%ls: Unrecognized option '--%ls'\n" +msgstr "%ls: Okänd flagga â€--%lsâ€\n" + +#: wgetopt.cpp:611 +#, c-format +msgid "%ls: Unrecognized option '%lc%ls'\n" +msgstr "%ls: Okänd flagga â€%lc%lsâ€\n" + +#: wgetopt.cpp:636 +#, c-format +msgid "%ls: Illegal option -- %lc\n" +msgstr "%ls: Ogiltig flagga -- â€%lcâ€\n" + +#: wgetopt.cpp:638 +#, c-format +msgid "%ls: Invalid option -- %lc\n" +msgstr "%ls: Ogiltigt flagga -- %lc\n" + +#: wgetopt.cpp:673 +#, c-format +msgid "%ls: Option requires an argument -- %lc\n" +msgstr "%ls: Flaggan kräver ett argument -- %lc\n" + +#: wildcard.cpp:58 +msgid "Executable" +msgstr "Program" + +#: wildcard.cpp:62 +msgid "Executable link" +msgstr "Länk till program" + +#: wildcard.cpp:67 share/completions/git.fish:146 +msgid "File" +msgstr "Fil" + +#: wildcard.cpp:71 +msgid "Character device" +msgstr "Teckenenhet" + +#: wildcard.cpp:75 +msgid "Block device" +msgstr "Blockenhet" + +#: wildcard.cpp:79 +msgid "Fifo" +msgstr "Fifo" + +#: wildcard.cpp:83 +msgid "Symbolic link" +msgstr "Symbolisk länk" + +# +#: wildcard.cpp:87 +msgid "Symbolic link to directory" +msgstr "Symboliska länk till katalog" + +#: wildcard.cpp:91 +msgid "Rotten symbolic link" +msgstr "Rutten symbolisk länk" + +#: wildcard.cpp:95 +msgid "Symbolic link loop" +msgstr "Slinga av symboliska länkar" + +#: wildcard.cpp:99 +msgid "Socket" +msgstr "Uttag (socket)" + +#: wildcard.cpp:103 share/completions/ruby.fish:23 +#: share/functions/__fish_complete_directories.fish:8 +msgid "Directory" +msgstr "Katalog" + +#: builtin.h:27 +#, c-format +msgid "%ls: Expected argument\n" +msgstr "%ls: Förväntade argument\n" + +#: builtin.h:37 +#, c-format +msgid "" +"%ls: Invalid combination of options,\n" +"%ls\n" +msgstr "" +"%ls: Ogiltig kombination av flaggor,\n" +"%ls\n" + +#: builtin.h:42 +#, c-format +msgid "%ls: Variable scope can only be one of universal, global and local\n" +msgstr "" +"%ls: En variabels definitionsomrÃ¥de kan bara vara en av universal, global " +"och lokal\n" + +#: builtin.h:47 +#, c-format +msgid "%ls: Variable can't be both exported and unexported\n" +msgstr "%ls: Variabel kan inte vara bÃ¥de exporterad och oexporterad\n" + +#: builtin.h:52 +#, c-format +msgid "%ls: Unknown option '%ls'\n" +msgstr "%ls: Okänd flagga â€%lsâ€\n" + +#: builtin.h:57 +#, c-format +msgid "" +"%ls: Invalid character '%lc' in variable name. Only alphanumerical " +"characters and underscores are valid in a variable name.\n" +msgstr "" +"%ls: Ogiltigt tecken â€%lc†i variabelnamn. Bara alfanumeriska tecken och " +"understreck är tillÃ¥tna i variabelnamn.\n" + +#: builtin.h:62 +#, c-format +msgid "%ls: Variable name can not be the empty string\n" +msgstr "%ls: Den tomma strängen är inte ett tillÃ¥tet variabelnamn\n" + +#: builtin.h:67 +#, c-format +msgid "%ls: Second argument must be 'in'\n" +msgstr "%ls: Andra argumentet mÃ¥ste vara â€inâ€\n" + +#: builtin.h:72 +#, c-format +msgid "%ls: Expected at least two arguments, got %d\n" +msgstr "%ls: Förväntade minst tvÃ¥ argument, fick %d\n" + +#: builtin.h:74 +#, c-format +msgid "%ls: '%ls' is not a valid variable name\n" +msgstr "%ls: â€%ls†är ett ogiltigt variabelnamn\n" + +#: builtin.h:77 +#, c-format +msgid "%ls: can only take 'if' and then another command as an argument\n" +msgstr "" + +#: builtin.h:78 +#, fuzzy, c-format +msgid "%ls: any second argument must be 'if'\n" +msgstr "%ls: Andra argumentet mÃ¥ste vara â€inâ€\n" + +#: builtin.h:88 +#, c-format +msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" +msgstr "%ls: Blockmismatchning: â€%ls†mot â€%lsâ€\n" + +#: builtin.h:93 +#, c-format +msgid "%ls: Unknown block type '%ls'\n" +msgstr "%ls: Okänd blocktyp â€%lsâ€\n" + +#: builtin.h:95 +#, c-format +msgid "%ls: Argument '%ls' is not a number\n" +msgstr "%ls: Argumentet â€%ls†är inte ett nummer\n" + +#: exec.h:21 +msgid "An error occurred while setting up pipe" +msgstr "Ett fel inträffade under skapandet av ett rör" + +#: expand.h:132 +msgid "Array index out of bounds" +msgstr "Arrayindexet är otÃ¥llÃ¥tet" + +#: output.h:91 +#, c-format +msgid "" +"Tried to use terminfo string %s on line %d of %s, which is undefined in " +"terminal of type \"%ls\". Please report this error to %s" +msgstr "" +"Försökte använda terminfosträng %s pÃ¥ rad %d av %s, vilken är odefinerad i " +"terminaler av typen â€%lsâ€. Vänligen rapportera detta fel till %s" + +#: parse_constants.h:145 +#, c-format +msgid "" +"The function '%ls' calls itself immediately, which would result in an " +"infinite loop." +msgstr "" + +#: parse_constants.h:149 +msgid "" +"The function call stack limit has been exceeded. Do you have an accidental " +"infinite loop?" +msgstr "" + +#: parse_constants.h:152 +#, fuzzy +msgid "" +"Expected a command, but instead found a pipe. Did you mean 'COMMAND; or " +"COMMAND'? See the help section for the 'or' builtin command by typing 'help " +"or'." +msgstr "" +"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€. " +"Menade du â€KOMMANDO; or KOMMANDOâ€? Se hjälpsektionen om â€or†genom att " +"skriva â€help orâ€." + +#: parse_constants.h:155 +#, fuzzy +msgid "" +"Expected a command, but instead found a '&'. Did you mean 'COMMAND; and " +"COMMAND'? See the help section for the 'and' builtin command by typing 'help " +"and'." +msgstr "" +"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€. " +"Menade du â€KOMMANDO; and KOMMANDOâ€? Se hjälpsektionen om â€and†genom att " +"skriva â€help andâ€." + +#: parse_constants.h:161 +#, fuzzy, c-format +msgid "Unable to expand variable name '%ls'" +msgstr "%ls: Ogiltigt variabelnamn â€%lsâ€\n" + +#: parse_constants.h:170 +#, fuzzy +msgid "break command while not inside of loop" +msgstr "Loopstyrningskommandon fÃ¥r bara användas i loopar." + +#: parse_constants.h:173 +#, fuzzy +msgid "continue command while not inside of loop" +msgstr "Loopstyrningskommandon fÃ¥r bara användas i loopar." + +#: parse_constants.h:184 #, c-format msgid "" "The '$' character begins a variable name. The character '%lc', which " @@ -702,7 +1895,13 @@ msgstr "" "vara noll tecken lÃ¥nga. För mer information om variabelexpansion i fish, " "skriv â€help expand-variableâ€." -#: expand.c:58 +#: parse_constants.h:189 +msgid "" +"$? is not a valid variable in fish. If you want the exit status of the last " +"command, try $status." +msgstr "" + +#: parse_constants.h:194 msgid "" "The '$' begins a variable name. It was given at the end of an argument. " "Variable names may not be zero characters long. To learn more about variable " @@ -712,7 +1911,7 @@ msgstr "" "ett argument. Variabelnamn fÃ¥r inte vara noll tecken lÃ¥nga. För mer " "information om variabelexpansion i fish, skriv â€help expand-variableâ€." -#: expand.c:63 +#: parse_constants.h:199 #, c-format msgid "" "Did you mean %ls{$%ls}%ls? The '$' character begins a variable name. A " @@ -725,7 +1924,7 @@ msgstr "" "variabelnamn, och variabelnamn fÃ¥r inte vara noll tecken lÃ¥nga. För mer " "information om variabelexpansion i fish, skriv â€help expand-variableâ€." -#: expand.c:68 +#: parse_constants.h:204 msgid "" "Did you mean (COMMAND)? In fish, the '$' character is only used for " "accessing variables. To learn more about command substitution in fish, type " @@ -735,1043 +1934,18 @@ msgstr "" "variabler. För att lära dig mer om kommandosubstitutionm skriv â€help expand-" "command-substitutionâ€." -#: expand.c:73 -msgid "Child process" -msgstr "Barnprocess" +#: share/completions/adb.fish:3 +#, fuzzy +msgid "Test if adb has yet to be given the subcommand" +msgstr "Testa om apt har tagit emot ett underkommando" -#: expand.c:78 -msgid "Process" -msgstr "Process" - -#: expand.c:83 -msgid "Job" -msgstr "Jobb" - -#: expand.c:88 -#, c-format -msgid "Job: %ls" -msgstr "Jobb: %ls" - -#: expand.c:93 -msgid "Shell process" -msgstr "Skalprocess" - -#: expand.c:98 -msgid "Last background job" -msgstr "Senaste bakgrundsjobb" - -#: expand.c:1185 -msgid "Mismatched brackets" -msgstr "Klammerparanteser matchar inte varandra" - -#: fish_indent.c:310 -#, c-format -msgid "%ls, version %s\n" -msgstr "%ls, version %s\n" - -#: fish_pager.c:118 -#, c-format -msgid "%ls: Argument '%s' is not a valid file descriptor\n" -msgstr "%ls: Argumentet â€%s†är inte en giltig filidentifierare\n" - -#: fish_pager.c:706 -#, c-format -msgid " %d to %d of %d" -msgstr " %d till %d av %d" - -#: fish_pager.c:1041 -msgid "Could not set up output file descriptors for pager" -msgstr "Kunde inte initiera utdata-filidentifierare för visare" - -#: fish_pager.c:1047 -msgid "Could not set up input file descriptors for pager" -msgstr "Kunde inte initiera indata-filidentifierare för visare" - -#: fish_pager.c:1053 -msgid "Could not open tty for pager" -msgstr "Kunde inte öppna tty för visare" - -#: fish_pager.c:1060 -msgid "Could not initialize result pipe" -msgstr "Kunde inte initiera rör för utskrift av resultat" - -#: fish_pager.c:1111 input.c:336 -msgid "Could not set up terminal" -msgstr "Kunde inte initiera terminalen" - -#: fish_pager.c:1135 input.c:362 set_color.c:335 -#, c-format -msgid "Error while closing terminfo" -msgstr "Ett fel inträffade medan terminfo stängdes" - -# -#: fish_pager.c:1347 -msgid "Unspecified file descriptors" -msgstr "Ospecificerad filidentifierare" - -# -#: fish_pager.c:1359 -msgid "Could not read completions" -msgstr "Kunde inte läsa kompletteringar" - -#: fishd.c:465 path.c:286 -msgid "" -"Unable to create a configuration directory for fish. Your personal settings " -"will not be saved. Please set the $XDG_CONFIG_HOME variable to a directory " -"where the current user has write access." +#: share/completions/adb.fish:12 +msgid "Run adb devices and parse output" msgstr "" -"Kunde inte skapa en konfigurationskatalog för fish. Dina personliga " -"inställningar kommer inte sparas. Var vänlig sätt variabeln $XDH_CONFIG_HOME " -"till en katalog där den nuvarande användaren har skrivrättigheter." -#: io.c:87 -#, c-format -msgid "" -"An error occured while reading output from code block on file descriptor %d" +#: share/completions/adb.fish:24 +msgid "Runs adb with any -s parameters already given on the command line" msgstr "" -"Ett fel inträffade under inläsning av utdata frÃ¥n kodblock pÃ¥ " -"filidentifierare %d" - -#: main.c:219 -#, c-format -msgid "Invalid value '%s' for debug level switch" -msgstr "Ogiltigt värde â€%s†för debugnivÃ¥flagga" - -#: main.c:258 mimedb.c:1286 set_color.c:226 -#, c-format -msgid "%s, version %s\n" -msgstr "%s, version %s\n" - -#: main.c:310 -msgid "Can not use the no-execute mode when running an interactive session" -msgstr "no-execute läget kan inte användas i en i interaktiv session" - -#: main.c:388 -#, c-format -msgid "Error while reading file %ls\n" -msgstr "Ett fel uppstod medan filen â€%ls†lästes\n" - -#: mimedb.c:157 mimedb.c:171 mimedb.c:1114 -#, c-format -msgid "%s: Out of memory\n" -msgstr "%s: Slut pÃ¥ minne\n" - -#: mimedb.c:406 -#, c-format -msgid "%s: Unknown error in munge()\n" -msgstr "%s: Okänt fel i munge()\n" - -#: mimedb.c:424 -#, c-format -msgid "%s: Locale string too long\n" -msgstr "%s: Lokalsträng för lÃ¥ng\n" - -#: mimedb.c:494 mimedb.c:502 -#, c-format -msgid "%s: Could not compile regular expressions %s with error %s\n" -msgstr "%s: Kunde inte kompilera reguljärt uttryck %s med fel %s\n" - -#: mimedb.c:615 -#, c-format -msgid "%s: No description for type %s\n" -msgstr "%s: Beskrivning saknas för typ %s\n" - -#: mimedb.c:679 -#, c-format -msgid "%s: Could not parse launcher string '%s'\n" -msgstr "%s: Kunde inte tolka körsträng â€%lsâ€\n" - -#: mimedb.c:712 -#, c-format -msgid "%s: Default launcher '%s' does not specify how to start\n" -msgstr "%s: Standardkörsträng â€%s†anger inte hur programmet ska startas\n" - -#: mimedb.c:1093 -#, c-format -msgid "%s: Unsupported switch '%c' in launch string '%s'\n" -msgstr "%s: Flaggan â€%c†i körsträng â€%s†stöds inte\n" - -#: mimedb.c:1297 -#, c-format -msgid "%s: Can not launch a mimetype\n" -msgstr "%s: Kan inte köra en mimetyp\n" - -#: mimedb.c:1329 -#, c-format -msgid "%s: Could not parse mimetype from argument '%s'\n" -msgstr "%s: Kunde inte tolka mimetyp frÃ¥n argument â€%sâ€\n" - -#: mimedb.c:1349 signal.c:407 signal.c:422 -msgid "Unknown" -msgstr "Okänd" - -#: mimedb.c:1410 -#, c-format -msgid "%s: Unknown error\n" -msgstr "%s: Okänt fel\n" - -#: parse_util.c:892 -#, c-format -msgid "Could not autoload item '%ls', it is already being autoloaded. " -msgstr "Kunde inte automatiskt ladda elementet â€%lsâ€, det autoladdas redan. " - -#: parser.c:68 -msgid "This command can not be used in a pipeline" -msgstr "Detta kommando kan ej användas i ett rör" - -#: parser.c:74 -#, c-format -msgid "Tokenizer error: '%ls'" -msgstr "Ett fel inträffade vid symboluppdelning: â€%lsâ€" - -#: parser.c:79 -msgid "An additional command is required" -msgstr "Ett till kommand krävs" - -#: parser.c:84 -msgid "Maximum recursion depth reached. Accidental infinite loop?" -msgstr "Maximalt rekursionsdjup uppnÃ¥tt. Oavsiktlig oändlig upprepning?" - -#: parser.c:89 -msgid "" -"Could not locate end of block. The 'end' command is missing, misspelled or a " -"';' is missing." -msgstr "" -"Kunde inte hitta slutet pÃ¥ kodblock. Kommandot â€end†saknas, är felstavat " -"eller ett â€;†saknas." - -#: parser.c:94 -msgid "Maximum number of nested blocks reached." -msgstr "Maximalt antal nästade block har uppnÃ¥tts." - -#: parser.c:99 -#, c-format -msgid "Expected a command name, got token of type '%ls'" -msgstr "" -"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€" - -#: parser.c:104 -#, c-format -msgid "" -"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; or " -"COMMAND'? See the help section for the 'or' builtin command by typing 'help " -"or'." -msgstr "" -"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€. " -"Menade du â€KOMMANDO; or KOMMANDOâ€? Se hjälpsektionen om â€or†genom att " -"skriva â€help orâ€." - -#: parser.c:109 -#, c-format -msgid "" -"Expected a command name, got token of type '%ls'. Did you mean 'COMMAND; and " -"COMMAND'? See the help section for the 'and' builtin command by typing 'help " -"and'." -msgstr "" -"Förväntade att hitta ett kommandonamn, hittade en symbol av typen â€%lsâ€. " -"Menade du â€KOMMANDO; and KOMMANDOâ€? Se hjälpsektionen om â€and†genom att " -"skriva â€help andâ€." - -#: parser.c:114 -#, c-format -msgid "Illegal command name '%ls'" -msgstr "Ogiltigt kommandonamn â€%lsâ€" - -#: parser.c:119 -#, c-format -msgid "Illegal file descriptor '%ls'" -msgstr "Ogiltig filidentifierare â€%lsâ€" - -#: parser.c:124 -#, c-format -msgid "Warning: No match for wildcard '%ls'. The command will not be executed." -msgstr "Varning: Inga matchningar för jokertecknen i â€%lsâ€. Kommandot kommer inte " -"utföras." - -#: parser.c:129 -msgid "'case' builtin not inside of switch block" -msgstr "Det inbyggda kommandot â€case†fÃ¥r bara användas i ett â€switchâ€-block." - -#: parser.c:134 -msgid "Loop control command while not inside of loop" -msgstr "Loopstyrningskommandon fÃ¥r bara användas i loopar." - -#: parser.c:139 -msgid "'return' builtin command outside of function definition" -msgstr "Det inbyggda kommandot â€return†pÃ¥träffades utanför en funktionsdefinition" - -#: parser.c:144 -msgid "'else' builtin not inside of if block" -msgstr "Det inbyggda kommandot â€else†fÃ¥r bara användas i ett if-block" - -#: parser.c:149 -msgid "'end' command outside of block" -msgstr "Det inbyggda kommandot â€end†fÃ¥r bara användas i ett block" - -#: parser.c:154 -#, c-format -msgid "" -"Unknown command '%ls'. Did you mean 'set %ls %ls'? For information on " -"assigning values to variables, see the help section on the set command by " -"typing 'help set'." -msgstr "" -"Okänt kommando â€%lsâ€. Menade du â€set %ls %lsâ€? För mer information om hur " -"man tilldelar variabler, se hjälpsektionen om det inbyggda kommandot â€set†" -"genom att skriva â€help setâ€." - -#: parser.c:159 -#, c-format -msgid "Expected redirection specification, got token of type '%ls'" -msgstr "Förväntade en IO dirigering, hittade en symbol av typen â€%lsâ€" - -#: parser.c:164 -msgid "" -"Encountered redirection when expecting a command name. Fish does not allow a " -"redirection operation before a command." -msgstr "" -"Förväntade ett kommandonamn, hittade en IO dirigering. Fish tillÃ¥ter into IO " -"dirigeringar före kommandonamn" - -#: parser.c:169 -msgid "Tried to evaluate null pointer." -msgstr "Försökte evaluera nollpekare." - -#: parser.c:174 -#, c-format -msgid "Tried to evaluate commands using invalid block type '%ls'" -msgstr "Försökte utföra kommandon i ogiltig blocktyp â€%lsâ€" - -#: parser.c:180 -#, c-format -msgid "Unexpected token of type '%ls'" -msgstr "Oväntad symbol av typ â€%lsâ€" - -#: parser.c:185 -msgid "'while' block" -msgstr "â€while†block" - -#: parser.c:190 -msgid "'for' block" -msgstr "â€for†block" - -#: parser.c:195 -msgid "Block created by breakpoint" -msgstr "Block skapat av det inbuggde kommandot breakpoint" - -#: parser.c:202 -msgid "'if' conditional block" -msgstr "â€if†villkorligt block" - -#: parser.c:208 -msgid "function definition block" -msgstr "funktionsdefinition-block" - -#: parser.c:214 -msgid "function invocation block" -msgstr "funktionsanropp-block" - -#: parser.c:219 -msgid "function invocation block with no variable shadowing" -msgstr "funktionsanroppsblock utan variabelskuggning" - -#: parser.c:225 -msgid "'switch' block" -msgstr "â€switch†block" - -#: parser.c:231 -msgid "unexecutable block" -msgstr "oexekverbart block" - -#: parser.c:237 -msgid "global root block" -msgstr "globalt rot-block" - -#: parser.c:243 -msgid "command substitution block" -msgstr "kommandosubstitution-block" - -#: parser.c:249 -msgid "'begin' unconditional block" -msgstr "â€begin†ovillkorligen exekverat block" - -#: parser.c:255 -msgid "Block created by the . builtin" -msgstr "Block skapat av det inbyggda kommandot â€.â€" - -#: parser.c:260 -msgid "event handler block" -msgstr "händelsehanterarblock" - -#: parser.c:266 -msgid "unknown/invalid block" -msgstr "okänt/ogiltigt block" - -#: parser.c:761 -#, c-format -msgid "Could not write profiling information to file '%s'" -msgstr "Kunde inte skriva profileringsinformation till filen â€%sâ€" - -#: parser.c:767 -msgid "Time\tSum\tCommand\n" -msgstr "Tid\tSumma\tKommando\n" - -#: parser.c:945 -#, c-format -msgid "in event handler: %ls\n" -msgstr "i händelsehanterare: %ls\n" - -#: parser.c:972 -#, c-format -msgid "in . (source) call of file '%ls',\n" -msgstr "i â€.â€-anrop av fil â€%lsâ€,\n" - -#: parser.c:977 -#, c-format -msgid "in function '%ls',\n" -msgstr "i funktion â€%lsâ€,\n" - -#: parser.c:982 -msgid "in command substitution\n" -msgstr "i kommandosubstitution\n" - -#: parser.c:992 -#, c-format -msgid "\tcalled on line %d of file '%ls',\n" -msgstr "\tanropad pÃ¥ rad %d i fil â€%lsâ€,\n" - -#: parser.c:999 -msgid "\tcalled on standard input,\n" -msgstr "\tanropad frÃ¥n standard in,\n" - -#: parser.c:1013 -#, c-format -msgid "\twith parameter list '%ls'\n" -msgstr "\tmed parameterlista â€%lsâ€\n" - -#: parser.c:1202 -#, c-format -msgid "%ls (line %d): " -msgstr "%ls (rad %d): " - -#: parser.c:1424 -#, c-format -msgid "Could not expand string '%ls'" -msgstr "Kunde inte expandera strängen â€%lsâ€" - -#: parser.c:1541 -msgid "Invalid IO redirection" -msgstr "Ogiltig IO omdirigering" - -#: parser.c:1595 -#, c-format -msgid "Requested redirection to something that is not a file descriptor %ls" -msgstr "IO dirigering till nÃ¥gonting som inte är en filidentifierare" - -#: parser.c:2046 -#, c-format -msgid "" -"Variables may not be used as commands. Instead, define a function like " -"'function %ls; %ls $argv; end'. See the help section for the function " -"command by typing 'help function'." -msgstr "" -"Variabler fÃ¥r inte användas som kommandon. Definera istället en funktion, t." -"ex. â€function %ls; %ls $argv; endâ€. Se hjälpsektionen för function-kommandot " -"genom att skriva â€help functionâ€" - -#: parser.c:2054 -msgid "" -"Variables may not be used as commands. Instead, define a function. See the " -"help section for the function command by typing 'help function'." -msgstr "" -"Variabler fÃ¥r inte användas som kommandon. Definera istället en funktion. Se " -"hjälpsektionen för function-kommandot genom att skriva â€help functionâ€" - -#: parser.c:2061 -#, c-format -msgid "" -"Commands may not contain variables. Use the eval builtin instead, like 'eval " -"%ls'. See the help section for the eval command by typing 'help eval'." -msgstr "" -"Okänt kommando â€%lsâ€. Menade du â€set VARIABEL VÄRDEâ€? Se hjälpsektionen om " -"det inbyggda kommandot â€set†genom att skriva â€help setâ€." - -#: parser.c:2068 -#, c-format -msgid "Unknown command '%ls'" -msgstr "Okänt kommando â€%lsâ€" - -#: parser.c:2551 -msgid "End of block mismatch. Program terminating." -msgstr "Blockslut matchar inte. Programmet avslutas." - -#: path.c:26 -#, c-format -msgid "Error while searching for command '%ls'" -msgstr "Ett fel uppstod under sökning efter kommandot â€%lsâ€" - -#: proc.c:155 -msgid "Job inconsistency" -msgstr "Jobb i ogiltigt tillstÃ¥nd" - -#: proc.c:523 -#, c-format -msgid "Job %d, '%ls' has %ls" -msgstr "Jobb %d, â€%ls†har %ls" - -#: proc.c:609 -#, c-format -msgid "%ls: Job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "%ls: Jobb %d, â€%ls†avslutat av signal %ls (%ls)" - -#: proc.c:617 -#, c-format -msgid "" -"%ls: Process %d, '%ls' from job %d, '%ls' terminated by signal %ls (%ls)" -msgstr "" -"%ls: Process %d, â€%lsâ€, frÃ¥n jobb %d, â€%ls†avslutat av signal %ls (%ls)" - -#: proc.c:646 -msgid "ended" -msgstr "avslutat" - -#: proc.c:873 -msgid "An error occured while reading output from code block" -msgstr "Ett fel inträffade under läsandet av utdata frÃ¥n kodblock" - -#: proc.c:923 proc.c:933 proc.c:943 -msgid "Could not return shell to foreground" -msgstr "Kunde inte Ã¥terställa skalet till förgrunden" - -#: proc.c:1149 -msgid "Job command" -msgstr "Jobb kommando" - -#: proc.c:1152 proc.c:1179 -msgid "Process list pointer" -msgstr "Processlistepekare" - -#: proc.c:1155 -msgid "Job list pointer" -msgstr "Jobblistepekare" - -#: proc.c:1166 -#, c-format -msgid "More than one job in foreground: job 1: '%ls' job 2: '%ls'" -msgstr "Mer än ett jobb i förgrunden: job 1: â€%lsâ€, jobb 2 â€%lsâ€" - -#: proc.c:1177 -msgid "Process argument list" -msgstr "Processargumentlista" - -#: proc.c:1178 -msgid "Process name" -msgstr "Processnamn" - -#: proc.c:1180 -msgid "Process command" -msgstr "Processkommando" - -#: proc.c:1185 -#, c-format -msgid "Job '%ls', process '%ls' has inconsistent state 'stopped'=%d" -msgstr "Jobb â€%lsâ€, process â€%ls†har ogiltigt tillstÃ¥nd â€stoppedâ€=%d" - -#: proc.c:1195 -#, c-format -msgid "Job '%ls', process '%ls' has inconsistent state 'completed'=%d" -msgstr "Jobb â€%lsâ€, process â€%ls†har ogiltigt tillstÃ¥nd â€completedâ€=%d" - -#: reader.c:341 -msgid "Could not set terminal mode for new job" -msgstr "Kunde inte Ã¥terställa terminalen för nytt jobb" - -#: reader.c:365 -msgid "Could not set terminal mode for shell" -msgstr "Kunde inte Ã¥terställa terminalen till skalet" - -#: reader.c:1486 -msgid "Couldn't put the shell in its own process group" -msgstr "Kunde inte skicka skalet till sin egen processgrupp" - -#: reader.c:1496 -msgid "Couldn't grab control of terminal" -msgstr "Kunde inte ta kontroll över terminalen" - -#: reader.c:2077 -msgid "Pop null reader block" -msgstr "Ta bort element frÃ¥n tomt läsarblock" - -#: reader.c:2215 -msgid "There are stopped jobs\n" -msgstr "Det finns stannade jobb\n" - -#: reader.c:2964 -#, c-format -msgid "Unknown keybinding %d" -msgstr "Okänd tangentbordsbindning %d" - -#: reader.c:3053 -msgid "Error while reading from file descriptor" -msgstr "Ett fel uppstod under inläsning frÃ¥n filidentifierare" - -#: reader.c:3073 -msgid "Error while closing input stream" -msgstr "Ett fel inträffade medan indataström stängdes" - -#: reader.c:3101 -#, c-format -msgid "Could not convert input. Read %d bytes." -msgstr "Kunde inte konvertera indata. Läste %d bytes." - -#: reader.c:3107 -msgid "Could not read input stream" -msgstr "Kunde inte läsa frÃ¥n indataström" - -#: reader.c:3116 -msgid "Error while opening input stream" -msgstr "Ett fel inträffade medan indataström öppnades" - -#: sanity.c:37 -msgid "Errors detected, shutting down" -msgstr "Fel har upptäckts, avslutar programmet" - -#: sanity.c:65 -#, c-format -msgid "The pointer '%ls' is invalid" -msgstr "Pekaren â€%ls†är ogiltig" - -#: sanity.c:71 -#, c-format -msgid "The pointer '%ls' is null" -msgstr "Pekaren â€%ls†är noll" - -#: set_color.c:253 -#, c-format -msgid "%s: Too many arguments\n" -msgstr "%s: För mÃ¥nga argument\n" - -#: set_color.c:260 -#, c-format -msgid "%s: Expected an argument\n" -msgstr "%s: Förväntade argument\n" - -#: set_color.c:269 set_color.c:277 -#, c-format -msgid "%s: Unknown color '%s'\n" -msgstr "%s: Okänd färg â€%sâ€\n" - -#: signal.c:69 -msgid "Terminal hung up" -msgstr "Terminalen bröt uppkopplingen" - -#: signal.c:77 -msgid "Quit request from job control (^C)" -msgstr "Avslutning via jobbkontroll (^C)" - -#: signal.c:85 -msgid "Quit request from job control with core dump (^\\)" -msgstr "Avslutning via jobbkontroll med minnesdump (^\\)" - -#: signal.c:93 -msgid "Illegal instruction" -msgstr "Ogiltig instruktion" - -#: signal.c:101 -msgid "Trace or breakpoint trap" -msgstr "SpÃ¥rnings eller brytpunktsfälla utlöstes" - -#: signal.c:109 -msgid "Abort" -msgstr "Avbrott" - -#: signal.c:117 -msgid "Misaligned address error" -msgstr "Bussfel (Ogiltigt justerad minnesadress)" - -#: signal.c:125 -msgid "Floating point exception" -msgstr "Flyttalsundantag" - -#: signal.c:133 -msgid "Forced quit" -msgstr "Tvingad avslutning" - -#: signal.c:141 -msgid "User defined signal 1" -msgstr "Användardefinerad signal 1" - -#: signal.c:148 -msgid "User defined signal 2" -msgstr "Användardefinerad signal 2" - -#: signal.c:156 -msgid "Address boundary error" -msgstr "Minnesadress korsar segmentgräns" - -#: signal.c:164 -msgid "Broken pipe" -msgstr "Avbrutet rör" - -#: signal.c:172 -msgid "Timer expired" -msgstr "Timer utlöstes" - -#: signal.c:180 -msgid "Polite quit request" -msgstr "Artig avslutning" - -#: signal.c:188 -msgid "Child process status changed" -msgstr "Barnprocess fick ändrad status" - -#: signal.c:196 -msgid "Continue previously stopped process" -msgstr "Fortsätt tidigare stannad process" - -#: signal.c:204 -msgid "Forced stop" -msgstr "Tvingad att stoppa" - -#: signal.c:212 -msgid "Stop request from job control (^Z)" -msgstr "Stoppad genom jobbkontroll (^Z)" - -#: signal.c:220 -msgid "Stop from terminal input" -msgstr "Stoppad frÃ¥n terminalläsning" - -#: signal.c:228 -msgid "Stop from terminal output" -msgstr "Stoppad frÃ¥n terminalskrivning" - -#: signal.c:236 -msgid "Urgent socket condition" -msgstr "Viktig socket-situation" - -#: signal.c:244 -msgid "CPU time limit exceeded" -msgstr "Slut pÃ¥ processortid" - -#: signal.c:252 -msgid "File size limit exceeded" -msgstr "Maximal filstorlek överskriden" - -#: signal.c:260 -msgid "Virtual timer expired" -msgstr "Virtuell timer utlöst" - -#: signal.c:268 -msgid "Profiling timer expired" -msgstr "Profileringstimer utlöst" - -#: signal.c:276 signal.c:284 -msgid "Window size change" -msgstr "Terminalfönstret ändrade storlek" - -#: signal.c:292 -msgid "I/O on asynchronous file descriptor is possible" -msgstr "Läsning/skrivning pÃ¥ asynkron filidentifierare möjligt" - -#: signal.c:300 -msgid "Power failure" -msgstr "Strömavbrott" - -#: signal.c:308 -msgid "Bad system call" -msgstr "Felaktigt systemanrop" - -#: signal.c:316 -msgid "Information request" -msgstr "Informationsbegäran" - -#: signal.c:324 -msgid "Stack fault" -msgstr "Stackfel" - -#: signal.c:332 -msgid "Emulator trap" -msgstr "Emulatorfälla" - -#: signal.c:340 -msgid "Abort (Alias for SIGABRT)" -msgstr "Avbrott (Alias för SIGABRT)" - -#: signal.c:348 -msgid "Unused signal" -msgstr "Oanvänd signal" - -#: signal.c:667 -msgid "Signal block mismatch" -msgstr "Signalblockeringar matchar inte varandra" - -#: tokenizer.c:30 -msgid "Unexpected end of string, quotes are not balanced" -msgstr "Oväntat slut pÃ¥ textsträng, citationstecknen är inte balanserade" - -#: tokenizer.c:35 -msgid "Unexpected end of string, parenthesis do not match" -msgstr "Oväntat slut pÃ¥ textsträng, paranteserna är inte balanserade" - -#: tokenizer.c:40 -msgid "Invalid input/output redirection" -msgstr "Ogiltig IO dirigering" - -#: tokenizer.c:45 -msgid "Can not use fd 0 as pipe output" -msgstr "Kan inte skicka rördata till filidentifierare 0" - -#: tokenizer.c:62 -msgid "Tokenizer not yet initialized" -msgstr "Symbolavdelaren inte initierad" - -#: tokenizer.c:63 -msgid "Tokenizer error" -msgstr "Symbolavdelarfel" - -#: tokenizer.c:64 -msgid "Invalid token" -msgstr "Ogiltig symbol" - -#: tokenizer.c:65 -msgid "String" -msgstr "Textsträng" - -#: tokenizer.c:66 -msgid "Pipe" -msgstr "Rör" - -#: tokenizer.c:67 -msgid "End of command" -msgstr "Slut av kommando" - -#: tokenizer.c:68 -msgid "Redirect output to file" -msgstr "IO dirigering av utdata till fil" - -#: tokenizer.c:69 -msgid "Append output to file" -msgstr "IO dirigering av utdata till slutet av fil" - -#: tokenizer.c:70 -msgid "Redirect input to file" -msgstr "IO dirigering av indata till fil" - -#: tokenizer.c:71 -msgid "Redirect to file descriptor" -msgstr "IO dirigering till filidentifierare" - -#: tokenizer.c:72 -msgid "Redirect output to file if file does not exist" -msgstr "IO dirigering av utdata till fil om filen inte existerar" - -#: tokenizer.c:73 -msgid "Run job in background" -msgstr "Kör jobb i bakgrunden" - -#: tokenizer.c:74 -msgid "Comment" -msgstr "Kommentar" - -#: tokenizer.c:512 -msgid "Invalid token type" -msgstr "Ogiltig symboltyp" - -#: wgetopt.c:542 -#, c-format -msgid "%ls: Option '%ls' is ambiguous\n" -msgstr "%ls: Flaggan â€%ls†är tvetydig\n" - -#: wgetopt.c:566 -#, c-format -msgid "%ls: Option '--%ls' doesn't allow an argument\n" -msgstr "%ls: Flaggan â€--%ls†tar inget argument\n" - -#: wgetopt.c:571 -#, c-format -msgid "%ls: Option '%lc%ls' doesn't allow an argument\n" -msgstr "%ls: Flaggan â€%lc%ls†tar inget argument\n" - -#: wgetopt.c:585 -#, c-format -msgid "%ls: Option '%ls' requires an argument\n" -msgstr "%ls: Flaggan â€%ls†kräver ett argument\n" - -#: wgetopt.c:613 -#, c-format -msgid "%ls: Unrecognized option '--%ls'\n" -msgstr "%ls: Okänd flagga â€--%lsâ€\n" - -#: wgetopt.c:617 -#, c-format -msgid "%ls: Unrecognized option '%lc%ls'\n" -msgstr "%ls: Okänd flagga â€%lc%lsâ€\n" - -#: wgetopt.c:642 -#, c-format -msgid "%ls: Illegal option -- %lc\n" -msgstr "%ls: Ogiltig flagga -- â€%lcâ€\n" - -#: wgetopt.c:644 -#, c-format -msgid "%ls: Invalid option -- %lc\n" -msgstr "%ls: Ogiltigt flagga -- %lc\n" - -#: wgetopt.c:678 -#, c-format -msgid "%ls: Option requires an argument -- %lc\n" -msgstr "%ls: Flaggan kräver ett argument -- %lc\n" - -#: wildcard.c:58 -msgid "Executable" -msgstr "Program" - -#: wildcard.c:62 -msgid "Executable link" -msgstr "Länk till program" - -#: wildcard.c:67 -msgid "File" -msgstr "Fil" - -#: wildcard.c:71 -msgid "Character device" -msgstr "Teckenenhet" - -#: wildcard.c:75 -msgid "Block device" -msgstr "Blockenhet" - -#: wildcard.c:79 -msgid "Fifo" -msgstr "Fifo" - -#: wildcard.c:83 -msgid "Symbolic link" -msgstr "Symbolisk länk" - -# -#: wildcard.c:87 -msgid "Symbolic link to directory" -msgstr "Symboliska länk till katalog" - -#: wildcard.c:91 -msgid "Rotten symbolic link" -msgstr "Rutten symbolisk länk" - -#: wildcard.c:95 -msgid "Symbolic link loop" -msgstr "Slinga av symboliska länkar" - -#: wildcard.c:99 -msgid "Socket" -msgstr "Uttag (socket)" - -#: wildcard.c:103 share/completions/ruby.fish:23 -#: share/functions/__fish_complete_directories.fish:8 -msgid "Directory" -msgstr "Katalog" - -#: wildcard.c:737 -msgid "empty" -msgstr "tom" - -#: builtin.h:24 -#, c-format -msgid "%ls: Expected argument\n" -msgstr "%ls: Förväntade argument\n" - -#: builtin.h:34 -#, c-format -msgid "" -"%ls: Invalid combination of options,\n" -"%ls\n" -msgstr "" -"%ls: Ogiltig kombination av flaggor,\n" -"%ls\n" - -#: builtin.h:39 -#, c-format -msgid "%ls: Variable scope can only be one of universal, global and local\n" -msgstr "%ls: En variabels definitionsomrÃ¥de kan bara vara en av universal, global och lokal\n" - -#: builtin.h:44 -#, c-format -msgid "%ls: Variable can't be both exported and unexported\n" -msgstr "%ls: Variabel kan inte vara bÃ¥de exporterad och oexporterad\n" - -#: builtin.h:49 -#, c-format -msgid "%ls: Unknown option '%ls'\n" -msgstr "%ls: Okänd flagga â€%lsâ€\n" - -#: builtin.h:54 -#, c-format -msgid "" -"%ls: Invalid character '%lc' in variable name. Only alphanumerical " -"characters and underscores are valid in a variable name.\n" -msgstr "" -"%ls: Ogiltigt tecken â€%lc†i variabelnamn. Bara alfanumeriska tecken och " -"understreck är tillÃ¥tna i variabelnamn.\n" - -#: builtin.h:59 -#, c-format -msgid "%ls: Variable name can not be the empty string\n" -msgstr "%ls: Den tomma strängen är inte ett tillÃ¥tet variabelnamn\n" - -#: builtin.h:64 -#, c-format -msgid "%ls: Second argument must be 'in'\n" -msgstr "%ls: Andra argumentet mÃ¥ste vara â€inâ€\n" - -#: builtin.h:69 -#, c-format -msgid "%ls: Expected at least two arguments, got %d\n" -msgstr "%ls: Förväntade minst tvÃ¥ argument, fick %d\n" - -#: builtin.h:71 -#, c-format -msgid "%ls: '%ls' is not a valid variable name\n" -msgstr "%ls: â€%ls†är ett ogiltigt variabelnamn\n" - -#: builtin.h:81 -#, c-format -msgid "%ls: Block mismatch: '%ls' vs. '%ls'\n" -msgstr "%ls: Blockmismatchning: â€%ls†mot â€%lsâ€\n" - -#: builtin.h:86 -#, c-format -msgid "%ls: Unknown block type '%ls'\n" -msgstr "%ls: Okänd blocktyp â€%lsâ€\n" - -#: builtin.h:88 -#, c-format -msgid "%ls: Argument '%ls' is not a number\n" -msgstr "%ls: Argumentet â€%ls†är inte ett nummer\n" - -#: common.h:100 -#, c-format -msgid "function %s called with null value for argument %s. " -msgstr "funktionen %s anropades med nollvärde som argument %s. " - -#: common.h:140 -#, c-format -msgid "function %s called while blocking signals. " -msgstr "funktionen %s anropades medan signaler var blockerade. " - -#: exec.h:19 -msgid "An error occurred while setting up pipe" -msgstr "Ett fel inträffade under skapandet av ett rör" - -#: expand.h:118 -msgid "Array index out of bounds" -msgstr "Arrayindexet är otÃ¥llÃ¥tet" - -#: output.h:87 -#, c-format -msgid "" -"Tried to use terminfo string %s on line %d of %s, which is undefined in " -"terminal of type \"%ls\". Please report this error to %s" -msgstr "Försökte använda terminfosträng %s pÃ¥ rad %d av %s, vilken är odefinerad i terminaler av typen â€%lsâ€. Vänligen rapportera detta fel till %s" #: share/completions/apm.fish:2 share/completions/apropos.fish:20 #: share/completions/apt-build.fish:29 share/completions/apt-cache.fish:28 @@ -1783,7 +1957,10 @@ msgstr "Försökte använda terminfosträng %s pÃ¥ rad %d av %s, vilken är odef #: share/completions/apt-sortpkgs.fish:4 share/completions/apt-zip-inst.fish:3 #: share/completions/apt-zip-list.fish:3 share/completions/at.fish:2 #: share/completions/atq.fish:2 share/completions/atrm.fish:2 +#: share/completions/perl.fish:41 share/functions/__fish_complete_diff.fish:26 +#: share/functions/__fish_complete_grep.fish:44 #: share/functions/__fish_complete_ls.fish:96 +#: share/functions/__fish_complete_python.fish:15 #: share/functions/__fish_complete_tex.fish:5 msgid "Display version and exit" msgstr "Visa version och avsluta" @@ -1820,8 +1997,9 @@ msgstr "Visa debuginformation" #: share/completions/apt-listchanges.fish:4 #: share/completions/apt-proxy-import.fish:4 #: share/completions/apt-show-source.fish:10 +#: share/functions/__fish_complete_python.fish:14 #: share/functions/__fish_complete_ssh.fish:59 -#: share/functions/__fish_complete_vi.fish:106 +#: share/functions/__fish_complete_vi.fish:98 msgid "Verbose mode" msgstr "Utförligt läge" @@ -1873,7 +2051,7 @@ msgstr "Nedladda och extrahera källkod" msgid "Info on a package" msgstr "Visa info om paket" -#: share/completions/apt-build.fish:10 +#: share/completions/apt-build.fish:10 share/completions/zypper.fish:45 msgid "Remove packages" msgstr "Radera paket" @@ -2037,6 +2215,11 @@ msgstr "Välj konfigurationsfil" msgid "Specify options" msgstr "Välj inställningar" +#: share/completions/apt-cache.fish:32 share/completions/apt-get.fish:12 +#: share/completions/apt-mark.fish:12 +msgid "Test if apt command should have packages as potential completion" +msgstr "Testa om aptkommando borde ha paket som potentiell komplettering" + #: share/completions/apt-cdrom.fish:3 msgid "Add new disc to source list" msgstr "Lägg till skiva till källlista" @@ -2173,14 +2356,10 @@ msgstr "Välj konfigurationsfil" msgid "Set config options" msgstr "Välj konfigurationsinställningar" -#: share/completions/apt-get.fish:3 +#: share/completions/apt-get.fish:3 share/completions/apt-mark.fish:3 msgid "Test if apt has yet to be given the subcommand" msgstr "Testa om apt har tagit emot ett underkommando" -#: share/completions/apt-get.fish:12 -msgid "Test if apt command should have packages as potential completion" -msgstr "Testa om aptkommando borde ha paket som potentiell komplettering" - #: share/completions/apt-get.fish:24 msgid "Update sources" msgstr "Uppdatera källor" @@ -2202,34 +2381,44 @@ msgid "Install one or more packages" msgstr "Installera ett eller flera paket" #: share/completions/apt-get.fish:29 -msgid "Remove one or more packages" +#, fuzzy +msgid "Remove and purge one or more packages" msgstr "Radera ett eller flera paket" #: share/completions/apt-get.fish:30 +msgid "Remove one or more packages" +msgstr "Radera ett eller flera paket" + +#: share/completions/apt-get.fish:31 msgid "Fetch source packages" msgstr "Hämta källkodspaket" -#: share/completions/apt-get.fish:31 +#: share/completions/apt-get.fish:32 msgid "Install/remove packages for dependencies" msgstr "Installera/ta bort paket för beroenden" -#: share/completions/apt-get.fish:32 +#: share/completions/apt-get.fish:33 msgid "Update cache and check dependencies" msgstr "Uppdatera källkod och verifiera beroenden" -#: share/completions/apt-get.fish:33 +#: share/completions/apt-get.fish:34 msgid "Clean local caches and packages" msgstr "Rengör lokala cachear och paket" -#: share/completions/apt-get.fish:34 +#: share/completions/apt-get.fish:35 msgid "Clean packages no longer be downloaded" msgstr "Rengör paket som inte längre skall nedladdas" -#: share/completions/apt-get.fish:62 +#: share/completions/apt-get.fish:36 +#, fuzzy +msgid "Remove automatically installed packages" +msgstr "FrÃ¥ga alla installerade paket" + +#: share/completions/apt-get.fish:65 share/completions/apt-mark.fish:32 msgid "Specify a config file" msgstr "Välj en konfigurationsfil" -#: share/completions/apt-get.fish:63 +#: share/completions/apt-get.fish:66 share/completions/apt-mark.fish:33 msgid "Set a config option" msgstr "Välj en konfigurationsinställning" @@ -2349,6 +2538,45 @@ msgstr "Visa debuginformation" msgid "Select an option profile" msgstr "Välj än inställningsprofil" +#: share/completions/apt-mark.fish:24 +#, fuzzy +msgid "Mark a package as automatically installed" +msgstr "Upgradera paket om det är installerat" + +#: share/completions/apt-mark.fish:25 +#, fuzzy +msgid "Mark a package as manually installed" +msgstr "Upgradera paket om det är installerat" + +#: share/completions/apt-mark.fish:26 +msgid "Hold a package, prevent automatic installation or removal" +msgstr "" + +#: share/completions/apt-mark.fish:27 +#, fuzzy +msgid "Cancel a hold on a package" +msgstr "Visa info om paket" + +#: share/completions/apt-mark.fish:28 +#, fuzzy +msgid "Show automatically installed packages" +msgstr "FrÃ¥ga alla installerade paket" + +#: share/completions/apt-mark.fish:29 +#, fuzzy +msgid "Show manually installed packages" +msgstr "FrÃ¥ga alla installerade paket" + +#: share/completions/apt-mark.fish:30 +#, fuzzy +msgid "Show held packages" +msgstr "Visa uppgraderade paket" + +#: share/completions/apt-mark.fish:34 +#, fuzzy +msgid "Write package statistics to a file" +msgstr "Skriv prototyper till fil" + #: share/completions/apt-move.fish:4 msgid "Move packages to local tree" msgstr "Flytta paket till lokalt träd" @@ -2818,7 +3046,241 @@ msgstr "Debugläge" msgid "Process at queue only once" msgstr "Processa â€atâ€-kö bara en gÃ¥ng" +#: share/completions/bundle.fish:3 +#, fuzzy +msgid "Test if bundle has been given no subcommand" +msgstr "Testa om aptitude har tagit emot ett underkommando" + +#: share/completions/bundle.fish:11 +#, fuzzy +msgid "Test if bundle has been given a specific subcommand" +msgstr "Testa om aptitude har tagit emot ett underkommando" + +#: share/completions/bundle.fish:30 +#, fuzzy +msgid "Display a help page" +msgstr "Visa manualsida" + +#: share/completions/bundle.fish:38 share/completions/bundle.fish:65 +msgid "Install the gems specified by the Gemfile or Gemfile.lock" +msgstr "" + +#: share/completions/bundle.fish:39 share/completions/bundle.fish:87 +msgid "The location of the Gemfile bundler should use." +msgstr "" + +#: share/completions/bundle.fish:40 +#, fuzzy +msgid "The location to install the gems in the bundle to." +msgstr "Lägg till fil eller träd utan version till förrÃ¥det" + +#: share/completions/bundle.fish:41 +msgid "Installs the gems in the bundle to the system location." +msgstr "" + +#: share/completions/bundle.fish:42 +msgid "A space-separated list of groups to skip installing." +msgstr "" + +#: share/completions/bundle.fish:43 +msgid "Use cached gems instead of connecting to rubygems.org." +msgstr "" + +#: share/completions/bundle.fish:44 +msgid "Switches bundler's defaults into deployment mode." +msgstr "" + +#: share/completions/bundle.fish:45 +msgid "" +"Create a directory containing executabes that run in the context of the " +"bundle." +msgstr "" + +#: share/completions/bundle.fish:46 +msgid "Specify a ruby executable to use with generated binstubs." +msgstr "" + +#: share/completions/bundle.fish:47 +msgid "Make a bundle that can work without RubyGems or Bundler at run-time." +msgstr "" + +#: share/completions/bundle.fish:48 +msgid "Apply a RubyGems security policy: {High,Medium,Low,No}Security" +msgstr "" + +#: share/completions/bundle.fish:49 +msgid "Do not update the cache in vendor/cache with the newly bundled gems." +msgstr "" + +#: share/completions/bundle.fish:50 +#, fuzzy +msgid "Do not print progress information to stdout." +msgstr "Visa all information" + +#: share/completions/bundle.fish:53 share/completions/bundle.fish:66 +#, fuzzy +msgid "Update dependencies to their latest versions" +msgstr "Visa alla källkodspaket med version" + +#: share/completions/bundle.fish:54 +msgid "The name of a :git or :path source used in the Gemfile." +msgstr "" + +#: share/completions/bundle.fish:58 +msgid "" +"Package the .gem files required by your application into the vendor/cache " +"directory" +msgstr "" + +#: share/completions/bundle.fish:61 share/completions/bundle.fish:68 +msgid "Execute a script in the context of the current bundle" +msgstr "" + +#: share/completions/bundle.fish:64 +msgid "Describe available tasks or one specific task" +msgstr "" + +#: share/completions/bundle.fish:67 +#, fuzzy +msgid "Package .gem files into the vendor/cache directory" +msgstr "Ändra arbetskatalog" + +#: share/completions/bundle.fish:69 +msgid "Check bundler requirements for your application" +msgstr "" + +#: share/completions/bundle.fish:70 share/completions/bundle.fish:92 +#, fuzzy +msgid "Show all of the gems in the current bundle" +msgstr "Nedstig aldrig i föräldrakatalog" + +#: share/completions/bundle.fish:71 share/completions/bundle.fish:96 +#, fuzzy +msgid "Show the source location of a particular gem in the bundle" +msgstr "Visa process-id för varje process i jobbet" + +#: share/completions/bundle.fish:72 share/completions/bundle.fish:100 +msgid "Show all of the outdated gems in the current bundle" +msgstr "" + +#: share/completions/bundle.fish:73 share/completions/bundle.fish:107 +msgid "Start an IRB session in the context of the current bundle" +msgstr "" + +#: share/completions/bundle.fish:74 share/completions/bundle.fish:110 +#, sh-format +msgid "Open an installed gem in your $EDITOR" +msgstr "" + +#: share/completions/bundle.fish:75 share/completions/bundle.fish:114 +msgid "Generate a visual representation of your dependencies" +msgstr "" + +#: share/completions/bundle.fish:76 +#, fuzzy +msgid "Generate a simple Gemfile" +msgstr "Generera huvudfil" + +#: share/completions/bundle.fish:77 share/completions/bundle.fish:125 +msgid "Create a simple gem, suitable for development with bundler" +msgstr "" + +#: share/completions/bundle.fish:78 share/completions/bundle.fish:131 +#, fuzzy +msgid "Displays platform compatibility information" +msgstr "Visa uppdateringsinformation" + +#: share/completions/bundle.fish:79 share/completions/bundle.fish:135 +msgid "Cleans up unused gems in your bundler directory" +msgstr "" + +#: share/completions/bundle.fish:86 +msgid "" +"Determine whether the requirements for your application are installed and " +"available to bundler" +msgstr "" + +#: share/completions/bundle.fish:88 +msgid "Specify a path other than the system default (BUNDLE_PATH or GEM_HOME)." +msgstr "" + +#: share/completions/bundle.fish:89 +#, fuzzy +msgid "Lock the Gemfile" +msgstr "Logga till spÃ¥rfil" + +#: share/completions/bundle.fish:93 +msgid "List the paths of all gems required by your Gemfile" +msgstr "" + +#: share/completions/bundle.fish:101 +#, fuzzy +msgid "Check for newer pre-release gems" +msgstr "Kontrollera förekomst av minnesläckor" + +#: share/completions/bundle.fish:102 +msgid "Check against a specific source" +msgstr "" + +#: share/completions/bundle.fish:103 +msgid "Use cached gems instead of attempting to fetch gems remotely" +msgstr "" + +#: share/completions/bundle.fish:115 +msgid "The name to use for the generated file (see format option)" +msgstr "" + +#: share/completions/bundle.fish:116 +#, fuzzy +msgid "Show each gem version" +msgstr "Källkodsträdsversion" + +#: share/completions/bundle.fish:117 +msgid "Show the version of each required dependency" +msgstr "" + +#: share/completions/bundle.fish:118 +msgid "Output a specific format (png, jpg, svg, dot, ...)" +msgstr "" + +#: share/completions/bundle.fish:121 +#, fuzzy +msgid "Generate a simple Gemfile, placed in the current directory" +msgstr "Nedstig aldrig i föräldrakatalog" + +#: share/completions/bundle.fish:122 +msgid "Use a specified .gemspec to create the Gemfile" +msgstr "" + +#: share/completions/bundle.fish:126 +msgid "Generate a binary for your library" +msgstr "" + +#: share/completions/bundle.fish:127 +msgid "Generate a test directory for your library (rspec or minitest)" +msgstr "" + +#: share/completions/bundle.fish:128 +#, fuzzy +msgid "Path to your editor" +msgstr "Välj källkatalog" + +#: share/completions/bundle.fish:132 +#, fuzzy +msgid "Only display Ruby directive information" +msgstr "Visa uppdateringsinformation" + +#: share/completions/bundle.fish:136 +msgid "Only print out changes, do not actually clean gems" +msgstr "" + +#: share/completions/bundle.fish:137 +msgid "Forces clean even if --path is not set" +msgstr "" + #: share/completions/configure.fish:1 +#: share/functions/__fish_complete_diff.fish:27 +#: share/functions/__fish_complete_grep.fish:22 #: share/functions/__fish_complete_ls.fish:95 #: share/functions/__fish_complete_tex.fish:4 msgid "Display help and exit" @@ -2844,248 +3306,248 @@ msgstr "Kontrollera skapandet av glesa filer" msgid "Set security context of copy to CONTEXT" msgstr "Ange säkerhetskontext för kopia" -#: share/completions/cut.fish:1 +#: share/completions/cut.fish:2 msgid "Output byte range" msgstr "Välj bytsekvens" -#: share/completions/cut.fish:2 +#: share/completions/cut.fish:3 msgid "Output character range" msgstr "Välj teckensekvens" -#: share/completions/cut.fish:3 +#: share/completions/cut.fish:4 msgid "Select field delimiter" msgstr "Välj fältavgränsare" -#: share/completions/cut.fish:4 +#: share/completions/cut.fish:5 msgid "Select fields" msgstr "Välj fält" -#: share/completions/cvs.fish:25 +#: share/completions/cvs.fish:26 #, fuzzy msgid "Use \\tmpdir for temporary files." msgstr "Välj temporär katalog" -#: share/completions/cvs.fish:26 +#: share/completions/cvs.fish:27 #, fuzzy msgid "Use \\editor for editing log information." msgstr "Välj editor för loginformationsredigering" -#: share/completions/cvs.fish:27 +#: share/completions/cvs.fish:28 #, sh-format msgid "Overrides $CVSROOT as the root of the CVS tree." msgstr "" -#: share/completions/cvs.fish:29 +#: share/completions/cvs.fish:30 #, fuzzy -msgid "Use compression level \\# for net traffic." +msgid "Request compression level \\# for net traffic." msgstr "KompressionsnivÃ¥ för nätverkstrafik" -#: share/completions/cvs.fish:34 +#: share/completions/cvs.fish:35 #, fuzzy msgid "Set CVS user variable." msgstr "Välj CVS-användare" -#: share/completions/cvs.fish:40 +#: share/completions/cvs.fish:41 msgid "Add a new file/directory to the repository" msgstr "Lägg till fil/katalog till förrÃ¥d" -#: share/completions/cvs.fish:41 +#: share/completions/cvs.fish:42 msgid "Administration front end for rcs" msgstr "Administrationsfrontend för rcs" -#: share/completions/cvs.fish:42 +#: share/completions/cvs.fish:43 msgid "Show last revision where each line was modified" msgstr "Visa senaste revision vid vilken vare rad ändrades" -#: share/completions/cvs.fish:43 +#: share/completions/cvs.fish:44 msgid "Checkout sources for editing" msgstr "Checka ut källkod för redigering" -#: share/completions/cvs.fish:44 +#: share/completions/cvs.fish:45 msgid "Check files into the repository" msgstr "Checka in filer till förrÃ¥d" -#: share/completions/cvs.fish:45 +#: share/completions/cvs.fish:46 msgid "Show differences between revisions" msgstr "Visa skillnader mellan revisioner" -#: share/completions/cvs.fish:46 +#: share/completions/cvs.fish:47 msgid "Get ready to edit a watched file" msgstr "Förbered redigering av övervakad fil" -#: share/completions/cvs.fish:47 +#: share/completions/cvs.fish:48 msgid "See who is editing a watched file" msgstr "Se vem som redigerar övervakad fil" -#: share/completions/cvs.fish:48 +#: share/completions/cvs.fish:49 msgid "Export sources from CVS, similar to checkout" msgstr "Exportera källkod frÃ¥n CSV" -#: share/completions/cvs.fish:49 +#: share/completions/cvs.fish:50 msgid "Show repository access history" msgstr "Visa förrÃ¥dets Ã¥tkomsthistorik" -#: share/completions/cvs.fish:50 +#: share/completions/cvs.fish:51 msgid "Import sources into CVS, using vendor branches" msgstr "Importera källor till CVS" -#: share/completions/cvs.fish:51 +#: share/completions/cvs.fish:52 #, fuzzy msgid "Create a CVS repository if it doesn\\t" msgstr "Skapa förrÃ¥d om det inte redan existerar" -#: share/completions/cvs.fish:88 +#: share/completions/cvs.fish:91 msgid "Set comment leader." msgstr "" -#: share/completions/cvs.fish:91 +#: share/completions/cvs.fish:94 #, fuzzy msgid "Set keyword substitution mode:" msgstr "Ange standardnyckelordssubstitution" -#: share/completions/cvs.fish:94 +#: share/completions/cvs.fish:97 #, fuzzy msgid "Replace revision\\s" msgstr "SlÃ¥ ihop revisioner" -#: share/completions/cvs.fish:132 +#: share/completions/cvs.fish:135 msgid "Check out revision or tag. (implies -P) (is sticky)" msgstr "" -#: share/completions/cvs.fish:133 +#: share/completions/cvs.fish:136 msgid "Check out revisions as of date. (implies -P) (is sticky)" msgstr "" -#: share/completions/cvs.fish:134 +#: share/completions/cvs.fish:137 msgid "Check out into dir instead of module name." msgstr "" -#: share/completions/cvs.fish:135 +#: share/completions/cvs.fish:138 msgid "Use RCS kopt -k option on checkout. (is sticky)" msgstr "" -#: share/completions/cvs.fish:136 +#: share/completions/cvs.fish:139 msgid "Merge in changes made between current revision and rev." msgstr "" -#: share/completions/cvs.fish:146 +#: share/completions/cvs.fish:150 #, fuzzy msgid "Read the log message from file." msgstr "Läs loggmeddelande frÃ¥n fil" -#: share/completions/cvs.fish:147 +#: share/completions/cvs.fish:151 #, fuzzy msgid "Log message." msgstr "Ersätt ett loggmeddelande" -#: share/completions/cvs.fish:148 +#: share/completions/cvs.fish:152 msgid "Commit to this branch or trunk revision." msgstr "" -#: share/completions/cvs.fish:157 +#: share/completions/cvs.fish:161 #, fuzzy msgid "Specify keyword expansion mode." msgstr "Välj kärnversion" -#: share/completions/cvs.fish:158 +#: share/completions/cvs.fish:162 msgid "Diff revision for date against working file." msgstr "" -#: share/completions/cvs.fish:159 +#: share/completions/cvs.fish:163 msgid "Diff rev1/date1 against date2." msgstr "" -#: share/completions/cvs.fish:160 +#: share/completions/cvs.fish:164 msgid "Diff revision for rev1 against working file." msgstr "" -#: share/completions/cvs.fish:161 +#: share/completions/cvs.fish:165 msgid "Diff rev1/date1 against rev2." msgstr "" -#: share/completions/cvs.fish:166 +#: share/completions/cvs.fish:170 #, fuzzy msgid "--ignore-matching-lines=RE Ignore changes whose lines all match RE." msgstr "Ignorera ändringar som matchar REGEX" -#: share/completions/cvs.fish:172 +#: share/completions/cvs.fish:176 msgid "--label LABEL Use LABEL instead of file name." msgstr "" -#: share/completions/cvs.fish:174 +#: share/completions/cvs.fish:178 msgid "--show-function-line=RE Show the most recent line matching RE." msgstr "" -#: share/completions/cvs.fish:180 +#: share/completions/cvs.fish:184 msgid "--width=NUM Output at most NUM (default 130) characters per line." msgstr "" -#: share/completions/cvs.fish:222 +#: share/completions/cvs.fish:228 #, fuzzy msgid "Export tagged revisions." msgstr "SlÃ¥ ihop revisioner" -#: share/completions/cvs.fish:223 +#: share/completions/cvs.fish:229 msgid "Export revisions as of date." msgstr "" -#: share/completions/cvs.fish:224 +#: share/completions/cvs.fish:230 msgid "Export into dir instead of module name." msgstr "" -#: share/completions/cvs.fish:225 +#: share/completions/cvs.fish:231 msgid "Use RCS kopt -k option on checkout." msgstr "" -#: share/completions/cvs.fish:235 +#: share/completions/cvs.fish:241 msgid "Look for specified module (repeatable)" msgstr "" -#: share/completions/cvs.fish:236 +#: share/completions/cvs.fish:242 #, fuzzy msgid "Extract by record type" msgstr "Ange posttyp" -#: share/completions/cvs.fish:241 +#: share/completions/cvs.fish:247 #, fuzzy msgid "Since date (Many formats)" msgstr "Format för profileringsdata" -#: share/completions/cvs.fish:242 +#: share/completions/cvs.fish:248 msgid "Back to record with str in module/file/repos field" msgstr "" -#: share/completions/cvs.fish:243 +#: share/completions/cvs.fish:249 msgid "Specified file (same as command line) (repeatable)" msgstr "" -#: share/completions/cvs.fish:244 +#: share/completions/cvs.fish:250 msgid "In module (repeatable)" msgstr "" -#: share/completions/cvs.fish:245 +#: share/completions/cvs.fish:251 msgid "In repository (repeatable)" msgstr "" -#: share/completions/cvs.fish:246 +#: share/completions/cvs.fish:252 msgid "Since rev or tag (looks inside RCS files!)" msgstr "" -#: share/completions/cvs.fish:247 +#: share/completions/cvs.fish:253 msgid "Since tag record placed in history file (by anyone)." msgstr "" -#: share/completions/cvs.fish:248 +#: share/completions/cvs.fish:254 msgid "For user name (repeatable)" msgstr "" -#: share/completions/cvs.fish:249 +#: share/completions/cvs.fish:255 msgid "Output for time zone (e.g. -z -0700)" msgstr "" #: share/completions/darcs.fish:19 #, fuzzy -msgid "Display help for darcs or a single commands" +msgid "Display help about darcs and darcs commands" msgstr "Visa användningsinformation för kommando" #: share/completions/darcs.fish:20 @@ -3093,20 +3555,23 @@ msgid "Add one or more new files or directories" msgstr "Lägg till filer eller kataloger till lagret" #: share/completions/darcs.fish:21 -msgid "Remove one or more files or directories from the repository" -msgstr "Ta bort filer eller kataloger frÃ¥n lagret" +#, fuzzy +msgid "Remove files from version control" +msgstr "Placera filer och kataloger under versionskontroll" #: share/completions/darcs.fish:22 -msgid "Move/rename one or more files or directories" -msgstr "Flytta/byt namn pÃ¥ en eller flera filer eller kataloger" +#, fuzzy +msgid "Move or rename files" +msgstr "Skapa inte fil" #: share/completions/darcs.fish:23 -msgid "Replace a token with a new value for that token" -msgstr "Ersätt en symbol med ett nytt värde för den symbolen" +msgid "Substitute one word for another" +msgstr "" #: share/completions/darcs.fish:24 -msgid "Revert to the recorded version (safe the first time only)" -msgstr "Backa till senaste lagrade version (Är bara säkert en gÃ¥ng)" +#, fuzzy +msgid "Discard unrecorded changes" +msgstr "Visa olagrade ändringar i arbetskopian" #: share/completions/darcs.fish:25 msgid "Undo the last revert (may fail if changes after the revert)" @@ -3115,12 +3580,14 @@ msgstr "" "efter revert-operationen)" #: share/completions/darcs.fish:26 -msgid "Display unrecorded changes in the working copy" +#, fuzzy +msgid "List unrecorded changes in the working tree" msgstr "Visa olagrade ändringar i arbetskopian" #: share/completions/darcs.fish:27 -msgid "Save changes in the working copy to the repository as a patch" -msgstr "Spara ändringar i arbetskopian till lagret som en fix" +#, fuzzy +msgid "Create a patch from unrecorded changes" +msgstr "Skapa komprimerade fixar" #: share/completions/darcs.fish:28 msgid "Remove recorded patches without changing the working copy" @@ -3128,260 +3595,291 @@ msgstr "Ta bort lagrade fixar utan att ändra arbetskopian" #: share/completions/darcs.fish:29 #, fuzzy -msgid "Replace a patch with a better version before it leaves your repository" +msgid "Improve a patch before it leaves your repository" msgstr "Ersätt den lagrade fixen med en bättre version" #: share/completions/darcs.fish:30 -msgid "Mark any conflicts to the working copy for manual resolution" +#, fuzzy +msgid "Mark unresolved conflicts in working tree, for manual resolution" msgstr "Markera konflikter mot arketskopian för manuell lösning" #: share/completions/darcs.fish:31 -msgid "Tag the contents of the repository with a version name" -msgstr "Tagga innehÃ¥llet i lagret med ett versionsnummer" +msgid "Name the current repository state for future reference" +msgstr "" #: share/completions/darcs.fish:32 -msgid "Set a value for a preference (test, predist, ...)" +#, fuzzy +msgid "Set a preference (test, predist, boringfile or binariesfile)" msgstr "Välj ett värde för en preferens (test, predisk, ...)" #: share/completions/darcs.fish:33 -#, fuzzy -msgid "Record an inverse patch without changing the working directory" -msgstr "Lagra en omvänd fix utan att ändra arbetskopian" - -#: share/completions/darcs.fish:34 msgid "Create a diff between two versions of the repository" msgstr "Skappa en diff mellan tvÃ¥ versioner i lagret" -#: share/completions/darcs.fish:35 +#: share/completions/darcs.fish:34 #, fuzzy -msgid "Gives a changelog-style summary of the repository history" -msgstr "Ge en changelog-formaterad summering av förrÃ¥dhistorik" +msgid "List patches in the repository" +msgstr "Uppdatera förrÃ¥d" -#: share/completions/darcs.fish:36 +#: share/completions/darcs.fish:35 msgid "Display which patch last modified something" msgstr "Visa vilken fix som senast ändrade nÃ¥gonting" -#: share/completions/darcs.fish:37 +#: share/completions/darcs.fish:36 msgid "Create a distribution tarball" msgstr "Skapa distribuerbar tar-fil" -#: share/completions/darcs.fish:38 +#: share/completions/darcs.fish:37 msgid "Locate the most recent version lacking an error" msgstr "Hitta senaste version utan ett givet fel" -#: share/completions/darcs.fish:39 -msgid "Query information which is stored by darcs" +#: share/completions/darcs.fish:38 +msgid "Show information which is stored by darcs" msgstr "" -#: share/completions/darcs.fish:40 +#: share/completions/darcs.fish:39 msgid "Copy and apply patches from another repository to this one" msgstr "Kopiera och applicera fixar frÃ¥n ett annat förrÃ¥d till detta" -#: share/completions/darcs.fish:41 -#, fuzzy -msgid "Opposite of pull; unsafe if patch is not in remote repository" -msgstr "Motsatsen till pull, osäker om fixen inte finns i fjärrlagret" - -#: share/completions/darcs.fish:42 +#: share/completions/darcs.fish:40 #, fuzzy msgid "Delete selected patches from the repository. (UNSAFE!)" msgstr "Ordna om fixarna i förrÃ¥det" -#: share/completions/darcs.fish:43 +#: share/completions/darcs.fish:41 +msgid "Record a new patch reversing some recorded changes" +msgstr "" + +#: share/completions/darcs.fish:42 msgid "Copy and apply patches from this repository to another one" msgstr "Kopiera och applicera fixar frÃ¥n detta förrÃ¥d till ett annat" -#: share/completions/darcs.fish:44 +#: share/completions/darcs.fish:43 msgid "Send by email a bundle of one or more patches" msgstr "Skicka e-postpaket av en eller flera fixar" -#: share/completions/darcs.fish:45 -msgid "Apply patches (from an email bundle) to the repository" -msgstr "Applicera fixar (frÃ¥n e-postpaket) till lagret" +#: share/completions/darcs.fish:44 +msgid "" +"Apply a patch bundle created by `darcs send\\\n" +"complete -c darcs -n __fish_use_subcommand -x -a get --description Create" +msgstr "" -#: share/completions/darcs.fish:46 -msgid "Create a local copy of another repository" -msgstr "Skapa lokal kopia av förrÃ¥d" - -#: share/completions/darcs.fish:47 +#: share/completions/darcs.fish:71 share/completions/darcs.fish:220 +#: share/completions/darcs.fish:283 share/completions/darcs.fish:439 +#: share/completions/darcs.fish:597 share/completions/darcs.fish:632 +#: share/completions/darcs.fish:663 share/completions/darcs.fish:688 +#: share/completions/darcs.fish:801 share/completions/darcs.fish:959 +#: share/completions/darcs.fish:1010 share/completions/darcs.fish:1054 +#: share/completions/darcs.fish:1095 share/completions/darcs.fish:1122 +#: share/completions/darcs.fish:1155 #, fuzzy -msgid "Makes a copy of the repository" -msgstr "Skapa lokal kopia av förrÃ¥d" +msgid "Specify command to run before this darcs command" +msgstr "Ange kommando att köra efter detta darcs-kommando" -#: share/completions/darcs.fish:48 -#, fuzzy -msgid "Initialize a new source tree as a darcs repository" -msgstr "Checka in filer till förrÃ¥d" +#: share/completions/darcs.fish:101 share/completions/darcs.fish:127 +#: share/completions/darcs.fish:156 share/completions/darcs.fish:186 +#: share/completions/darcs.fish:244 share/completions/darcs.fish:324 +#: share/completions/darcs.fish:363 share/completions/darcs.fish:406 +#: share/completions/darcs.fish:467 share/completions/darcs.fish:492 +#: share/completions/darcs.fish:840 share/completions/darcs.fish:1004 +#: share/completions/darcs.fish:1207 +msgid "Specify umask to use when writing" +msgstr "" -#: share/completions/darcs.fish:49 -msgid "Optimize the repository" -msgstr "Optimera förrÃ¥d" - -#: share/completions/darcs.fish:50 -msgid "Check the repository for consistency" -msgstr "Kontrollera lagrets konsistens" - -#: share/completions/darcs.fish:51 -msgid "Repair the corrupted repository" -msgstr "Reparera trasigt förrÃ¥d" - -#: share/completions/darcs.fish:85 share/completions/darcs.fish:228 -#: share/completions/darcs.fish:252 share/completions/darcs.fish:410 -#: share/completions/darcs.fish:434 share/completions/darcs.fish:465 -#: share/completions/darcs.fish:510 share/completions/darcs.fish:560 -#: share/completions/darcs.fish:593 share/completions/darcs.fish:636 -#: share/completions/darcs.fish:674 share/completions/darcs.fish:704 +#: share/completions/darcs.fish:102 share/completions/darcs.fish:128 +#: share/completions/darcs.fish:157 share/completions/darcs.fish:187 +#: share/completions/darcs.fish:245 share/completions/darcs.fish:326 +#: share/completions/darcs.fish:364 share/completions/darcs.fish:408 +#: share/completions/darcs.fish:468 share/completions/darcs.fish:493 +#: share/completions/darcs.fish:537 share/completions/darcs.fish:753 +#: share/completions/darcs.fish:841 share/completions/darcs.fish:893 +#: share/completions/darcs.fish:1183 share/completions/darcs.fish:1208 +#: share/completions/darcs.fish:1239 #, fuzzy msgid "Specify command to run after this darcs command" msgstr "Ange kommando att köra efter detta darcs-kommando" -#: share/completions/darcs.fish:225 share/completions/darcs.fish:249 -#: share/completions/darcs.fish:405 share/completions/darcs.fish:431 -#: share/completions/darcs.fish:462 share/completions/darcs.fish:557 -#: share/completions/darcs.fish:632 share/completions/darcs.fish:700 -#: share/completions/darcs.fish:717 +#: share/completions/darcs.fish:116 share/completions/darcs.fish:146 +#: share/completions/darcs.fish:203 share/completions/darcs.fish:234 +#: share/completions/darcs.fish:264 share/completions/darcs.fish:352 +#: share/completions/darcs.fish:456 share/completions/darcs.fish:482 +#: share/completions/darcs.fish:525 share/completions/darcs.fish:725 +#: share/completions/darcs.fish:779 share/completions/darcs.fish:829 +#: share/completions/darcs.fish:870 share/completions/darcs.fish:985 +#: share/completions/darcs.fish:1073 share/completions/darcs.fish:1197 msgid "Specify the repository directory in which to run" msgstr "Välj vilket förrÃ¥d som skall användas" -#: share/completions/darcs.fish:238 share/completions/darcs.fish:520 +#: share/completions/darcs.fish:171 +#, fuzzy +msgid "Define token to contain these characters" +msgstr "Dela inte multibytesekvenser" + +#: share/completions/darcs.fish:340 share/completions/darcs.fish:554 +#: share/completions/darcs.fish:767 msgid "Select changes starting with a patch matching PATTERN" msgstr "Välj ändringar som börjar med fix som matchar MÖNSTER" -#: share/completions/darcs.fish:239 share/completions/darcs.fish:521 +#: share/completions/darcs.fish:341 share/completions/darcs.fish:555 +#: share/completions/darcs.fish:768 msgid "Select changes starting with a patch matching REGEXP" msgstr "Välj ändringar som börjar med fix som matchar REGEXP" -#: share/completions/darcs.fish:240 share/completions/darcs.fish:522 +#: share/completions/darcs.fish:342 share/completions/darcs.fish:556 +#: share/completions/darcs.fish:769 msgid "Select changes starting with a tag matching REGEXP" msgstr "Välj ändringar som börjar med tagg som matchar REGEXP" -#: share/completions/darcs.fish:241 share/completions/darcs.fish:523 +#: share/completions/darcs.fish:343 share/completions/darcs.fish:557 +#: share/completions/darcs.fish:770 msgid "Select the last NUMBER patches" msgstr "Välj angivet antal fixar av de senaste fixarna" -#: share/completions/darcs.fish:242 share/completions/darcs.fish:482 -#: share/completions/darcs.fish:524 share/completions/darcs.fish:573 -#: share/completions/darcs.fish:606 +#: share/completions/darcs.fish:344 share/completions/darcs.fish:559 +#: share/completions/darcs.fish:771 share/completions/darcs.fish:855 +#: share/completions/darcs.fish:907 msgid "Select patches matching PATTERN" msgstr "Välj fixar som matchar MÖNSTER" -#: share/completions/darcs.fish:243 share/completions/darcs.fish:483 -#: share/completions/darcs.fish:525 share/completions/darcs.fish:574 -#: share/completions/darcs.fish:607 +#: share/completions/darcs.fish:345 share/completions/darcs.fish:560 +#: share/completions/darcs.fish:772 share/completions/darcs.fish:856 +#: share/completions/darcs.fish:908 msgid "Select patches matching REGEXP" msgstr "Välj fixar som matchar REGEXP" -#: share/completions/darcs.fish:244 share/completions/darcs.fish:484 -#: share/completions/darcs.fish:526 share/completions/darcs.fish:575 -#: share/completions/darcs.fish:608 +#: share/completions/darcs.fish:346 share/completions/darcs.fish:561 +#: share/completions/darcs.fish:773 share/completions/darcs.fish:857 +#: share/completions/darcs.fish:909 msgid "Select tags matching REGEXP" msgstr "Välj taggar som matchar REGEXP" -#: share/completions/darcs.fish:262 share/completions/darcs.fish:427 -msgid "Select patch matching PATTERN" +#: share/completions/darcs.fish:378 +#, fuzzy +msgid "Select a single patch matching PATTERN" msgstr "Välj fix som matchar MÖNSTER" -#: share/completions/darcs.fish:263 share/completions/darcs.fish:428 -msgid "Select patch matching REGEXP" +#: share/completions/darcs.fish:379 +#, fuzzy +msgid "Select a single patch matching REGEXP" msgstr "Välj fix som matchar REGEXP" -#: share/completions/darcs.fish:404 -msgid "Specify the repository URL" -msgstr "Ange förrÃ¥d-URL" - -#: share/completions/darcs.fish:429 share/completions/darcs.fish:689 -#: share/completions/darcs.fish:720 -msgid "Select tag matching REGEXP" -msgstr "Välj tagg som matchar REGEXP" - -#: share/completions/darcs.fish:430 -msgid "Specify hash of creator patch (see docs)" -msgstr "Ange hash av skaparfix (se dokumentationen)" - -#: share/completions/darcs.fish:444 +#: share/completions/darcs.fish:380 #, fuzzy -msgid "Name of version" -msgstr "NAmn pÃ¥ version at använda som kontrollpunkt" +msgid "Select one patch" +msgstr "Välj en handling" -#: share/completions/darcs.fish:489 -msgid "Use external tool to merge conflicts" -msgstr "Använd externt verktyg för att hantera sammanslagningskonflikter" - -#: share/completions/darcs.fish:578 share/completions/darcs.fish:722 -msgid "Apply patch as another user using sudo" -msgstr "" - -#: share/completions/darcs.fish:611 -msgid "Specify email address" -msgstr "Välj e-postkatalog" - -#: share/completions/darcs.fish:612 +#: share/completions/darcs.fish:387 share/completions/darcs.fish:916 msgid "Specify author id" msgstr "Ange författar-id" -#: share/completions/darcs.fish:613 +#: share/completions/darcs.fish:388 +msgid "Name of patch" +msgstr "Namn pÃ¥ fix" + +#: share/completions/darcs.fish:501 +msgid "Shell command that runs regression tests" +msgstr "" + +#: share/completions/darcs.fish:502 +msgid "" +"Shell command to run before `darcs dist\\\n" +"complete -c darcs -n contains" +msgstr "" + +#: share/completions/darcs.fish:551 share/completions/darcs.fish:1025 +msgid "Select changes up to a patch matching PATTERN" +msgstr "Välj ändringar fram till fix som matchar MÖNSTER" + +#: share/completions/darcs.fish:552 share/completions/darcs.fish:1026 +msgid "Select changes up to a patch matching REGEXP" +msgstr "Välj ändringar fram till fix som matchar REGEXP" + +#: share/completions/darcs.fish:553 +msgid "Select changes up to a tag matching REGEXP" +msgstr "Välj ändringar fram till tag som matchar REGEXP" + +#: share/completions/darcs.fish:558 +#, fuzzy +msgid "Select a range of patches" +msgstr "Välj angivet antal fixar av de senaste fixarna" + +#: share/completions/darcs.fish:562 +msgid "Return only NUMBER results" +msgstr "" + +#: share/completions/darcs.fish:713 share/completions/darcs.fish:980 +msgid "Use external tool to merge conflicts" +msgstr "Använd externt verktyg för att hantera sammanslagningskonflikter" + +#: share/completions/darcs.fish:752 share/completions/darcs.fish:892 +#: share/completions/darcs.fish:1238 +msgid "Name of the darcs executable on the remote server" +msgstr "" + +#: share/completions/darcs.fish:864 share/completions/darcs.fish:923 +msgid "Sign the patch with a given keyid" +msgstr "Signera fix med givet nyckelid" + +#: share/completions/darcs.fish:865 share/completions/darcs.fish:924 +msgid "Sign the patch using openssl with a given private key" +msgstr "Signera fix via openssl med en given hemlig nyckel" + +#: share/completions/darcs.fish:886 +#, fuzzy +msgid "Specify the remote repository URL to work with" +msgstr "Ange förrÃ¥d-URL" + +#: share/completions/darcs.fish:915 +msgid "Specify email address" +msgstr "Välj e-postkatalog" + +#: share/completions/darcs.fish:917 msgid "Specify destination email" msgstr "Välj destinationsadress" -#: share/completions/darcs.fish:614 -msgid "Mail results to additional EMAIL(s). Requires --reply" +#: share/completions/darcs.fish:918 +#, fuzzy +msgid "Mail results to additional EMAIL(s)" msgstr "Posta resultat till extra adresser. (Kräver --reply)" -#: share/completions/darcs.fish:615 +#: share/completions/darcs.fish:919 #, fuzzy msgid "Specify mail subject" msgstr "Ange makefil" -#: share/completions/darcs.fish:616 +#: share/completions/darcs.fish:920 +#, fuzzy +msgid "Specify in-reply-to header" +msgstr "Välj indexkatalog" + +#: share/completions/darcs.fish:921 msgid "Specify output filename" msgstr "Välj utfil" -#: share/completions/darcs.fish:618 -msgid "Sign the patch with a given keyid" -msgstr "Signera fix med givet nyckelid" +#: share/completions/darcs.fish:995 +msgid "Reply to email-based patch using FROM address" +msgstr "Svara pÃ¥ e-postbaserad fix frÃ¥n adress" -#: share/completions/darcs.fish:619 -msgid "Sign the patch using openssl with a given private key" -msgstr "Signera fix via openssl med en given hemlig nyckel" +#: share/completions/darcs.fish:996 +msgid "Mail results to additional EMAIL(s). Requires --reply" +msgstr "Posta resultat till extra adresser. (Kräver --reply)" -#: share/completions/darcs.fish:625 -msgid "Send to context stored in FILENAME" -msgstr "Skicka till sammanhang lagrat i FILNAMN" +#: share/completions/darcs.fish:1027 +msgid "Select tag matching REGEXP" +msgstr "Välj tagg som matchar REGEXP" -#: share/completions/darcs.fish:633 -msgid "Specify sendmail command" -msgstr "Ange sendmailkommando" - -#: share/completions/darcs.fish:646 -msgid "Verify that the patch was signed by a key in PUBRING" -msgstr "Verifiera att fix är signerad frÃ¥n nyckel i angiven nyckelring" - -#: share/completions/darcs.fish:647 -#, fuzzy -msgid "Verify using openSSL with authorized keys from file KEYS" -msgstr "Verifiera med openSSL med auktoriserade nycklar frÃ¥n angiven fil" - -#: share/completions/darcs.fish:684 -#, fuzzy -msgid "Path of output directory" -msgstr "Välj källkatalog" - -#: share/completions/darcs.fish:687 share/completions/darcs.fish:718 -msgid "Select changes up to a patch matching PATTERN" -msgstr "Välj ändringar fram till fix som matchar MÖNSTER" - -#: share/completions/darcs.fish:688 share/completions/darcs.fish:719 -msgid "Select changes up to a patch matching REGEXP" -msgstr "Välj ändringar fram till fix som matchar REGEXP" - -#: share/completions/darcs.fish:690 share/completions/darcs.fish:721 +#: share/completions/darcs.fish:1028 #, fuzzy msgid "Version specified by the context in FILENAME" msgstr "Skicka till sammanhang lagrat i FILNAMN" -#: share/completions/darcs.fish:758 -msgid "Name of version to checkpoint" -msgstr "NAmn pÃ¥ version at använda som kontrollpunkt" +#: share/completions/darcs.fish:1083 +msgid "Apply patch as another user using sudo" +msgstr "" + +#: share/completions/darcs.fish:1222 +msgid "--repodir=DIRECTORY" +msgstr "" #: share/completions/dcop.fish:34 msgid "Show help about options" @@ -3413,40 +3911,23 @@ msgstr "" msgid "Call DCOP for each line read from stdin" msgstr "Anropa DCOP för varje rad läst frÃ¥n standard in" +#: share/completions/dd.fish:5 +#, fuzzy +msgid "Complete dd operands" +msgstr "Jämför FIL1 med alla operander" + #: share/completions/df.fish:17 -msgid "Show filesystems of specified type" +#, fuzzy +msgid "Show file systems of specified type" msgstr "Visa filsystem av angiven typ" #: share/completions/df.fish:22 msgid "Block size" msgstr "Blockstorlek" -#: share/completions/diff.fish:9 -msgid "Ignore changes whose lines match the REGEX" -msgstr "Ignorera ändringar som matchar REGEX" - -#: share/completions/diff.fish:13 -msgid "Output NUM lines of copied context" -msgstr "Skriv ut NUM rader av kopierad sammanhang" - -#: share/completions/diff.fish:15 -msgid "Output NUM lines of unified context" -msgstr "Skriv ut NUM rader av unifieradt sammanhang" - -#: share/completions/diff.fish:20 -msgid "Output at most NUM print columns" -msgstr "Skriv ut som mest NUM kolumner" - -#: share/completions/diff.fish:22 -msgid "Compare FILE1 to all operands" -msgstr "Jämför FIL1 med alla operander" - -#: share/completions/diff.fish:23 -msgid "Compare FILE2 to all operands" -msgstr "Jämför FIL2 med alla operander" - #: share/completions/du.fish:15 -msgid "Exclude files thet match pattern in file" +#, fuzzy +msgid "Exclude files that match pattern in file" msgstr "Exkludera filer som matchar mönster frÃ¥n fil" #: share/completions/du.fish:16 @@ -3457,6 +3938,100 @@ msgstr "Exkludera filer som matchar mönster" msgid "Recursion limit" msgstr "Rekursionsgräns" +#: share/completions/duply.fish:5 +#, fuzzy +msgid "Profile" +msgstr "Konfigurationsfil" + +#: share/completions/duply.fish:6 +msgid "Get usage help text" +msgstr "" + +#: share/completions/duply.fish:9 +#, fuzzy +msgid "Creates a configuration profile" +msgstr "Välj konfigurationsfil" + +#: share/completions/duply.fish:10 +msgid "Backup with pre/post script execution" +msgstr "" + +#: share/completions/duply.fish:11 +#, fuzzy +msgid "Backup without executing pre/post scripts" +msgstr "Kör inte post-skript" + +#: share/completions/duply.fish:12 +#, fuzzy +msgid "Execute /pre script" +msgstr "Kör inte pre-skript" + +#: share/completions/duply.fish:13 +#, fuzzy +msgid "Execute /post script" +msgstr "Kör inte post-skript" + +#: share/completions/duply.fish:14 +msgid "Force full backup" +msgstr "" + +#: share/completions/duply.fish:15 +msgid "Force incremental backup" +msgstr "" + +#: share/completions/duply.fish:16 +msgid "List all files in backup (as it was at , default: now)" +msgstr "" + +#: share/completions/duply.fish:17 +msgid "Prints backup sets and chains currently in repository" +msgstr "" + +#: share/completions/duply.fish:18 +msgid "List files changed since latest backup" +msgstr "" + +#: share/completions/duply.fish:19 +msgid "Shows outdated backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:20 +msgid "Shows outdated backups [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:21 +msgid "Shows broken backup archives [--force, delete these files]" +msgstr "" + +#: share/completions/duply.fish:22 +msgid "Restore the backup to [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:23 +msgid "Restore single file/folder from backup [as it was at ]" +msgstr "" + +#: share/completions/duply.fish:26 +msgid "Really execute the commands: purge, purge-full, cleanup" +msgstr "" + +#: share/completions/duply.fish:27 +msgid "Do nothing but print out generated duplicity command lines" +msgstr "" + +#: share/completions/duply.fish:28 +msgid "Calculate what would be done, but dont perform any actions" +msgstr "" + +#: share/completions/duply.fish:29 +msgid "Dont abort when backup different dirs to the same backend" +msgstr "" + +#: share/completions/duply.fish:30 +#, fuzzy +msgid "Output verbosity level" +msgstr "Ã…terställ felrapporteringsnivÃ¥ till 0" + #: share/completions/emerge.fish:5 share/completions/equery.fish:5 msgid "" "Prints completions for installed packages on the system from /var/db/pkg" @@ -4061,6 +4636,15 @@ msgstr "" msgid "Update the RubyGems system software" msgstr "" +#: share/completions/git.fish:121 share/completions/git.fish:144 +msgid "Branch" +msgstr "" + +#: share/completions/git.fish:145 +#, fuzzy +msgid "Tag" +msgstr "MÃ¥l" + #: share/completions/gpg.fish:116 msgid "Write output to specified file" msgstr "Skriv utdata till angiven fil" @@ -4211,25 +4795,14 @@ msgstr "Visa inte utdata för kod som exekverats färre gÃ¥nger än angivet anta msgid "Profile data format" msgstr "Format för profileringsdata" -#: share/completions/grep.fish:14 -msgid "Action for devices" -msgstr "Handling för enheter" - -#: share/completions/grep.fish:15 -msgid "Action for directories" -msgstr "Handling för kataloger" - -#: share/completions/grep.fish:19 -msgid "Use pattern from file" -msgstr "Använd mönster frÃ¥n fil" - #: share/completions/gunzip.fish:15 share/completions/gzip.fish:17 msgid "Suffix" msgstr "Suffix" #: share/completions/help.fish:6 -msgid "Help for the specified command" -msgstr "Hjälp för det angivna kommandot" +#, fuzzy +msgid "Help for this command" +msgstr "Välj promptkommando" #: share/completions/help.fish:9 msgid "Introduction to the fish syntax" @@ -4318,195 +4891,608 @@ msgid "add the specified files on the next commit" msgstr "Lägg till angiven fil fill den nuvarande listan av nyckelringar" #: share/completions/hg.fish:18 -#, fuzzy -msgid "show changeset information per file line" -msgstr "Visa ändringsinformation för paket" - -#: share/completions/hg.fish:19 -msgid "create unversioned archive of a repository revision" +msgid "add all new files, delete all missing files" msgstr "" +#: share/completions/hg.fish:19 +#, fuzzy +msgid "show changeset information by line for each file" +msgstr "Visa ändringsinformation för paket" + #: share/completions/hg.fish:20 +#, fuzzy +msgid "create an unversioned archive of a repository revision" +msgstr "Lägg till fil eller träd utan version till förrÃ¥det" + +#: share/completions/hg.fish:21 msgid "reverse effect of earlier changeset" msgstr "" -#: share/completions/hg.fish:21 +#: share/completions/hg.fish:22 +msgid "subdivision search of changesets" +msgstr "" + +#: share/completions/hg.fish:23 +msgid "track a line of development with movable markers" +msgstr "" + +#: share/completions/hg.fish:24 +msgid "set or show the current branch name" +msgstr "" + +#: share/completions/hg.fish:25 +#, fuzzy +msgid "list repository named branches" +msgstr "Inaktivera förrÃ¥d" + +#: share/completions/hg.fish:26 #, fuzzy msgid "create a changegroup file" msgstr "Skapa en kontrollpunktfil" -#: share/completions/hg.fish:22 +#: share/completions/hg.fish:27 #, fuzzy -msgid "output the latest or given revisions of files" +msgid "output the current or given revision of files" msgstr "Visa loggmeddelanden för en uppsättning revisioner och/eller filer" -#: share/completions/hg.fish:23 +#: share/completions/hg.fish:28 #, fuzzy msgid "make a copy of an existing repository" msgstr "Skapa lokal kopia av förrÃ¥d" -#: share/completions/hg.fish:24 +#: share/completions/hg.fish:29 #, fuzzy msgid "commit the specified files or all outstanding changes" msgstr "Dekryptera angiven fil eller standard in" -#: share/completions/hg.fish:25 -msgid "mark files as copied for the next commit" -msgstr "" - -#: share/completions/hg.fish:26 -#, fuzzy -msgid "diff repository (or selected files)" -msgstr "Radera urval" - -#: share/completions/hg.fish:27 -msgid "dump the header and diffs for one or more changesets" -msgstr "" - -#: share/completions/hg.fish:28 -msgid "search for a pattern in specified files and revisions" -msgstr "" - -#: share/completions/hg.fish:29 -msgid "show current repository heads" -msgstr "" - #: share/completions/hg.fish:30 -msgid "show help for a command, extension, or list of commands" +msgid "mark files as copied for the next commit" msgstr "" #: share/completions/hg.fish:31 #, fuzzy -msgid "print information about the working copy" -msgstr "Hämta ändringar frÃ¥n förrÃ¥det till arbetskopian" +msgid "diff repository (or selected files)" +msgstr "Radera urval" #: share/completions/hg.fish:32 +msgid "dump the header and diffs for one or more changesets" +msgstr "" + +#: share/completions/hg.fish:33 +#, fuzzy +msgid "forget the specified files on the next commit" +msgstr "Flytta filen angiven pÃ¥ kommandoraden" + +#: share/completions/hg.fish:34 +#, fuzzy +msgid "copy changes from other branches onto the current branch" +msgstr "Hämta ändringar frÃ¥n förrÃ¥det till arbetskopian" + +#: share/completions/hg.fish:35 +msgid "search for a pattern in specified files and revisions" +msgstr "" + +#: share/completions/hg.fish:36 +msgid "show current repository heads or show branch heads" +msgstr "" + +#: share/completions/hg.fish:37 +msgid "show help for a given topic or a help overview" +msgstr "" + +#: share/completions/hg.fish:38 +#, fuzzy +msgid "identify the working copy or specified revision" +msgstr "Uppdatera arbetskopian till en annan URL" + +#: share/completions/hg.fish:39 #, fuzzy msgid "import an ordered set of patches" msgstr "Visa byteavstÃ¥nd för matchningar" -#: share/completions/hg.fish:33 +#: share/completions/hg.fish:40 msgid "show new changesets found in source" msgstr "" -#: share/completions/hg.fish:34 +#: share/completions/hg.fish:41 #, fuzzy msgid "create a new repository in the given directory" msgstr "Skapa förrÃ¥d om det inte redan existerar" -#: share/completions/hg.fish:35 +#: share/completions/hg.fish:42 #, fuzzy msgid "locate files matching specific patterns" msgstr "Visa inte filer som matchar mönster" -#: share/completions/hg.fish:36 +#: share/completions/hg.fish:43 msgid "show revision history of entire repository or files" msgstr "" -#: share/completions/hg.fish:37 -msgid "output the latest or given revision of the project manifest" -msgstr "" - -#: share/completions/hg.fish:38 -msgid "Merge working directory with another revision" -msgstr "" - -#: share/completions/hg.fish:39 -msgid "show changesets not found in destination" -msgstr "" - -#: share/completions/hg.fish:40 -msgid "show the parents of the working dir or revision" -msgstr "" - -#: share/completions/hg.fish:41 -msgid "show definition of symbolic path names" -msgstr "" - -#: share/completions/hg.fish:42 -#, fuzzy -msgid "pull changes from the specified source" -msgstr "FrÃ¥ga paket med angiven grupp" - -#: share/completions/hg.fish:43 -#, fuzzy -msgid "push changes to the specified destination" -msgstr "FrÃ¥ga paket med angiven grupp" - #: share/completions/hg.fish:44 -msgid "roll back an interrupted transaction" -msgstr "" +#, fuzzy +msgid "output the current or given revision of the project manifest" +msgstr "Visa loggmeddelanden för en uppsättning revisioner och/eller filer" #: share/completions/hg.fish:45 -#, fuzzy -msgid "remove the specified files on the next commit" -msgstr "Flytta filen angiven pÃ¥ kommandoraden" +msgid "merge working directory with another revision" +msgstr "" #: share/completions/hg.fish:46 -msgid "rename files; equivalent of copy + remove" -msgstr "" +#, fuzzy +msgid "show changesets not found in the destination" +msgstr "FrÃ¥ga paket med angiven grupp" #: share/completions/hg.fish:47 -msgid "revert files or dirs to their states as of some revision" -msgstr "" +#, fuzzy +msgid "show the parents of the working directory or revision" +msgstr "Ändra arbetskatalog" #: share/completions/hg.fish:48 #, fuzzy -msgid "roll back the last transaction in this repository" -msgstr "Ordna om fixarna i förrÃ¥det" +msgid "show aliases for remote repositories" +msgstr "Ta bort inlägg i .cvspass för fjärrförrÃ¥d" #: share/completions/hg.fish:49 -msgid "print the root (top) of the current working dir" +msgid "set or show the current phase name" msgstr "" #: share/completions/hg.fish:50 #, fuzzy -msgid "export the repository via HTTP" -msgstr "Uppdatera förrÃ¥d" +msgid "pull changes from the specified source" +msgstr "FrÃ¥ga paket med angiven grupp" #: share/completions/hg.fish:51 #, fuzzy -msgid "show changed files in the working directory" -msgstr "Ändra arbetskatalog" +msgid "push changes to the specified destination" +msgstr "FrÃ¥ga paket med angiven grupp" #: share/completions/hg.fish:52 -msgid "add a tag for the current tip or a given revision" +msgid "roll back an interrupted transaction" msgstr "" #: share/completions/hg.fish:53 #, fuzzy +msgid "remove the specified files on the next commit" +msgstr "Flytta filen angiven pÃ¥ kommandoraden" + +#: share/completions/hg.fish:54 +msgid "rename files; equivalent of copy + remove" +msgstr "" + +#: share/completions/hg.fish:55 +msgid "redo merges or set/view the merge status of files" +msgstr "" + +#: share/completions/hg.fish:56 +msgid "restore files to their checkout state" +msgstr "" + +#: share/completions/hg.fish:57 +#, fuzzy +msgid "roll back the last transaction (dangerous)" +msgstr "Ordna om fixarna i förrÃ¥det" + +#: share/completions/hg.fish:58 +#, fuzzy +msgid "print the root (top) of the current working directory" +msgstr "Ändra arbetskatalog" + +#: share/completions/hg.fish:59 +msgid "start stand-alone webserver" +msgstr "" + +#: share/completions/hg.fish:60 +msgid "show combined config settings from all hgrc files" +msgstr "" + +#: share/completions/hg.fish:61 +#, fuzzy +msgid "show changed files in the working directory" +msgstr "Ändra arbetskatalog" + +#: share/completions/hg.fish:62 +#, fuzzy +msgid "summarize working directory state" +msgstr "Visa nuvarande katalog" + +#: share/completions/hg.fish:63 +msgid "add one or more tags for the current or given revision" +msgstr "" + +#: share/completions/hg.fish:64 +#, fuzzy msgid "list repository tags" msgstr "Inaktivera förrÃ¥d" -#: share/completions/hg.fish:54 +#: share/completions/hg.fish:65 #, fuzzy msgid "show the tip revision" msgstr "Visa tid" -#: share/completions/hg.fish:55 +#: share/completions/hg.fish:66 #, fuzzy -msgid "apply a changegroup file" +msgid "apply one or more changegroup files" msgstr "Läs paket frÃ¥n fil" -#: share/completions/hg.fish:56 +#: share/completions/hg.fish:67 #, fuzzy -msgid "update or merge working directory" +msgid "update working directory (or switch revisions)" msgstr "Ändra arbetskatalog" -#: share/completions/hg.fish:57 +#: share/completions/hg.fish:68 #, fuzzy msgid "verify the integrity of the repository" msgstr "Ta bort ett inlägg frÃ¥n förrÃ¥d" -#: share/completions/hg.fish:58 +#: share/completions/hg.fish:69 #, fuzzy msgid "output version and copyright information" msgstr "Ignorera versionsmagiinformation" -#: share/completions/hg.fish:100 +#: share/completions/hg.fish:70 #, fuzzy -msgid "Remembers the parent of the working directory" -msgstr "Ändra arbetskatalog" +msgid "Configuration Files" +msgstr "Konfigureringsfil" + +#: share/completions/hg.fish:71 +#, fuzzy +msgid "Date Formats" +msgstr "Välj format" + +#: share/completions/hg.fish:72 +#, fuzzy +msgid "Diff Formats" +msgstr "Listformat" + +#: share/completions/hg.fish:73 +#, fuzzy +msgid "Environment Variables" +msgstr "Redigera miljövariabler" + +#: share/completions/hg.fish:74 +msgid "Using Additional Features" +msgstr "" + +#: share/completions/hg.fish:75 +#, fuzzy +msgid "Specifying File Sets" +msgstr "Välj konfigurationsfil" + +#: share/completions/hg.fish:76 +msgid "Glossary" +msgstr "" + +#: share/completions/hg.fish:77 +msgid "Syntax for Mercurial Ignore Files" +msgstr "" + +#: share/completions/hg.fish:78 +#, fuzzy +msgid "Configuring hgweb" +msgstr "Konfigureringsfil" + +#: share/completions/hg.fish:79 +#, fuzzy +msgid "Merge Tools" +msgstr "SammanslÃ¥ sorterade filer" + +#: share/completions/hg.fish:80 +#, fuzzy +msgid "Specifying Multiple Revisions" +msgstr "Ange revision" + +#: share/completions/hg.fish:81 +#, fuzzy +msgid "File Name Patterns" +msgstr "Visa inte filer som matchar mönster" + +#: share/completions/hg.fish:82 +msgid "Working with Phases" +msgstr "" + +#: share/completions/hg.fish:83 +#, fuzzy +msgid "Specifying Single Revisions" +msgstr "Ange revision" + +#: share/completions/hg.fish:84 +#, fuzzy +msgid "Specifying Revision Sets" +msgstr "Ange revisionstiollstÃ¥nd" + +#: share/completions/hg.fish:85 +#, fuzzy +msgid "Subrepositories" +msgstr "Aktivera förrÃ¥d" + +#: share/completions/hg.fish:86 +msgid "Template Usage" +msgstr "" + +#: share/completions/hg.fish:87 +msgid "URL Paths" +msgstr "" + +#: share/completions/hg.fish:94 share/completions/hg.fish:433 +#: share/completions/hg.fish:458 share/completions/hg.fish:569 +#: share/completions/hg.fish:579 share/completions/hg.fish:594 +#: share/completions/hg.fish:606 share/completions/hg.fish:671 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Visa inte filer som matchar mönster" + +#: share/completions/hg.fish:95 share/completions/hg.fish:434 +#: share/completions/hg.fish:459 share/completions/hg.fish:570 +#: share/completions/hg.fish:580 share/completions/hg.fish:595 +#: share/completions/hg.fish:607 share/completions/hg.fish:672 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "Lista alla moduler som matchar parameter med jokertecken" + +#: share/completions/hg.fish:104 share/completions/hg.fish:391 +msgid "Guess renamed files by similarity (0<=s<=100)" +msgstr "" + +#: share/completions/hg.fish:105 +#, fuzzy +msgid "[+] include names matching the given patterns" +msgstr "Visa inte filer som matchar mönster" + +#: share/completions/hg.fish:106 +#, fuzzy +msgid "[+] exclude names matching the given patterns" +msgstr "Lista alla moduler som matchar parameter med jokertecken" + +#: share/completions/hg.fish:114 +#, fuzzy +msgid "Annotate the specified revision" +msgstr "Hjälp för det angivna inbyggda kommandot" + +#: share/completions/hg.fish:387 +#, fuzzy +msgid "Use text as commit message" +msgstr "Läs meddelande för tillägg frÃ¥n fil" + +#: share/completions/hg.fish:388 +msgid "Read commit message from file" +msgstr "Läs meddelande för tillägg frÃ¥n fil" + +#: share/completions/hg.fish:389 share/completions/hg.fish:693 +#, fuzzy +msgid "Record the specified date as commit date" +msgstr "Hjälp för det angivna kommandot" + +#: share/completions/hg.fish:390 share/completions/hg.fish:694 +#, fuzzy +msgid "Record the specified user as committer" +msgstr "Använd angiven sträng som kommentarsträng" + +#: share/completions/hg.fish:400 +#, fuzzy +msgid "File to store the bundles into" +msgstr "Redigera fix-paketbeskrivning" + +#: share/completions/hg.fish:401 share/completions/hg.fish:446 +#: share/completions/hg.fish:448 share/completions/hg.fish:450 +#: share/completions/hg.fish:485 share/completions/hg.fish:534 +#: share/completions/hg.fish:536 share/completions/hg.fish:548 +#: share/completions/hg.fish:550 share/completions/hg.fish:669 +msgid "[+]" +msgstr "" + +#: share/completions/hg.fish:403 +msgid "[+] a specific branch you would like to pull" +msgstr "" + +#: share/completions/hg.fish:406 share/completions/hg.fish:453 +#: share/completions/hg.fish:491 +#, fuzzy +msgid "Limit number of changes displayed" +msgstr "Skriv bara ut angivet antal matchningar" + +#: share/completions/hg.fish:409 share/completions/hg.fish:456 +#: share/completions/hg.fish:494 share/completions/hg.fish:507 +#: share/completions/hg.fish:709 +msgid "Display using template map file" +msgstr "" + +#: share/completions/hg.fish:410 share/completions/hg.fish:457 +#: share/completions/hg.fish:495 share/completions/hg.fish:508 +#: share/completions/hg.fish:710 +#, fuzzy +msgid "Display with template" +msgstr "Visa alla matchningar" + +#: share/completions/hg.fish:411 share/completions/hg.fish:421 +#: share/completions/hg.fish:496 share/completions/hg.fish:537 +#: share/completions/hg.fish:552 +#, fuzzy +msgid "Specify ssh command to use" +msgstr "Ange kommando att operera pÃ¥" + +#: share/completions/hg.fish:412 share/completions/hg.fish:422 +#: share/completions/hg.fish:497 share/completions/hg.fish:538 +#: share/completions/hg.fish:553 +#, fuzzy +msgid "Specify hg command to run on the remote side" +msgstr "Välj destinationsadress" + +#: share/completions/hg.fish:430 +#, fuzzy +msgid "Search the repository as it is in REV" +msgstr "Ange förrÃ¥d-URL" + +#: share/completions/hg.fish:441 +msgid "A filename will only show ancestors or" +msgstr "" + +#: share/completions/hg.fish:443 +#, fuzzy +msgid "Show revisions matching date spec" +msgstr "Visa bara matchande del" + +#: share/completions/hg.fish:445 +msgid "[+] do case-insensitive search for a given text" +msgstr "" + +#: share/completions/hg.fish:449 +msgid "[+] show changesets within the given named branch" +msgstr "" + +#: share/completions/hg.fish:466 +#, fuzzy +msgid "Revision to display" +msgstr "Välj display" + +#: share/completions/hg.fish:475 +msgid "Revision to merge" +msgstr "" + +#: share/completions/hg.fish:477 share/completions/hg.fish:593 +#, fuzzy +msgid "Specify merge tool" +msgstr "Ange förtroendemodell" + +#: share/completions/hg.fish:488 +msgid "[+] a specific branch you would like to push" +msgstr "" + +#: share/completions/hg.fish:506 +#, fuzzy +msgid "Show parents of the specified revision" +msgstr "FrÃ¥ga paket med angiven grupp" + +#: share/completions/hg.fish:525 +#, fuzzy +msgid "[+] target revision" +msgstr "SlÃ¥ ihop revisioner" + +#: share/completions/hg.fish:535 +msgid "[+] bookmark to pull" +msgstr "" + +#: share/completions/hg.fish:546 +msgid "You want to allow push to create a new named branch" +msgstr "" + +#: share/completions/hg.fish:549 +msgid "[+] bookmark to push" +msgstr "" + +#: share/completions/hg.fish:603 share/completions/hg.fish:726 +#, fuzzy +msgid "Tipmost revision matching date" +msgstr "Visa inte filer som matchar mönster" + +#: share/completions/hg.fish:604 +#, fuzzy +msgid "Revert to the specified revision" +msgstr "Flytta filen angiven pÃ¥ kommandoraden" + +#: share/completions/hg.fish:615 +msgid "Not perform actions, just print output" +msgstr "" + +#: share/completions/hg.fish:629 +msgid "Name of access log file to write to" +msgstr "" + +#: share/completions/hg.fish:631 +msgid "Used internally by daemon mode" +msgstr "" + +#: share/completions/hg.fish:632 +msgid "Name of error log file to write to" +msgstr "" + +#: share/completions/hg.fish:633 +msgid "Port to listen on (default: 8000)" +msgstr "" + +#: share/completions/hg.fish:634 +msgid "Address to listen on (default: all interfaces)" +msgstr "" + +#: share/completions/hg.fish:635 +msgid "Prefix path to serve from (default: server root)" +msgstr "" + +#: share/completions/hg.fish:636 +msgid "Name to show in web pages (default: working" +msgstr "" + +#: share/completions/hg.fish:637 +msgid "Name of the hgweb config file (see \"hg help hgweb\")" +msgstr "" + +#: share/completions/hg.fish:638 +msgid "Name of file to write process ID to" +msgstr "" + +#: share/completions/hg.fish:640 +#, fuzzy +msgid "For remote clients" +msgstr "Visa eller ta bort funktioner" + +#: share/completions/hg.fish:641 +msgid "Web templates to use" +msgstr "" + +#: share/completions/hg.fish:642 +msgid "Template style to use" +msgstr "" + +#: share/completions/hg.fish:644 +#, fuzzy +msgid "SSL certificate file" +msgstr "Välj certifikatpolicy" + +#: share/completions/hg.fish:651 +#, fuzzy +msgid "Untrusted configuration options" +msgstr "Välj konfigurationsinställningar" + +#: share/completions/hg.fish:670 +#, fuzzy +msgid "List the changed files of a revision" +msgstr "Visa alla engenskaper hos filer, kataloger eller revisioner" + +#: share/completions/hg.fish:680 +msgid "For push and pull" +msgstr "" + +#: share/completions/hg.fish:689 +msgid "Revision to tag" +msgstr "" + +#: share/completions/hg.fish:692 +msgid "Use as commit message" +msgstr "" + +#: share/completions/hg.fish:717 +msgid "To new branch head if changesets were unbundled" +msgstr "" + +#: share/completions/hg.fish:727 +#, fuzzy +msgid "Revision" +msgstr "SlÃ¥ ihop revisioner" + +#: share/completions/hg.fish:844 +msgid "Or select an existing template-style (--style)" +msgstr "" + +#: share/completions/hg.fish:845 +msgid "Is set" +msgstr "" + +#: share/completions/history.fish:1 +msgid "Match history items that start with the given prefix" +msgstr "" + +#: share/completions/history.fish:2 +msgid "Match history items that contain the given string" +msgstr "" #: share/completions/ifconfig.fish:1 msgid "Stop interface" @@ -4516,7 +5502,8 @@ msgstr "Stanna gränssnitt" msgid "Start interface" msgstr "Starta gränssnitt" -#: share/completions/ifconfig.fish:25 +#: share/completions/ifconfig.fish:25 share/completions/ifdown.fish:1 +#: share/completions/ifup.fish:1 msgid "Network interface" msgstr "Nätverkgränssnitt" @@ -4524,15 +5511,10 @@ msgstr "Nätverkgränssnitt" msgid "Buffer space" msgstr "Buffert-utrymme" -#: share/completions/locate.fish:22 -msgid "Search the file name databases in these directories" +#: share/completions/lsusb.fish:2 +msgid "Show only devices with specified device and/or bus numbers (in decimal)" msgstr "" -#: share/completions/locate.fish:23 -#, fuzzy -msgid "Limit the number of matches" -msgstr "Skriv bara ut angivet antal matchningar" - #: share/completions/make.fish:12 msgid "Target" msgstr "MÃ¥l" @@ -4593,6 +5575,10 @@ msgstr "Avdelare för start av sträng" msgid "Line width" msgstr "Radbredd" +#: share/completions/mosh.fish:20 +msgid "Controls use of speculative local echo" +msgstr "" + #: share/completions/mount.fish:19 msgid "Mount partition with specified label" msgstr "Montera partitioner med angiven etikett" @@ -4602,7 +5588,8 @@ msgid "Mount partition with specified UID" msgstr "Montera partition med angivet UID" #: share/completions/mount.fish:21 -msgid "Exclude filesystems" +#, fuzzy +msgid "Exclude file systems" msgstr "Exkludera filsystem" #: share/completions/mount.fish:22 @@ -4614,7 +5601,8 @@ msgid "Move a subtree to a new position" msgstr "Flytta ett subträd till en ny plats" #: share/completions/mount.fish:24 -msgid "Filesystem" +#, fuzzy +msgid "File system" msgstr "Filsystem" #: share/completions/mount.fish:26 @@ -4637,55 +5625,98 @@ msgstr "Bildutdata" msgid "Audio output" msgstr "Ljudutdata" -#: share/completions/mutt.fish:14 +#: share/completions/msgfmt.fish:5 +#, fuzzy +msgid "Generate a Java ResourceBundle class" +msgstr "Generera källindexfil" + +#: share/completions/msgfmt.fish:6 +msgid "Like --java, and assume Java2 (JDK 1.2 or higher)" +msgstr "" + +#: share/completions/msgfmt.fish:7 +#, fuzzy +msgid "Generate a .NET .dll file" +msgstr "Generera huvudfil" + +#: share/completions/msgfmt.fish:8 +#, fuzzy +msgid "Generate a .NET .resources file" +msgstr "Generera källindexfil" + +#: share/completions/msgfmt.fish:9 +#, fuzzy +msgid "Generate a tcl/msgcat .msg file" +msgstr "Generera huvudfil" + +#: share/completions/msgfmt.fish:10 +#, fuzzy +msgid "Generate a Qt .qm file" +msgstr "Generera huvudfil" + +#: share/completions/msgfmt.fish:17 +#, fuzzy +msgid "Resource name" +msgstr "Välj volymnamn" + +#: share/completions/msgfmt.fish:18 +msgid "Locale name, either language or language_COUNTRY" +msgstr "" + +#: share/completions/msgfmt.fish:19 +#, fuzzy +msgid "Base directory for output" +msgstr "Filidentifierare för indata" + +#: share/completions/mutt.fish:18 msgid "An expanded version of the given alias is passed to stdout" msgstr "" -#: share/completions/mutt.fish:15 +#: share/completions/mutt.fish:19 msgid "Attach a file to your message using MIME" msgstr "" -#: share/completions/mutt.fish:16 +#: share/completions/mutt.fish:20 msgid "Specify a blind-carbon-copy (BCC) recipient" msgstr "" -#: share/completions/mutt.fish:17 +#: share/completions/mutt.fish:21 msgid "Specify a carbon-copy (CC) recipient" msgstr "" -#: share/completions/mutt.fish:18 -msgid "Run command after processing of initialization files" -msgstr "" - -#: share/completions/mutt.fish:19 -#, fuzzy -msgid "Specify which mailbox to load" -msgstr "Ange sendmailkommando" - -#: share/completions/mutt.fish:20 -#, fuzzy -msgid "Specify an initialization file to read instead of ~/.muttrc" -msgstr "Ange logmeddelande istället för att anropa editor" - -#: share/completions/mutt.fish:21 -msgid "Specify a draft file containing header and body for the message" -msgstr "" - #: share/completions/mutt.fish:22 -msgid "Specify a file to include into the body of a message" +msgid "Run command after processing of initialization files" msgstr "" #: share/completions/mutt.fish:23 #, fuzzy +msgid "Specify which mailbox to load" +msgstr "Ange sendmailkommando" + +#: share/completions/mutt.fish:24 +#, fuzzy +msgid "Specify an initialization file to read instead of ~/.muttrc" +msgstr "Ange logmeddelande istället för att anropa editor" + +#: share/completions/mutt.fish:25 +msgid "Specify a draft file containing header and body for the message" +msgstr "" + +#: share/completions/mutt.fish:26 +msgid "Specify a file to include into the body of a message" +msgstr "" + +#: share/completions/mutt.fish:27 +#, fuzzy msgid "Specify a default mailbox type" msgstr "Välj kärnversion" -#: share/completions/mutt.fish:24 +#: share/completions/mutt.fish:28 #, fuzzy msgid "Query a configuration variables value" msgstr "Välj en konfigurationsfil" -#: share/completions/mutt.fish:25 +#: share/completions/mutt.fish:29 #, fuzzy msgid "Specify the subject of the message" msgstr "Ange meddelande för tillägg" @@ -4694,25 +5725,152 @@ msgstr "Ange meddelande för tillägg" msgid "Answer for overwrite questions" msgstr "Svar till överskrivningsfrÃ¥gor" -#: share/completions/perl.fish:5 -msgid "Debug option" -msgstr "Debugflagga" +#: share/completions/perl.fish:6 +msgid "Specify record separator" +msgstr "Ange postavdelare" -#: share/completions/perl.fish:6 share/completions/ruby.fish:7 -msgid "Execute command" -msgstr "Utför kommando" +#: share/completions/perl.fish:7 +msgid "Turn on autosplit mode" +msgstr "SlÃ¥ pÃ¥ autosplitläge" -#: share/completions/python.fish:1 -msgid "Execute argument as command" -msgstr "Utför parameter som kommando" +#: share/completions/perl.fish:8 +msgid "Check syntax" +msgstr "Kontrollera syntax" -#: share/completions/python.fish:7 -msgid "Division control" -msgstr "Divisionskontroll" +#: share/completions/perl.fish:9 +msgid "Control Unicode features" +msgstr "" -#: share/completions/python.fish:13 -msgid "Warning control" -msgstr "Varningsläge" +#: share/completions/perl.fish:10 +msgid "Debug UTF-8 cache" +msgstr "" + +#: share/completions/perl.fish:11 +msgid "ARGV uses UTF-8" +msgstr "" + +#: share/completions/perl.fish:12 +msgid "Opened filehandles are UTF-8" +msgstr "" + +#: share/completions/perl.fish:13 +msgid "STDERR is UTF-8" +msgstr "" + +#: share/completions/perl.fish:14 +msgid "Filehandles that are read are UTF-8" +msgstr "" + +#: share/completions/perl.fish:15 +msgid "STDIN is UTF-8" +msgstr "" + +#: share/completions/perl.fish:16 +msgid "Enable Unicode conditionally" +msgstr "" + +#: share/completions/perl.fish:17 +msgid "Filehandles written to are UTF-8" +msgstr "" + +#: share/completions/perl.fish:18 +msgid "STDOUT is UTF-8" +msgstr "" + +#: share/completions/perl.fish:19 +msgid "STDOUT, STDIN, and STDERR are UTF-8" +msgstr "" + +#: share/completions/perl.fish:20 +msgid "Debugger" +msgstr "Debugger" + +#: share/completions/perl.fish:25 +#, fuzzy +msgid "Disable sitecustomize.pl" +msgstr "Inaktivera användandet av kakor" + +#: share/completions/perl.fish:27 +#, fuzzy +msgid "Show help and exit" +msgstr "Visa hjälp och avsluta" + +#: share/completions/perl.fish:30 +msgid "Automatic line ending processing" +msgstr "Automatisk radslutprocessning" + +#: share/completions/perl.fish:33 +msgid "Loop script" +msgstr "Upprepa skript" + +#: share/completions/perl.fish:34 +#, sh-format +msgid "Loop script, print $_" +msgstr "Upprepa skript, skriv $_" + +#: share/completions/perl.fish:35 +msgid "Define custom switches" +msgstr "Definera egna flaggor" + +#: share/completions/perl.fish:36 +#, sh-format +msgid "Search $PATH for script" +msgstr "Genomsök $PATH efter skript" + +#: share/completions/perl.fish:37 +msgid "Taint checking, but only with warnings" +msgstr "" + +#: share/completions/perl.fish:38 +msgid "Taint checking" +msgstr "â€taintâ€-verifiering" + +#: share/completions/perl.fish:39 +msgid "Dump core" +msgstr "" + +#: share/completions/perl.fish:40 +msgid "Unsafe mode" +msgstr "Osäkert läge" + +#: share/completions/perl.fish:42 +#, fuzzy +msgid "Display configuration and exit" +msgstr "Visa version och avsluta" + +#: share/completions/perl.fish:43 +#, fuzzy +msgid "Show warnings" +msgstr "Visa inte varningar" + +#: share/completions/perl.fish:44 +#, fuzzy +msgid "Force warnings" +msgstr "Visa inte varningar" + +#: share/completions/perl.fish:45 +#, fuzzy +msgid "Disable warnings" +msgstr "Visa inte varningar om MFC" + +#: share/completions/portmaster.fish:49 +#, fuzzy +msgid "Ports Directory" +msgstr "Katalog" + +#: share/completions/portmaster.fish:55 +#, fuzzy +msgid "Installed Package" +msgstr "Installerade paket" + +#: share/completions/psql.fish:19 +#, fuzzy +msgid "execute commands from file, then exit" +msgstr "Utför kommando som om get vore en del av .wgetrc" + +#: share/completions/psql.fish:63 +msgid "database server port" +msgstr "" #: share/completions/rpm.fish:22 msgid "Add suggested packages to the transaction set when needed" @@ -5145,15 +6303,19 @@ msgstr "" msgid "Set block/file checksum seed (advanced)" msgstr "" +#: share/completions/ruby.fish:7 +msgid "Execute command" +msgstr "Utför kommando" + #: share/completions/ruby.fish:15 msgid "Require file" msgstr "Kräv fil" -#: share/completions/scp.fish:29 +#: share/completions/scp.fish:40 msgid "Bandwidth limit" msgstr "Bandbreddsgräns" -#: share/completions/scp.fish:30 share/completions/ssh.fish:36 +#: share/completions/scp.fish:41 share/completions/ssh.fish:39 #: share/completions/sshfs.fish:25 msgid "Port" msgstr "Port" @@ -5198,15 +6360,15 @@ msgstr "Välj minnesbuffertstorlek" msgid "Set temporary directory" msgstr "Välj katalog för tillfälligt lagringsutrymme" -#: share/completions/ssh.fish:21 +#: share/completions/ssh.fish:24 msgid "Interface to transmit from" msgstr "Gränssnitt att skicka frÃ¥n" -#: share/completions/ssh.fish:27 +#: share/completions/ssh.fish:30 msgid "Escape character" msgstr "Avbrottstecken" -#: share/completions/ssh.fish:32 +#: share/completions/ssh.fish:35 msgid "User" msgstr "Användare" @@ -5214,330 +6376,6 @@ msgstr "Användare" msgid "Pass command to shell" msgstr "Skicka kommando till skalet" -#: share/completions/svn.fish:17 -msgid "" -"Put files and directories under version control, scheduling them for " -"addition to repository. They will be added in next commit." -msgstr "" - -#: share/completions/svn.fish:18 share/completions/svn.fish:19 -#: share/completions/svn.fish:20 share/completions/svn.fish:21 -#, fuzzy -msgid "" -"Output the content of specified files or URLs with revision and author " -"information in-line." -msgstr "Visa filer/URL:er med revisions- och författarinformation inbakat" - -#: share/completions/svn.fish:22 -#, fuzzy -msgid "Output the content of specified files or URLs." -msgstr "Visa innehÃ¥ll av filer/URL:er" - -#: share/completions/svn.fish:23 share/completions/svn.fish:24 -#, fuzzy -msgid "Check out a working copy from a repository." -msgstr "Hämta ut en arbetskopia frÃ¥n förrÃ¥det" - -#: share/completions/svn.fish:25 -msgid "" -"Recursively clean up the working copy, removing locks, resuming unfinished " -"operations, etc." -msgstr "" - -#: share/completions/svn.fish:26 share/completions/svn.fish:27 -#, fuzzy -msgid "Send changes from your working copy to the repository." -msgstr "Skicka ändringar i arbetskopian till lagret" - -#: share/completions/svn.fish:28 share/completions/svn.fish:29 -#, fuzzy -msgid "Duplicate something in working copy or repository, remembering history." -msgstr "Flytta och/eller byt namn pÃ¥ nÃ¥gonting i arbetskopian eller förrÃ¥det" - -#: share/completions/svn.fish:30 share/completions/svn.fish:31 -#: share/completions/svn.fish:32 share/completions/svn.fish:33 -#, fuzzy -msgid "Remove files and directories from version control." -msgstr "Placera filer och kataloger under versionskontroll" - -#: share/completions/svn.fish:34 share/completions/svn.fish:35 -#, fuzzy -msgid "Display the differences between two revisions or paths." -msgstr "Applicera differensen mellan tvÃ¥ källor till en arbetskopiesökväg" - -#: share/completions/svn.fish:36 -msgid "Create an unversioned copy of a tree." -msgstr "" - -#: share/completions/svn.fish:37 share/completions/svn.fish:38 -#: share/completions/svn.fish:39 -#, fuzzy -msgid "Describe the usage of this program or its subcommands." -msgstr "Beskriv användandet av detta program eller dess underkommandon" - -#: share/completions/svn.fish:40 -#, fuzzy -msgid "Commit an unversioned file or tree into the repository." -msgstr "Lägg till fil eller träd utan version till förrÃ¥det" - -#: share/completions/svn.fish:41 -#, fuzzy -msgid "Display information about a local or remote item." -msgstr "Visa information om lokal eller fjärrelement" - -#: share/completions/svn.fish:42 share/completions/svn.fish:43 -#, fuzzy -msgid "List directory entries in the repository." -msgstr "Lista kataloger i förrÃ¥det" - -#: share/completions/svn.fish:44 -#, fuzzy -msgid "" -"Lock working copy paths or URLs in the repository, so that no other user can " -"commit changes to them." -msgstr "Läs arbetskopiwsökvägar eller URL:er i förrÃ¥det" - -#: share/completions/svn.fish:45 -#, fuzzy -msgid "Show the log messages for a set of revision(s) and/or file(s)." -msgstr "Visa loggmeddelanden för en uppsättning revisioner och/eller filer" - -#: share/completions/svn.fish:46 -#, fuzzy -msgid "Apply the differences between two sources to a working copy path." -msgstr "Applicera differensen mellan tvÃ¥ källor till en arbetskopiesökväg" - -#: share/completions/svn.fish:47 -#, fuzzy -msgid "Create a new directory under version control." -msgstr "Skapa ny katalog under revisionskontroll" - -#: share/completions/svn.fish:48 share/completions/svn.fish:49 -#: share/completions/svn.fish:50 share/completions/svn.fish:51 -#, fuzzy -msgid "Move and/or rename something in working copy or repository." -msgstr "Flytta och/eller byt namn pÃ¥ nÃ¥gonting i arbetskopian eller förrÃ¥det" - -#: share/completions/svn.fish:52 share/completions/svn.fish:53 -#: share/completions/svn.fish:54 -#, fuzzy -msgid "Remove a property from files, dirs, or revisions." -msgstr "Ta bort en egenskap frÃ¥n filer, kataloger eller revisioner" - -#: share/completions/svn.fish:55 share/completions/svn.fish:56 -#: share/completions/svn.fish:57 -#, fuzzy -msgid "Edit a property with an external editor." -msgstr "Redigera en egenskap med extern edito för mÃ¥l" - -#: share/completions/svn.fish:58 share/completions/svn.fish:59 -#: share/completions/svn.fish:60 -#, fuzzy -msgid "Print the value of a property on files, dirs, or revisions." -msgstr "Skriv ut värde för en egenskap hos filer, kataloger eller revisioner" - -#: share/completions/svn.fish:61 share/completions/svn.fish:62 -#: share/completions/svn.fish:63 -#, fuzzy -msgid "List all properties on files, dirs, or revisions." -msgstr "Visa alla engenskaper hos filer, kataloger eller revisioner" - -#: share/completions/svn.fish:64 share/completions/svn.fish:65 -#: share/completions/svn.fish:66 -#, fuzzy -msgid "Set the value of a property on files, dirs, or revisions." -msgstr "Skriv ut värde för en egenskap hos filer, kataloger eller revisioner" - -#: share/completions/svn.fish:67 -#, fuzzy -msgid "Remove \\conflicted state on working copy files or directories." -msgstr "Ta bort konflikttillstÃ¥nd hos arbetskopiefiler eller kataloger" - -#: share/completions/svn.fish:68 -#, fuzzy -msgid "Restore pristine working copy file (undo most local edits)." -msgstr "Ã…terställ rensad arbetskopiefil" - -#: share/completions/svn.fish:69 share/completions/svn.fish:70 -#: share/completions/svn.fish:71 -#, fuzzy -msgid "Print the status of working copy files and directories." -msgstr "Visa status för arbetskopians filer och kataloger" - -#: share/completions/svn.fish:72 share/completions/svn.fish:73 -#, fuzzy -msgid "Update the working copy to a different URL." -msgstr "Uppdatera arbetskopian till en annan URL" - -#: share/completions/svn.fish:74 -#, fuzzy -msgid "Unlock working copy paths or URLs." -msgstr "LÃ¥s upp arbetskopians sökvägar eller URL:er" - -#: share/completions/svn.fish:75 share/completions/svn.fish:76 -#, fuzzy -msgid "Bring changes from the repository into the working copy." -msgstr "Hämta ändringar frÃ¥n förrÃ¥det till arbetskopian" - -#: share/completions/svn.fish:83 share/completions/svn.fish:194 -#: share/completions/svn.fish:255 share/completions/svn.fish:271 -#: share/completions/svn.fish:287 share/completions/svn.fish:303 -#: share/completions/svn.fish:406 share/completions/svn.fish:446 -#: share/completions/svn.fish:461 share/completions/svn.fish:723 -#: share/completions/svn.fish:738 share/completions/svn.fish:753 -#: share/completions/svn.fish:767 share/completions/svn.fish:775 -#: share/completions/svn.fish:854 -#, fuzzy -msgid "Pass contents of file ARG as additional args" -msgstr "Skicka filinnehÃ¥ll som extra argument" - -#: share/completions/svn.fish:84 share/completions/svn.fish:102 -#: share/completions/svn.fish:116 share/completions/svn.fish:130 -#: share/completions/svn.fish:144 share/completions/svn.fish:155 -#: share/completions/svn.fish:166 share/completions/svn.fish:178 -#: share/completions/svn.fish:187 share/completions/svn.fish:219 -#: share/completions/svn.fish:233 share/completions/svn.fish:247 -#: share/completions/svn.fish:263 share/completions/svn.fish:279 -#: share/completions/svn.fish:295 share/completions/svn.fish:311 -#: share/completions/svn.fish:329 share/completions/svn.fish:347 -#: share/completions/svn.fish:359 share/completions/svn.fish:368 -#: share/completions/svn.fish:375 share/completions/svn.fish:382 -#: share/completions/svn.fish:399 share/completions/svn.fish:413 -#: share/completions/svn.fish:426 share/completions/svn.fish:439 -#: share/completions/svn.fish:453 share/completions/svn.fish:469 -#: share/completions/svn.fish:485 share/completions/svn.fish:499 -#: share/completions/svn.fish:514 share/completions/svn.fish:529 -#: share/completions/svn.fish:544 share/completions/svn.fish:559 -#: share/completions/svn.fish:571 share/completions/svn.fish:583 -#: share/completions/svn.fish:595 share/completions/svn.fish:610 -#: share/completions/svn.fish:625 share/completions/svn.fish:640 -#: share/completions/svn.fish:653 share/completions/svn.fish:666 -#: share/completions/svn.fish:679 share/completions/svn.fish:691 -#: share/completions/svn.fish:703 share/completions/svn.fish:715 -#: share/completions/svn.fish:730 share/completions/svn.fish:745 -#: share/completions/svn.fish:760 share/completions/svn.fish:768 -#: share/completions/svn.fish:776 share/completions/svn.fish:790 -#: share/completions/svn.fish:805 share/completions/svn.fish:820 -#: share/completions/svn.fish:834 share/completions/svn.fish:847 -#: share/completions/svn.fish:859 share/completions/svn.fish:872 -#: share/completions/svn.fish:885 -#, fuzzy -msgid "Read user configuration files from directory ARG" -msgstr "Läs användarkonfigurationsfiler frÃ¥n angiven katalog" - -#: share/completions/svn.fish:98 share/completions/svn.fish:112 -#: share/completions/svn.fish:126 share/completions/svn.fish:140 -#: share/completions/svn.fish:151 share/completions/svn.fish:162 -#: share/completions/svn.fish:174 share/completions/svn.fish:215 -#: share/completions/svn.fish:229 share/completions/svn.fish:243 -#: share/completions/svn.fish:259 share/completions/svn.fish:275 -#: share/completions/svn.fish:291 share/completions/svn.fish:307 -#: share/completions/svn.fish:325 share/completions/svn.fish:343 -#: share/completions/svn.fish:355 share/completions/svn.fish:395 -#: share/completions/svn.fish:409 share/completions/svn.fish:422 -#: share/completions/svn.fish:435 share/completions/svn.fish:449 -#: share/completions/svn.fish:465 share/completions/svn.fish:481 -#: share/completions/svn.fish:495 share/completions/svn.fish:510 -#: share/completions/svn.fish:525 share/completions/svn.fish:540 -#: share/completions/svn.fish:555 share/completions/svn.fish:567 -#: share/completions/svn.fish:579 share/completions/svn.fish:591 -#: share/completions/svn.fish:603 share/completions/svn.fish:618 -#: share/completions/svn.fish:633 share/completions/svn.fish:649 -#: share/completions/svn.fish:662 share/completions/svn.fish:675 -#: share/completions/svn.fish:687 share/completions/svn.fish:699 -#: share/completions/svn.fish:711 share/completions/svn.fish:725 -#: share/completions/svn.fish:740 share/completions/svn.fish:755 -#: share/completions/svn.fish:786 share/completions/svn.fish:801 -#: share/completions/svn.fish:816 share/completions/svn.fish:830 -#: share/completions/svn.fish:843 share/completions/svn.fish:855 -#: share/completions/svn.fish:868 share/completions/svn.fish:881 -#, fuzzy -msgid "Specify a username ARG" -msgstr "Välj användarnamn" - -#: share/completions/svn.fish:99 share/completions/svn.fish:113 -#: share/completions/svn.fish:127 share/completions/svn.fish:141 -#: share/completions/svn.fish:152 share/completions/svn.fish:163 -#: share/completions/svn.fish:175 share/completions/svn.fish:216 -#: share/completions/svn.fish:230 share/completions/svn.fish:244 -#: share/completions/svn.fish:260 share/completions/svn.fish:276 -#: share/completions/svn.fish:292 share/completions/svn.fish:308 -#: share/completions/svn.fish:326 share/completions/svn.fish:344 -#: share/completions/svn.fish:356 share/completions/svn.fish:396 -#: share/completions/svn.fish:410 share/completions/svn.fish:423 -#: share/completions/svn.fish:436 share/completions/svn.fish:450 -#: share/completions/svn.fish:466 share/completions/svn.fish:482 -#: share/completions/svn.fish:496 share/completions/svn.fish:511 -#: share/completions/svn.fish:526 share/completions/svn.fish:541 -#: share/completions/svn.fish:556 share/completions/svn.fish:568 -#: share/completions/svn.fish:580 share/completions/svn.fish:592 -#: share/completions/svn.fish:604 share/completions/svn.fish:619 -#: share/completions/svn.fish:634 share/completions/svn.fish:650 -#: share/completions/svn.fish:663 share/completions/svn.fish:676 -#: share/completions/svn.fish:688 share/completions/svn.fish:700 -#: share/completions/svn.fish:712 share/completions/svn.fish:726 -#: share/completions/svn.fish:741 share/completions/svn.fish:756 -#: share/completions/svn.fish:787 share/completions/svn.fish:802 -#: share/completions/svn.fish:817 share/completions/svn.fish:831 -#: share/completions/svn.fish:844 share/completions/svn.fish:856 -#: share/completions/svn.fish:869 share/completions/svn.fish:882 -#, fuzzy -msgid "Specify a password ARG" -msgstr "Välj lösenord" - -#: share/completions/svn.fish:186 share/completions/svn.fish:479 -#: share/completions/svn.fish:828 share/completions/svn.fish:841 -#: share/completions/svn.fish:867 share/completions/svn.fish:880 -#, fuzzy -msgid "Use ARG as merge command" -msgstr "Ange sammanslagningskommando" - -#: share/completions/svn.fish:213 share/completions/svn.fish:227 -#: share/completions/svn.fish:241 share/completions/svn.fish:257 -#: share/completions/svn.fish:273 share/completions/svn.fish:289 -#: share/completions/svn.fish:305 share/completions/svn.fish:392 -#: share/completions/svn.fish:493 share/completions/svn.fish:508 -#: share/completions/svn.fish:523 share/completions/svn.fish:538 -#: share/completions/svn.fish:553 share/completions/svn.fish:608 -#: share/completions/svn.fish:623 share/completions/svn.fish:638 -#, fuzzy -msgid "Use ARG as external editor" -msgstr "Ange extern editor" - -#: share/completions/svn.fish:214 share/completions/svn.fish:228 -#: share/completions/svn.fish:242 share/completions/svn.fish:258 -#: share/completions/svn.fish:274 share/completions/svn.fish:290 -#: share/completions/svn.fish:306 share/completions/svn.fish:393 -#: share/completions/svn.fish:448 share/completions/svn.fish:494 -#: share/completions/svn.fish:509 share/completions/svn.fish:524 -#: share/completions/svn.fish:539 share/completions/svn.fish:554 -#: share/completions/svn.fish:607 share/completions/svn.fish:622 -#: share/completions/svn.fish:637 share/completions/svn.fish:722 -#: share/completions/svn.fish:737 share/completions/svn.fish:752 -msgid "Treat value as being in charset encoding ARG" -msgstr "" - -#: share/completions/svn.fish:318 share/completions/svn.fish:336 -msgid "Use ARG as the older target" -msgstr "" - -#: share/completions/svn.fish:319 share/completions/svn.fish:337 -msgid "Use ARG as the newer target" -msgstr "" - -#: share/completions/svn.fish:320 share/completions/svn.fish:338 -#, fuzzy -msgid "Use ARG as diff command" -msgstr "Ã…ngra ett redigeringskommando" - -#: share/completions/svn.fish:360 -msgid "Use a different EOL marker than the standard" -msgstr "" - -#: share/completions/svn.fish:470 -msgid "Maximum number of log entries" -msgstr "Maximalt antal logginlägg" - #: share/completions/sylpheed.fish:8 msgid "Open composition window with address" msgstr "" @@ -5672,6 +6510,20 @@ msgstr "Användargränssnitt liknande rlogin" msgid "Use Kerberos realm for authentication" msgstr "Använd Kerberos-realm för autentisering" +#: share/completions/tmux.fish:1 +#, fuzzy +msgid "available sessions" +msgstr "Utför argument som kommandon" + +#: share/completions/tmux.fish:5 +msgid "connected clients" +msgstr "" + +#: share/completions/tmux.fish:9 +#, fuzzy +msgid "window panes" +msgstr "Terminalfönstret ändrade storlek" + #: share/completions/totem.fish:18 msgid "Tell any running totem instance: Add to playlist" msgstr "" @@ -5761,26 +6613,41 @@ msgstr "" msgid "Remove all temporarily added virtual overlays from the eix database" msgstr "" +#: share/completions/vagrant.fish:3 +#, fuzzy +msgid "Test if vagrant has yet to be given the main command" +msgstr "Testa om apt har tagit emot ett underkommando" + +#: share/completions/vagrant.fish:34 +#, fuzzy +msgid "Lists all available Vagrant boxes" +msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" + #: share/completions/valgrind.fish:12 msgid "Skin" msgstr "Verktyg" -#: share/completions/valgrind.fish:71 +#: share/completions/valgrind.fish:78 msgid "The number of bytes of heap overhead per allocation" msgstr "Antalet bytes av extra heap-utrymme som används per allokering" -#: share/completions/valgrind.fish:72 +#: share/completions/valgrind.fish:79 msgid "Profile stack usage" msgstr "Profilera stackanvändning" -#: share/completions/valgrind.fish:73 +#: share/completions/valgrind.fish:80 msgid "Depth of call chain" msgstr "Djup i anroppskedjan" -#: share/completions/valgrind.fish:74 +#: share/completions/valgrind.fish:81 msgid "Profiling output format" msgstr "Utdataformat för profilering" +#: share/completions/vim-addons.fish:8 +#, fuzzy +msgid "Test if vim-addons has yet to be given the subcommand" +msgstr "Testa om apt har tagit emot ett underkommando" + #: share/completions/w.fish:6 msgid "Username" msgstr "Användarnamn" @@ -6301,6 +7168,212 @@ msgstr "Inkludera bara följande namn" msgid "Don't compress files with these suffixes" msgstr "Komprimera inte filer med dessa ändelser" +#: share/completions/zypper.fish:30 +#, fuzzy +msgid "Print help" +msgstr "Visa URIer" + +#: share/completions/zypper.fish:31 +msgid "Accept multiple commands at once" +msgstr "" + +#: share/completions/zypper.fish:32 +msgid "List all defined repositories" +msgstr "" + +#: share/completions/zypper.fish:33 +#, fuzzy +msgid "Add a new repository" +msgstr "Uppdatera förrÃ¥d" + +#: share/completions/zypper.fish:34 +#, fuzzy +msgid "Remove specified repository" +msgstr "Ange förrÃ¥d-URL" + +#: share/completions/zypper.fish:35 +#, fuzzy +msgid "Rename specified repository" +msgstr "Reparera trasigt förrÃ¥d" + +#: share/completions/zypper.fish:36 +#, fuzzy +msgid "Modify specified repository" +msgstr "Ange förrÃ¥d-URL" + +#: share/completions/zypper.fish:37 +#, fuzzy +msgid "Refresh all repositories" +msgstr "Skrivskyddat förrÃ¥d-läge" + +#: share/completions/zypper.fish:38 +#, fuzzy +msgid "Clean local caches" +msgstr "Rengör lokala cachear och paket" + +#: share/completions/zypper.fish:39 +msgid "List all defined services" +msgstr "" + +#: share/completions/zypper.fish:40 +#, fuzzy +msgid "Add a new service" +msgstr "Lägg till ny nyckel" + +#: share/completions/zypper.fish:41 +#, fuzzy +msgid "Modify specified service" +msgstr "Använd angiven nyckelserver" + +#: share/completions/zypper.fish:42 +#, fuzzy +msgid "Remove specified service" +msgstr "Använd angiven nyckelserver" + +#: share/completions/zypper.fish:43 +msgid "Refresh all services" +msgstr "" + +#: share/completions/zypper.fish:44 +#, fuzzy +msgid "Install packages" +msgstr "Installerade paket" + +#: share/completions/zypper.fish:46 +#, fuzzy +msgid "Verify integrity of package dependencies" +msgstr "Installera/ta bort paket för beroenden" + +#: share/completions/zypper.fish:47 +#, fuzzy +msgid "Install source packages and their build dependencies" +msgstr "Installera/ta bort paket för beroenden" + +#: share/completions/zypper.fish:48 +#, fuzzy +msgid "Install newly added packages recommended by installed packages" +msgstr "" +"Installera paket även om de ersätter filer frÃ¥n andra, redan installerade " +"paket" + +#: share/completions/zypper.fish:49 +#, fuzzy +msgid "Update installed packages with newer versions" +msgstr "Visa alla källkodspaket med version" + +#: share/completions/zypper.fish:50 +#, fuzzy +msgid "List available updates" +msgstr "Visa tillgängliga paket" + +#: share/completions/zypper.fish:51 +#, fuzzy +msgid "Install needed patches" +msgstr "Installera nytt paket" + +#: share/completions/zypper.fish:52 +#, fuzzy +msgid "List needed patches" +msgstr "Visa byteavstÃ¥nd för matchningar" + +#: share/completions/zypper.fish:53 +#, fuzzy +msgid "Perform a distribution upgrade" +msgstr "Utför en simulering" + +#: share/completions/zypper.fish:54 +#, fuzzy +msgid "Check for patches" +msgstr "Dekomprimera fixar" + +#: share/completions/zypper.fish:55 +#, fuzzy +msgid "Search for packages matching a pattern" +msgstr "Sök paket innehÃ¥llande mönster" + +#: share/completions/zypper.fish:56 +#, fuzzy +msgid "Show full information for specified packages" +msgstr "Visa fulla versioner för paket" + +#: share/completions/zypper.fish:57 +#, fuzzy +msgid "Show full information for specified patches" +msgstr "Skriv profileringsinformation till angiven fil" + +#: share/completions/zypper.fish:58 +#, fuzzy +msgid "Show full information for specified patterns" +msgstr "Visa inte filer som matchar mönster" + +#: share/completions/zypper.fish:59 +#, fuzzy +msgid "Show full information for specified products" +msgstr "Skriv profileringsinformation till angiven fil" + +#: share/completions/zypper.fish:60 +#, fuzzy +msgid "List all available patches" +msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" + +#: share/completions/zypper.fish:61 +#, fuzzy +msgid "List all available packages" +msgstr "Ominstallera paket" + +#: share/completions/zypper.fish:62 +#, fuzzy +msgid "List all available patterns" +msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" + +#: share/completions/zypper.fish:63 +#, fuzzy +msgid "List all available products" +msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" + +#: share/completions/zypper.fish:64 +#, fuzzy +msgid "List packages providing specified capability" +msgstr "FrÃ¥ga alla paket som tillhandahÃ¥ller den angivna förmÃ¥gan" + +#: share/completions/zypper.fish:65 +#, fuzzy +msgid "Add a package lock" +msgstr "Bygg om paket" + +#: share/completions/zypper.fish:66 +#, fuzzy +msgid "Remove a package lock" +msgstr "Radera paket" + +#: share/completions/zypper.fish:67 +#, fuzzy +msgid "List current package locks" +msgstr "Lista buggar frÃ¥n paket" + +#: share/completions/zypper.fish:68 +#, fuzzy +msgid "Remove unused locks" +msgstr "Radera källkodpaket" + +#: share/completions/zypper.fish:69 +msgid "Compare two version strings" +msgstr "" + +#: share/completions/zypper.fish:70 +#, fuzzy +msgid "Print the target operating system ID string" +msgstr "Visa operativsystem" + +#: share/completions/zypper.fish:71 +msgid "Print report about licenses and EULAs of installed packages" +msgstr "" + +#: share/completions/zypper.fish:72 +#, fuzzy +msgid "Download source rpms for all installed packages to a local directory" +msgstr "Nedstig aldrig i föräldrakatalog" + #: share/functions/N_.fish:3 msgid "No-op" msgstr "" @@ -6310,10 +7383,23 @@ msgstr "" msgid "Alias for the gettext command" msgstr "Hjälp för det angivna kommandot" -#: share/functions/_.fish:9 seq:17 +#: share/functions/_.fish:9 msgid "fish" msgstr "" +#: share/functions/__fish_complete_abook_formats.fish:1 +msgid "Complete abook formats" +msgstr "" + +#: share/functions/__fish_complete_atool.fish:1 +msgid "Complete atool" +msgstr "" + +#: share/functions/__fish_complete_atool_archive_contents.fish:1 +#, fuzzy +msgid "List archive contents" +msgstr "Visa arkivinnehÃ¥ll" + #: share/functions/__fish_complete_bittorrent.fish:9 msgid "IP to report to the tracker" msgstr "IP adress att rapportera till tracker" @@ -6326,14 +7412,264 @@ msgstr "Lägsta portnummer att lyssna pÃ¥" msgid "Maximum port to listen to" msgstr "Högsta portnummer att lyssna pÃ¥" -#: share/functions/__fish_complete_command.fish:2 +#: share/functions/__fish_complete_command.fish:1 msgid "Complete using all available commands" msgstr "" +#: share/functions/__fish_complete_convert_options.fish:1 +#, fuzzy +msgid "Complete Convert options" +msgstr "Tolerera slarviga monteringsflaggor" + +#: share/functions/__fish_complete_diff.fish:3 +msgid "Ignore case differences" +msgstr "Ignorera skiftläge" + +#: share/functions/__fish_complete_diff.fish:4 +msgid "Ignore case when comparing file names" +msgstr "Ignorera skiftläge pÃ¥ filnamn" + +#: share/functions/__fish_complete_diff.fish:5 +msgid "Consider case when comparing file names" +msgstr "Skilj pÃ¥ skiftläge pÃ¥ filnamn" + +#: share/functions/__fish_complete_diff.fish:6 +msgid "Ignore changes due to tab expansion" +msgstr "Ignorera ändringar pÃ¥ grund av tabbexpansion" + +#: share/functions/__fish_complete_diff.fish:7 +msgid "Ignore changes in the amount of white space" +msgstr "Ignorera skillnader i blanka tecken" + +#: share/functions/__fish_complete_diff.fish:8 +msgid "Ignore all white space" +msgstr "Ignorera blanka tecken" + +#: share/functions/__fish_complete_diff.fish:9 +msgid "Ignore changes whose lines are all blank" +msgstr "Ignorera ändringar vars rader enbart bestÃ¥r av blana tecken" + +#: share/functions/__fish_complete_diff.fish:11 +msgid "Treat all files as text" +msgstr "Behandla alla filer som text" + +#: share/functions/__fish_complete_diff.fish:12 +msgid "Recursively compare subdirectories" +msgstr "Rekursera till underkataloger" + +#: share/functions/__fish_complete_diff.fish:13 +msgid "Treat absent files as empty" +msgstr "Behandla saknade filer som om de vore tomma" + +#: share/functions/__fish_complete_diff.fish:15 +msgid "Output 3 lines of copied context" +msgstr "Skriv ut 3 rader av kopierad sammanhang" + +#: share/functions/__fish_complete_diff.fish:17 +msgid "Output 3 lines of unified context" +msgstr "Skriv ut 3 rader av unifierat sammanhang" + +#: share/functions/__fish_complete_diff.fish:18 +msgid "Output only whether the files differ" +msgstr "Skriv bara ut huruvida filerna skiljer sig" + +#: share/functions/__fish_complete_diff.fish:19 +msgid "Output a normal diff" +msgstr "Skriv ut en vanlig diff" + +#: share/functions/__fish_complete_diff.fish:20 +msgid "Output in two columns" +msgstr "Skriv ut i tvÃ¥ kolumner" + +#: share/functions/__fish_complete_diff.fish:22 +msgid "Try to find a smaller set of changes" +msgstr "Försök hitta en mindre uppsättning ändringar" + +#: share/functions/__fish_complete_diff.fish:25 +msgid "Pass the output through 'pr'" +msgstr "Skicka utdata genom â€prâ€" + +#: share/functions/__fish_complete_grep.fish:2 +msgid "Print NUM lines of trailing context" +msgstr "Visa NUM rader av följande sammanhang" + +#: share/functions/__fish_complete_grep.fish:3 +msgid "Process binary file as text" +msgstr "Processa binär fil som text" + +#: share/functions/__fish_complete_grep.fish:4 +msgid "Print NUM lines of leading context" +msgstr "Visa NUM rader av inledande sammanhang" + +#: share/functions/__fish_complete_grep.fish:5 +msgid "Print NUM lines of context" +msgstr "Visa NUM rader av sammanhang" + +#: share/functions/__fish_complete_grep.fish:6 +#, fuzzy +msgid "Print byte offset of matches" +msgstr "Skriv bara ut angivet antal matchningar" + +#: share/functions/__fish_complete_grep.fish:7 +msgid "Assume data type for binary files" +msgstr "Antag följande datatyp för binära filer" + +#: share/functions/__fish_complete_grep.fish:10 +#, fuzzy +msgid "Only print number of matches" +msgstr "Skriv bara ut angivet antal matchningar" + +#: share/functions/__fish_complete_grep.fish:13 +msgid "Pattern is extended regexp" +msgstr "Mönster är ett förlängt reguljärt uttryck" + +#: share/functions/__fish_complete_grep.fish:14 +msgid "Pattern is a regexp" +msgstr "Mönster är ett reguljärt uttryck" + +#: share/functions/__fish_complete_grep.fish:15 +msgid "Read pattern list from file. Skip files whose base name matches list" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:16 +#, fuzzy +msgid "Exclude matching directories from recursive searches" +msgstr "Sök i angivna kataloger efter källkod" + +#: share/functions/__fish_complete_grep.fish:17 +msgid "Pattern is a fixed string" +msgstr "Mönster är en fixsträng" + +#: share/functions/__fish_complete_grep.fish:19 +msgid "Pattern is basic regex" +msgstr "Mönster är ett grundläggande reguljärt uttryck" + +#: share/functions/__fish_complete_grep.fish:20 +msgid "Print filename" +msgstr "Visa filnamn" + +#: share/functions/__fish_complete_grep.fish:21 +#, fuzzy +msgid "Suppress printing filename" +msgstr "Visa inte filnamn" + +#: share/functions/__fish_complete_grep.fish:23 +msgid "Skip binary files" +msgstr "Skippa binära filer" + +#: share/functions/__fish_complete_grep.fish:24 +msgid "Ignore case" +msgstr "Ignorera skiftläge" + +#: share/functions/__fish_complete_grep.fish:25 +msgid "Print first non-matching file" +msgstr "Visa första icke-matchande fil" + +#: share/functions/__fish_complete_grep.fish:26 +msgid "Print first matching file" +msgstr "Visa första matchande fil" + +#: share/functions/__fish_complete_grep.fish:27 +msgid "Stop reading after NUM matches" +msgstr "Sluta läsa efter NUM matchningar" + +#: share/functions/__fish_complete_grep.fish:28 +msgid "Use the mmap system call to read input" +msgstr "Använd systemanroppet mmap för inläsning" + +#: share/functions/__fish_complete_grep.fish:29 +#, fuzzy +msgid "Print line number" +msgstr "Visa radnummer" + +#: share/functions/__fish_complete_grep.fish:30 +msgid "Show only matching part" +msgstr "Visa bara matchande del" + +#: share/functions/__fish_complete_grep.fish:31 +msgid "Rename stdin" +msgstr "Byt namn pÃ¥ standard in" + +#: share/functions/__fish_complete_grep.fish:32 +msgid "Use line buffering" +msgstr "Använd radbuffring" + +#: share/functions/__fish_complete_grep.fish:33 +#, fuzzy +msgid "Pattern is a Perl regexp (PCRE) string" +msgstr "Mönster är ett reguljärt uttryck" + +#: share/functions/__fish_complete_grep.fish:34 +#: share/functions/__fish_complete_grep.fish:35 +msgid "Do not write anything" +msgstr "Skriv ingenting" + +#: share/functions/__fish_complete_grep.fish:36 +#: share/functions/__fish_complete_grep.fish:37 +#, fuzzy +msgid "Read files under each directory, recursively" +msgstr "Läs filer i varje katalog" + +#: share/functions/__fish_complete_grep.fish:38 +#, fuzzy +msgid "Search only files matching PATTERN" +msgstr "Rekursera, sök i filer som matchar mönster" + +#: share/functions/__fish_complete_grep.fish:39 +#, fuzzy +msgid "Skip files matching PATTERN" +msgstr "Rekursera, skippa filer som matchar mönster" + +#: share/functions/__fish_complete_grep.fish:40 +msgid "Suppress error messages" +msgstr "Visa inte felmeddelanden" + +#: share/functions/__fish_complete_grep.fish:41 +msgid "Ensure first character of actual line content lies on a tab stop" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:42 +msgid "Treat files as binary" +msgstr "Behandla filer som om de vore binära" + +#: share/functions/__fish_complete_grep.fish:43 +msgid "Report Unix-style byte offsets" +msgstr "Visa Unix-typ av byteavstÃ¥nd" + +#: share/functions/__fish_complete_grep.fish:45 +msgid "Invert the sense of matching" +msgstr "Invertera matchning" + +#: share/functions/__fish_complete_grep.fish:46 +msgid "Only whole matching words" +msgstr "Matcha bara hela ord" + +#: share/functions/__fish_complete_grep.fish:47 +msgid "Only whole matching lines" +msgstr "Matcha bara hela rader" + +#: share/functions/__fish_complete_grep.fish:48 +#, fuzzy +msgid "Obsolete synonym for -i" +msgstr "Synonym för -i" + +#: share/functions/__fish_complete_grep.fish:49 +msgid "treat input as a set of lines each terminated by a zero byte" +msgstr "" + +#: share/functions/__fish_complete_grep.fish:50 +msgid "Output a zero byte after filename" +msgstr "Skriv en nollad byte efter filnamn" + #: share/functions/__fish_complete_groups.fish:2 msgid "Print a list of local groups, with group members as the description" msgstr "" +#: share/functions/__fish_complete_lpr_option.fish:1 +#, fuzzy +msgid "Complete lpr option" +msgstr "Tolerera slarviga monteringsflaggor" + #: share/functions/__fish_complete_ls.fish:16 msgid "Show hidden" msgstr "Visa dolda filer" @@ -6534,12 +7870,46 @@ msgstr "Visa varje file MAC-etikett" msgid "Include the file flags in a long (-l) output" msgstr "Visa filflaggor vid lÃ¥ngt (-l) formay" +#: share/functions/__fish_complete_ppp_peer.fish:1 +msgid "Complete isp name for pon/poff" +msgstr "" + +#: share/functions/__fish_complete_proc.fish:1 +#, fuzzy +msgid "Complete by list of running processes" +msgstr "Visa lista pÃ¥ alla körande screen-sessioner" + +#: share/functions/__fish_complete_python.fish:2 +#: share/functions/__fish_complete_python.fish:28 +#: share/functions/__fish_complete_vi.fish:54 +msgid "Don\\t" +msgstr "" + +#: share/functions/__fish_complete_python.fish:12 +msgid "Disable import of site module" +msgstr "SlÃ¥ av importering av platsmodul" + +#: share/functions/__fish_complete_python.fish:13 +msgid "Unbuffered input and output" +msgstr "Buffra inte indata och utdata" + +#: share/functions/__fish_complete_python.fish:24 +msgid "Warn on mixed tabs and spaces" +msgstr "Varna vid blandad användning av tabbar och mellanslag" + +#: share/functions/__fish_complete_setxkbmap.fish:1 +#, fuzzy +msgid "Complete setxkb options" +msgstr "Tolerera slarviga monteringsflaggor" + #: share/functions/__fish_complete_ssh.fish:4 -msgid "Protocoll version 1 only" +#, fuzzy +msgid "Protocol version 1 only" msgstr "Bara protokoll version 1" #: share/functions/__fish_complete_ssh.fish:5 -msgid "Protocoll version 2 only" +#, fuzzy +msgid "Protocol version 2 only" msgstr "Bara protokoll version 2" #: share/functions/__fish_complete_ssh.fish:6 @@ -6570,6 +7940,342 @@ msgstr "Identitetsfil" msgid "Options" msgstr "Flaggor" +#: share/functions/__fish_complete_svn.fish:48 +msgid "" +"Put files and directories under version control, scheduling them for " +"addition to repository. They will be added in next commit." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:49 +#: share/functions/__fish_complete_svn.fish:51 +#, fuzzy +msgid "" +"Output the content of specified files or URLs with revision and author " +"information in-line." +msgstr "Visa filer/URL:er med revisions- och författarinformation inbakat" + +#: share/functions/__fish_complete_svn.fish:50 +#, fuzzy +msgid "Output the content of specified files or URLs." +msgstr "Visa innehÃ¥ll av filer/URL:er" + +#: share/functions/__fish_complete_svn.fish:52 +#, fuzzy +msgid "Check out a working copy from a repository." +msgstr "Hämta ut en arbetskopia frÃ¥n förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:53 +msgid "" +"Recursively clean up the working copy, removing locks, resuming unfinished " +"operations, etc." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:54 +#, fuzzy +msgid "Send changes from your working copy to the repository." +msgstr "Skicka ändringar i arbetskopian till lagret" + +#: share/functions/__fish_complete_svn.fish:55 +#, fuzzy +msgid "Duplicate something in working copy or repository, remembering history." +msgstr "Flytta och/eller byt namn pÃ¥ nÃ¥gonting i arbetskopian eller förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:56 +#, fuzzy +msgid "Display the differences between two revisions or paths." +msgstr "Applicera differensen mellan tvÃ¥ källor till en arbetskopiesökväg" + +#: share/functions/__fish_complete_svn.fish:57 +msgid "Create an unversioned copy of a tree." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:58 +#, fuzzy +msgid "Describe the usage of this program or its subcommands." +msgstr "Beskriv användandet av detta program eller dess underkommandon" + +#: share/functions/__fish_complete_svn.fish:59 +#, fuzzy +msgid "Commit an unversioned file or tree into the repository." +msgstr "Lägg till fil eller träd utan version till förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:60 +#, fuzzy +msgid "Display information about a local or remote item." +msgstr "Visa information om lokal eller fjärrelement" + +#: share/functions/__fish_complete_svn.fish:61 +#, fuzzy +msgid "List directory entries in the repository." +msgstr "Lista kataloger i förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:62 +#, fuzzy +msgid "" +"Lock working copy paths or URLs in the repository, so that no other user can " +"commit changes to them." +msgstr "Läs arbetskopiwsökvägar eller URL:er i förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:63 +#, fuzzy +msgid "Show the log messages for a set of revision(s) and/or file(s)." +msgstr "Visa loggmeddelanden för en uppsättning revisioner och/eller filer" + +#: share/functions/__fish_complete_svn.fish:64 +#, fuzzy +msgid "Apply the differences between two sources to a working copy path." +msgstr "Applicera differensen mellan tvÃ¥ källor till en arbetskopiesökväg" + +#: share/functions/__fish_complete_svn.fish:65 +#, fuzzy +msgid "Display information related to merges" +msgstr "Visa ändringsinformation för paket" + +#: share/functions/__fish_complete_svn.fish:66 +#, fuzzy +msgid "Create a new directory under version control." +msgstr "Skapa ny katalog under revisionskontroll" + +#: share/functions/__fish_complete_svn.fish:67 +#, fuzzy +msgid "Move and/or rename something in working copy or repository." +msgstr "Flytta och/eller byt namn pÃ¥ nÃ¥gonting i arbetskopian eller förrÃ¥det" + +#: share/functions/__fish_complete_svn.fish:68 +#, fuzzy +msgid "Apply a unidiff patch to the working copy" +msgstr "Visa olagrade ändringar i arbetskopian" + +#: share/functions/__fish_complete_svn.fish:69 +#, fuzzy +msgid "Remove a property from files, dirs, or revisions." +msgstr "Ta bort en egenskap frÃ¥n filer, kataloger eller revisioner" + +#: share/functions/__fish_complete_svn.fish:70 +#, fuzzy +msgid "Edit a property with an external editor." +msgstr "Redigera en egenskap med extern edito för mÃ¥l" + +#: share/functions/__fish_complete_svn.fish:71 +#, fuzzy +msgid "Print the value of a property on files, dirs, or revisions." +msgstr "Skriv ut värde för en egenskap hos filer, kataloger eller revisioner" + +#: share/functions/__fish_complete_svn.fish:72 +#, fuzzy +msgid "List all properties on files, dirs, or revisions." +msgstr "Visa alla engenskaper hos filer, kataloger eller revisioner" + +#: share/functions/__fish_complete_svn.fish:73 +#, fuzzy +msgid "Set the value of a property on files, dirs, or revisions." +msgstr "Skriv ut värde för en egenskap hos filer, kataloger eller revisioner" + +#: share/functions/__fish_complete_svn.fish:74 +#, fuzzy +msgid "Rewrite working copy url metadata" +msgstr "Radera arbetskopia om släppning lyckas" + +#: share/functions/__fish_complete_svn.fish:75 +#, fuzzy +msgid "Remove files and directories from version control." +msgstr "Placera filer och kataloger under versionskontroll" + +#: share/functions/__fish_complete_svn.fish:76 +#, fuzzy +msgid "Remove conflicts on working copy files or directories." +msgstr "Ta bort konflikttillstÃ¥nd hos arbetskopiefiler eller kataloger" + +#: share/functions/__fish_complete_svn.fish:77 +#, fuzzy +msgid "Remove \\conflicted state on working copy files or directories." +msgstr "Ta bort konflikttillstÃ¥nd hos arbetskopiefiler eller kataloger" + +#: share/functions/__fish_complete_svn.fish:78 +#, fuzzy +msgid "Restore pristine working copy file (undo most local edits)." +msgstr "Ã…terställ rensad arbetskopiefil" + +#: share/functions/__fish_complete_svn.fish:79 +#, fuzzy +msgid "Print the status of working copy files and directories." +msgstr "Visa status för arbetskopians filer och kataloger" + +#: share/functions/__fish_complete_svn.fish:80 +#, fuzzy +msgid "Update the working copy to a different URL." +msgstr "Uppdatera arbetskopian till en annan URL" + +#: share/functions/__fish_complete_svn.fish:81 +#, fuzzy +msgid "Unlock working copy paths or URLs." +msgstr "LÃ¥s upp arbetskopians sökvägar eller URL:er" + +#: share/functions/__fish_complete_svn.fish:82 +#, fuzzy +msgid "Bring changes from the repository into the working copy." +msgstr "Hämta ändringar frÃ¥n förrÃ¥det till arbetskopian" + +#: share/functions/__fish_complete_svn.fish:83 +msgid "Upgrade the metadata storage format for a working copy." +msgstr "" + +#: share/functions/__fish_complete_svn.fish:90 +#, fuzzy +msgid "Do not cache authentication tokens" +msgstr "Cacha inte autentiseringssymboler" + +#: share/functions/__fish_complete_svn.fish:91 +msgid "Do no interactive prompting" +msgstr "Ställ inga interaktiva frÃ¥gor" + +#: share/functions/__fish_complete_svn.fish:92 +msgid "" +"Accept SSL server certificates from unknown authorities (ony with --non-" +"interactive)" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:103 +#, fuzzy +msgid "Specify log message" +msgstr "Välj e-postkatalog" + +#: share/functions/__fish_complete_svn.fish:105 +#, fuzzy +msgid "Read log message from file" +msgstr "Läs loggmeddelande frÃ¥n fil" + +#: share/functions/__fish_complete_svn.fish:106 +#, fuzzy +msgid "Force validity of log message source" +msgstr "Tvinga validitet av loggmeddelandes källa" + +#: share/functions/__fish_complete_svn.fish:118 +#, fuzzy +msgid "Print nothing, or only summary information" +msgstr "Visa all information" + +#: share/functions/__fish_complete_svn.fish:122 +msgid "Force operation to run" +msgstr "Tvinga operationen att utföras" + +#: share/functions/__fish_complete_svn.fish:126 +#, fuzzy +msgid "Process contents of file ARG as additional args" +msgstr "Skicka filinnehÃ¥ll som extra argument" + +#: share/functions/__fish_complete_svn.fish:130 +msgid "Operate only on members of changelist" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:134 +#, fuzzy +msgid "Output in xml" +msgstr "Utadata i XML-format" + +#: share/functions/__fish_complete_svn.fish:138 +#, fuzzy +msgid "Retrieve revision property" +msgstr "Utför pÃ¥ revisionsegenskap" + +#: share/functions/__fish_complete_svn.fish:150 +msgid "Ignore externals definitions" +msgstr "Ignorera definitioner av externals" + +#: share/functions/__fish_complete_svn.fish:154 +#, fuzzy +msgid "Print extra information" +msgstr "Visa all information" + +#: share/functions/__fish_complete_svn.fish:158 +#, fuzzy +msgid "Operate on a revision property (use with -r)" +msgstr "Utför pÃ¥ revisionsegenskap" + +#: share/functions/__fish_complete_svn.fish:162 +msgid "Add intermediate parents" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:189 +#, fuzzy +msgid "Try operation but make no changes" +msgstr "Försök hitta en mindre uppsättning ändringar" + +#: share/functions/__fish_complete_svn.fish:193 +#, fuzzy +msgid "Ignore ancestry when calculating merges" +msgstr "Ignorera ursprung vid beräknandet av sammanslagning" + +#: share/functions/__fish_complete_svn.fish:197 +#, fuzzy +msgid "Override diff-cmd specified in config file" +msgstr "Flytta filen angiven pÃ¥ kommandoraden" + +#: share/functions/__fish_complete_svn.fish:198 +#, fuzzy +msgid "Use external diff command" +msgstr "Ã…ngra ett redigeringskommando" + +#: share/functions/__fish_complete_svn.fish:202 +msgid "Disable automatic properties" +msgstr "Inaktivera automatiska egenskaper" + +#: share/functions/__fish_complete_svn.fish:206 +#, fuzzy +msgid "Set new working copy depth" +msgstr "Välj RAW-skrivläge" + +#: share/functions/__fish_complete_svn.fish:230 +msgid "don\\t" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:241 +msgid "Use ARG as the older target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:242 +msgid "Use ARG as the newer target" +msgstr "" + +#: share/functions/__fish_complete_svn.fish:243 +#, fuzzy +msgid "Do not print differences for deleted files" +msgstr "Skriv inte ut rader utan fältavgränsare" + +#: share/functions/__fish_complete_svn.fish:244 +#, fuzzy +msgid "Notice ancestry when calculating differences" +msgstr "Ignorera ursprung vid beräknandet av sammanslagning" + +#: share/functions/__fish_complete_svn.fish:245 +#, fuzzy +msgid "Show a summary of the results" +msgstr "Välj en konfigurationsinställning" + +#: share/functions/__fish_complete_svn.fish:257 +#, fuzzy +msgid "Do not cross copies while traversing history" +msgstr "Korsa inte kopior" + +#: share/functions/__fish_complete_svn.fish:259 +#, fuzzy +msgid "Produce diff output" +msgstr "Ljudutdata" + +#: share/functions/__fish_complete_svn.fish:279 +msgid "Use strict semantics" +msgstr "Använd strikt semantik" + +#: share/functions/__fish_complete_svn.fish:306 +#, fuzzy +msgid "Relocate via URL-rewriting" +msgstr "Relokera via URL-omskrivning" + +#: share/functions/__fish_complete_svn_diff.fish:1 +#, fuzzy +msgid "Complete \"svn diff\" arguments" +msgstr "Räkna antalet argument" + #: share/functions/__fish_complete_tar.fish:14 #: share/functions/__fish_complete_tar.fish:21 #: share/functions/__fish_complete_tar.fish:28 @@ -6581,184 +8287,188 @@ msgstr "%s\\tArkivfil\\n" msgid "Print a list of local users, with the real user name as a description" msgstr "" -#: share/functions/__fish_complete_vi.fish:45 +#: share/functions/__fish_complete_vi.fish:37 #, fuzzy msgid "Start in Arabic mode" msgstr "Starta gränssnitt" -#: share/functions/__fish_complete_vi.fish:46 +#: share/functions/__fish_complete_vi.fish:38 #, fuzzy msgid "Start in binary mode" msgstr "Standardläge" -#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:39 msgid "Behave mostly like vi" msgstr "" -#: share/functions/__fish_complete_vi.fish:48 +#: share/functions/__fish_complete_vi.fish:40 #, fuzzy msgid "Start in diff mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:49 +#: share/functions/__fish_complete_vi.fish:41 #, fuzzy msgid "Debugging mode" msgstr "Debugläge" -#: share/functions/__fish_complete_vi.fish:50 +#: share/functions/__fish_complete_vi.fish:42 #, fuzzy msgid "Start in Ex mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:51 +#: share/functions/__fish_complete_vi.fish:43 #, fuzzy msgid "Start in improved Ex mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:52 -#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:44 +#: share/functions/__fish_complete_vi.fish:67 #, fuzzy msgid "Start in foreground mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:53 +#: share/functions/__fish_complete_vi.fish:45 #, fuzzy msgid "Start in Farsi mode" msgstr "Standardläge" -#: share/functions/__fish_complete_vi.fish:54 +#: share/functions/__fish_complete_vi.fish:46 #, fuzzy msgid "Start in GUI mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:55 -#: share/functions/__fish_complete_vi.fish:77 +#: share/functions/__fish_complete_vi.fish:47 +#: share/functions/__fish_complete_vi.fish:69 #, fuzzy msgid "Print help message and exit" msgstr "Visa version och avsluta" -#: share/functions/__fish_complete_vi.fish:56 +#: share/functions/__fish_complete_vi.fish:48 #, fuzzy msgid "Start in Hebrew mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:57 +#: share/functions/__fish_complete_vi.fish:49 #, fuzzy msgid "List swap files" msgstr "Arkivfil" -#: share/functions/__fish_complete_vi.fish:58 +#: share/functions/__fish_complete_vi.fish:50 #, fuzzy msgid "Start in lisp mode" msgstr "Börja i folderindex" -#: share/functions/__fish_complete_vi.fish:59 +#: share/functions/__fish_complete_vi.fish:51 #, fuzzy msgid "Disable file modification" msgstr "Lita inte pÃ¥ filändringstid" -#: share/functions/__fish_complete_vi.fish:60 +#: share/functions/__fish_complete_vi.fish:52 #, fuzzy msgid "Disallow file modification" msgstr "Visa bara senaste modifiering" -#: share/functions/__fish_complete_vi.fish:61 +#: share/functions/__fish_complete_vi.fish:53 msgid "Reset compatibility mode" msgstr "" #: share/functions/__fish_complete_vi.fish:62 -msgid "Don\\t" -msgstr "" - -#: share/functions/__fish_complete_vi.fish:70 #, fuzzy msgid "Start in easy mode" msgstr "Starta gränssnitt" -#: share/functions/__fish_complete_vi.fish:71 +#: share/functions/__fish_complete_vi.fish:63 #, fuzzy msgid "Start in restricted mode" msgstr "Inskränkt läge" -#: share/functions/__fish_complete_vi.fish:73 +#: share/functions/__fish_complete_vi.fish:65 msgid "Become an editor server for NetBeans" msgstr "" -#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:68 msgid "Echo the Window ID on stdout (GTK GUI only)" msgstr "" -#: share/functions/__fish_complete_vi.fish:78 +#: share/functions/__fish_complete_vi.fish:70 #, fuzzy msgid "Do not expand wildcards" msgstr "Expandera inte mönster" -#: share/functions/__fish_complete_vi.fish:79 +#: share/functions/__fish_complete_vi.fish:71 msgid "Skip loading plugins" msgstr "" -#: share/functions/__fish_complete_vi.fish:80 -#: share/functions/__fish_complete_vi.fish:83 -#: share/functions/__fish_complete_vi.fish:84 -#: share/functions/__fish_complete_vi.fish:85 +#: share/functions/__fish_complete_vi.fish:72 +#: share/functions/__fish_complete_vi.fish:75 +#: share/functions/__fish_complete_vi.fish:76 +#: share/functions/__fish_complete_vi.fish:77 #, fuzzy msgid "Edit files on Vim server" msgstr "Redigera filer pÃ¥ plats" -#: share/functions/__fish_complete_vi.fish:81 +#: share/functions/__fish_complete_vi.fish:73 #, fuzzy msgid "Evaluate expr on Vim server" msgstr "Utför argument som kommandon" -#: share/functions/__fish_complete_vi.fish:82 +#: share/functions/__fish_complete_vi.fish:74 #, fuzzy msgid "Send keys to Vim server" msgstr "Skicka e-post till användare" -#: share/functions/__fish_complete_vi.fish:86 +#: share/functions/__fish_complete_vi.fish:78 msgid "List all Vim servers that can be found" msgstr "" -#: share/functions/__fish_complete_vi.fish:87 +#: share/functions/__fish_complete_vi.fish:79 #, fuzzy msgid "Set server name" msgstr "Namn pÃ¥ tjänst" -#: share/functions/__fish_complete_vi.fish:88 +#: share/functions/__fish_complete_vi.fish:80 #, fuzzy msgid "Print version information and exit" msgstr "Visa version och avsluta" -#: share/functions/__fish_complete_vi.fish:99 +#: share/functions/__fish_complete_vi.fish:91 msgid "Suppress all interactive user feedback" msgstr "" -#: share/functions/__fish_complete_vi.fish:100 -#: share/functions/__fish_complete_vi.fish:107 +#: share/functions/__fish_complete_vi.fish:92 +#: share/functions/__fish_complete_vi.fish:99 msgid "Encrypt/decrypt text" msgstr "" -#: share/functions/__fish_complete_vi.fish:101 +#: share/functions/__fish_complete_vi.fish:93 msgid "Set up for editing LISP programs" msgstr "" -#: share/functions/__fish_complete_vi.fish:102 +#: share/functions/__fish_complete_vi.fish:94 msgid "List saved file names after crash" msgstr "" -#: share/functions/__fish_complete_vi.fish:103 +#: share/functions/__fish_complete_vi.fish:95 #, fuzzy -msgid "Readonly mode" +msgid "Read-only mode" msgstr "Skrivskyddad" -#: share/functions/__fish_complete_vi.fish:104 +#: share/functions/__fish_complete_vi.fish:96 msgid "Use linear search for tags if tag file not sorted" msgstr "" -#: share/functions/__fish_complete_vi.fish:105 +#: share/functions/__fish_complete_vi.fish:97 msgid "Start in display editing state" msgstr "" +#: share/functions/__fish_complete_wvdial_peers.fish:1 +msgid "Complete wvdial peers" +msgstr "" + +#: share/functions/__fish_complete_xsum.fish:1 +msgid "Complete md5sum sha1 etc" +msgstr "" + #: share/functions/__fish_config_interactive.fish:65 #, sh-format msgid "" @@ -6772,61 +8482,138 @@ msgstr "" "denna plats genom att byta värde pÃ¥ variabeln $XDG_CONFIG_HOME.\\n\\n" # -#: share/functions/__fish_config_interactive.fish:81 +#: share/functions/__fish_config_interactive.fish:82 msgid "Welcome to fish, the friendly interactive shell" msgstr "Välkommen till fish, det vänliga interaktiva skalet" # -#: share/functions/__fish_config_interactive.fish:82 +#: share/functions/__fish_config_interactive.fish:83 msgid "Type %shelp%s for instructions on how to use fish" msgstr "Skriv %shelp%s för instruktioner om hur man använder fish" -#: share/functions/__fish_config_interactive.fish:98 -msgid "Commands to execute when fish exits" -msgstr "Kommandon som utförs när fish avslutas" - -#: share/functions/__fish_config_interactive.fish:99 -msgid "Good bye\\n" -msgstr "Hej dÃ¥\\n" - -#: share/functions/__fish_config_interactive.fish:163 +#: share/functions/__fish_config_interactive.fish:173 msgid "Event handler, repaints the prompt when fish_color_cwd changes" msgstr "Händelsehanterare, ritar om prompten när fish_color_cwd ändras" -#: share/functions/__fish_config_interactive.fish:170 +#: share/functions/__fish_config_interactive.fish:180 #, fuzzy msgid "Event handler, repaints the prompt when fish_color_cwd_root changes" msgstr "Händelsehanterare, ritar om prompten när fish_color_cwd ändras" -#: share/functions/__fish_config_interactive.fish:182 +#: share/functions/__fish_config_interactive.fish:192 msgid "Start service" msgstr "Starta tjänst" -#: share/functions/__fish_config_interactive.fish:183 +#: share/functions/__fish_config_interactive.fish:193 msgid "Stop service" msgstr "Stanna tjänst" -#: share/functions/__fish_config_interactive.fish:184 +#: share/functions/__fish_config_interactive.fish:194 msgid "Print service status" msgstr "Visa status för tjänst" -#: share/functions/__fish_config_interactive.fish:185 +#: share/functions/__fish_config_interactive.fish:195 msgid "Stop and then start service" msgstr "Stanna och starta tjänst" -#: share/functions/__fish_config_interactive.fish:186 +#: share/functions/__fish_config_interactive.fish:196 msgid "Reload service configuration" msgstr "Ladda om konfiguration för tjänst" +#: share/functions/__fish_config_interactive.fish:228 +#, sh-format +msgid "Notify VTE of change to $PWD" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:173 +msgid "Helper function for __fish_git_prompt" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:244 +msgid "svn_upstream" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:348 +#, fuzzy +msgid "Prompt function for Git" +msgstr "Nuvarande funktioner är: " + +#: share/functions/__fish_git_prompt.fish:458 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has staged " +"files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:471 +msgid "" +"__fish_git_prompt helper, tells whether or not the current branch has " +"tracked, modified files" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:526 +msgid "__fish_git_prompt helper, returns the current Git operation and branch" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:639 +msgid "__fish_git_prompt helper, checks char variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:690 +msgid "__fish_git_prompt helper, checks color variables" +msgstr "" + +#: share/functions/__fish_git_prompt.fish:730 +#, fuzzy +msgid "Event handler, repaints prompt when functionality changes" +msgstr "Händelsehanterare, ritar om prompten när fish_color_cwd ändras" + +#: share/functions/__fish_git_prompt.fish:748 +#, fuzzy +msgid "Event handler, repaints prompt when any color changes" +msgstr "Händelsehanterare, ritar om prompten när fish_color_cwd ändras" + +#: share/functions/__fish_git_prompt.fish:768 +#, fuzzy +msgid "Event handler, repaints prompt when any char changes" +msgstr "Händelsehanterare, ritar om prompten när fish_color_cwd ändras" + +#: share/functions/__fish_is_token_n.fish:1 +msgid "Test if current token is on Nth place" +msgstr "" + +#: share/functions/__fish_make_completion_signals.fish:1 +msgid "Make list of kill signals for completion" +msgstr "" + #: share/functions/__fish_move_last.fish:9 msgid "Hit end of history...\\n" msgstr "Slut pÃ¥ kataloghistorik...\\n" +#: share/functions/__fish_print_abook_emails.fish:1 +#, fuzzy +msgid "Print email addresses (abook)" +msgstr "Visa döda processer" + #: share/functions/__fish_print_addresses.fish:1 #, fuzzy msgid "Print a list of known network addresses" msgstr "Visa lista pÃ¥ alla körande screen-sessioner" +#: share/functions/__fish_print_arch_daemons.fish:1 +#, fuzzy +msgid "Print arch daemons" +msgstr "Visa alla namn" + +#: share/functions/__fish_print_commands.fish:1 +#, fuzzy +msgid "Print a list of documented fish commands" +msgstr "Visa en lista pÃ¥ alla tillÃ¥tna färgnamn" + +#: share/functions/__fish_print_debian_services.fish:1 +#, fuzzy +msgid "Prints services installed" +msgstr "Visa status för tjänst" + #: share/functions/__fish_print_help.fish:2 msgid "Print help message for the specified fish function or builtin" msgstr "" @@ -6837,15 +8624,80 @@ msgstr "" msgid "Print a list of known network interfaces" msgstr "Visa en lista pÃ¥ alla tillÃ¥tna färgnamn" +#: share/functions/__fish_print_lpr_options.fish:1 +#, fuzzy +msgid "Print lpr options" +msgstr "Visa alla versioner" + +#: share/functions/__fish_print_lpr_printers.fish:1 +#, fuzzy +msgid "Print lpr printers" +msgstr "Visa fulla poster" + +#: share/functions/__fish_print_lsblk_columns.fish:1 +#, fuzzy +msgid "Print available lsblk columns" +msgstr "Visa tillgängliga paket" + +#: share/functions/__fish_print_mounted.fish:1 +#, fuzzy +msgid "Print mounted devices" +msgstr "Visa viktiga beroenden" + +#: share/functions/__fish_print_svn_rev.fish:1 +#, fuzzy +msgid "Print svn revisions" +msgstr "Skriv bara ut angiven revision" + #: share/functions/__fish_print_users.fish:2 #, fuzzy msgid "Print a list of local users" msgstr "Visa en lista pÃ¥ alla tillÃ¥tna färgnamn" +#: share/functions/__fish_print_xdg_mimeapps.fish:1 +#, fuzzy +msgid "Print xdg mime applications" +msgstr "Visa all information" + +#: share/functions/__fish_print_xdg_mimetypes.fish:1 +#, fuzzy +msgid "Print XDG mime types" +msgstr "Skriv ut kommandotyp" + +#: share/functions/__fish_print_xrandr_modes.fish:1 +#, fuzzy +msgid "Print xrandr modes" +msgstr "Skriv obehandlade filnamn" + +#: share/functions/__fish_print_xrandr_outputs.fish:1 +#, fuzzy +msgid "Print xrandr outputs" +msgstr "Visa antal ord" + +#: share/functions/__fish_print_xwindows.fish:1 +#, fuzzy +msgid "Print X windows" +msgstr "Visa APM-information" + +#: share/functions/__fish_pwd.fish:3 share/functions/__fish_pwd.fish:7 +#, fuzzy +msgid "Show current path" +msgstr "Visa alla källkodspaket" + #: share/functions/__fish_test_arg.fish:2 msgid "Test if the token under the cursor matches the specified wildcard" msgstr "" +#: share/functions/__fish_urlencode.fish:1 +#, fuzzy +msgid "URL-encode stdin" +msgstr "Byt namn pÃ¥ standard in" + +#: share/functions/__terlar_git_prompt.fish:23 +#, fuzzy +msgid "Write out the git prompt" +msgstr "Skriv prompten" + #: share/functions/alias.fish:2 msgid "" "Legacy function for creating shellscript functions using an alias-like syntax" @@ -6853,11 +8705,15 @@ msgstr "" "BakÃ¥tkompatibilitetsfunktion för att skapa skalfunktioner med en alias-" "liknande syntax" -#: share/functions/alias.fish:26 +#: share/functions/alias.fish:34 #, fuzzy msgid "%s: Expected one or two arguments, got %d\\n" msgstr "%ls: Förväntade ett eller tvÃ¥ argument, fick %d" +#: share/functions/contains_seq.fish:1 +msgid "Return true if array contains a sequence" +msgstr "" + #: share/functions/dirh.fish:2 msgid "Print the current directory history (the back- and fwd- lists)" msgstr "Visa arbetskatalogshistorik (bakÃ¥t och frammÃ¥t)" @@ -6866,65 +8722,89 @@ msgstr "Visa arbetskatalogshistorik (bakÃ¥t och frammÃ¥t)" msgid "Print directory stack" msgstr "Visa katalogstack" +#: share/functions/fish_config.fish:1 +msgid "Launch fish's web based configuration" +msgstr "" + +#: share/functions/fish_indent.fish:1 +msgid "Indenter and prettifier for fish code" +msgstr "" + #: share/functions/fish_prompt.fish:5 msgid "Write out the prompt" msgstr "Skriv prompten" -#: share/functions/funced.fish:2 +#: share/functions/fish_update_completions.fish:1 +#, fuzzy +msgid "Update man-page based completions" +msgstr "Redigera kommando-specifika kompletteringar" + +#: share/functions/funced.fish:1 #, fuzzy msgid "Edit function definition" msgstr "funktionsdefinition-block" -#: share/functions/funced.fish:11 share/functions/nextd.fish:21 -#: share/functions/prevd.fish:21 share/functions/vared.fish:16 +#: share/functions/funced.fish:24 share/functions/nextd.fish:22 +#: share/functions/prevd.fish:22 share/functions/vared.fish:15 msgid "%s: Unknown option %s\\n" msgstr "%s: Okänd flagga â€%sâ€\\n" -#: share/functions/funced.fish:38 +#: share/functions/funced.fish:36 #, fuzzy -msgid "" -"%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%sfunced%s " -"FUNCTION\\n" -msgstr "" -"%s: Förväntade exakt ett argument, fick %s\\n\\nSynopsis:\\n\\t%svared%s " -"VARIABEL\\n" +msgid "funced: You must specify one function name\n" +msgstr "%ls: Förväntade exakt ett funktionsnamn\n" #: share/functions/funcsave.fish:2 msgid "Save the current definition of all specified functions to file" msgstr "" -#: share/functions/funcsave.fish:24 +#: share/functions/funcsave.fish:11 +#, fuzzy +msgid "%s: Expected function name\\n" +msgstr "%ls: Förväntade ett funktionsnamn\n" + +#: share/functions/funcsave.fish:26 msgid "%s: Could not create configuration directory\\n" msgstr "%s: Kunde inte skapa konfigurationskatalogen\\n" -#: share/functions/funcsave.fish:35 +#: share/functions/funcsave.fish:37 msgid "%s: Unknown function '%s'\\n" msgstr "%s: Okänd funktion â€%sâ€\\n" -#: share/functions/help.fish:10 +#: share/functions/help.fish:1 msgid "Show help for the fish shell" msgstr "Visa hjälp för fish-skalet" -#: share/functions/help.fish:68 +#: share/functions/help.fish:76 msgid "%s: Could not find a web browser.\\n" msgstr "%s: Kunde inte hitta en webbrowser\\n" -#: share/functions/help.fish:69 -#, sh-format +#: share/functions/help.fish:77 +#, fuzzy, sh-format msgid "" -"Please set the variable $BROWSER to a suitable browser and try again\\n\\n" +"Please set the variable $BROWSER to a suitable browser and try again.\\n\\n" msgstr "" "Var vänlig sätt variablen $BROWSER sÃ¥ den anger en lämplig browser och " "försök igen\\n\\n" -#: share/functions/help.fish:105 -msgid "help: Help is being displayed in your default browser\\n" +#: share/functions/help.fish:129 +#, fuzzy +msgid "help: Help is being displayed in your default browser.\\n" msgstr "help: Hjälp visas i ditt standardsurfprogram" -#: share/functions/help.fish:108 -msgid "help: Help is being displayed in %s\\n" +#: share/functions/help.fish:132 +#, fuzzy +msgid "help: Help is being displayed in %s.\\n" msgstr "help: Hjälp visas i %s\\n" +#: share/functions/history.fish:5 +msgid "Deletes an item from history" +msgstr "" + +#: share/functions/hostname.fish:7 +msgid "Show or set the system's host name\r" +msgstr "" + #: share/functions/la.fish:4 msgid "" "List contents of directory, including hidden files in directory using long " @@ -6939,15 +8819,24 @@ msgstr "Visa kataloginnehÃ¥ll i lÃ¥ngt format" msgid "List contents of directory" msgstr "Visa kataloginnehÃ¥ll" +#: share/functions/man.fish:1 +#, fuzzy +msgid "Format and display the on-line manual pages" +msgstr "Visa ändringsinformation för paket" + #: share/functions/math.fish:2 msgid "Perform math calculations in bc" msgstr "Utför matematiska beräkningar i bc" +#: share/functions/mimedb.fish:8 +msgid "Look up file information via the mimedb database" +msgstr "" + #: share/functions/nextd.fish:2 msgid "Move forward in the directory history" msgstr "GÃ¥ frammÃ¥t i kataloghistorik" -#: share/functions/nextd.fish:27 +#: share/functions/nextd.fish:28 msgid "%s: The number of positions to skip must be a non-negative integer\\n" msgstr "" "%s: Antalet positioner att hoppa över mÃ¥ste vara ett positivt heltal\\n" @@ -6969,12 +8858,14 @@ msgstr "%s: Katalogstacken är tom...\\n" msgid "Move back in the directory history" msgstr "GÃ¥ bakÃ¥t i kataloghistorik" -#: share/functions/prevd.fish:27 +#: share/functions/prevd.fish:28 msgid "The number of positions to skip must be a non-negative integer\\n" msgstr "Antalet positioner att hoppa över mÃ¥ste vara ett positivt heltal" -#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:12 -msgid "Print the current working directory, shortend to fit the prompt" +#: share/functions/prompt_pwd.fish:3 share/functions/prompt_pwd.fish:7 +#: share/functions/prompt_pwd.fish:11 +#, fuzzy +msgid "Print the current working directory, shortened to fit the prompt" msgstr "Visa aktuell arbetskatalog, förkortad till att passa i kommandoraden" #: share/functions/psub.fish:3 @@ -6989,9 +8880,23 @@ msgstr "" msgid "Push directory to stack" msgstr "Lägg till katalog till stack" -#: share/functions/pwd.fish:9 share/functions/pwd.fish:14 -msgid "Print working directory" -msgstr "Visa nuvarande katalog" +#: share/functions/seq.fish:7 +#, fuzzy +msgid "Print sequences of numbers" +msgstr "Visa namn, inte nummer" + +#: share/functions/seq.fish:11 +#, fuzzy +msgid "Fallback implementation of the seq command" +msgstr "Visa alla möjliga kompletteringar för det angivna commandot" + +#: share/functions/seq.fish:31 +msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" +msgstr "%s: Förväntade 1, 2 eller 3 argument, fick %d\\n" + +#: share/functions/seq.fish:38 +msgid "%s: '%s' is not a number\\n" +msgstr "%s: â€%s†är inte ett nummer\\n" #: share/functions/setenv.fish:2 msgid "Set global variable. Alias for set -g, made for csh compatibility" @@ -7001,31 +8906,34 @@ msgstr "" msgid "Print the type of a command" msgstr "Visa typ av kommando" -#: share/functions/type.fish:73 +#: share/functions/type.fish:84 msgid "%s is a function with definition\\n" msgstr "%s är en funktion med definitionen\\n" -#: share/functions/type.fish:77 -msgid "function\\n" +#: share/functions/type.fish:88 +#, fuzzy +msgid "function" msgstr "funktion\\n" -#: share/functions/type.fish:94 +#: share/functions/type.fish:105 msgid "%s is a builtin\\n" msgstr "%s är ett inbyggt kommando\\n" -#: share/functions/type.fish:97 -msgid "builtin\\n" +#: share/functions/type.fish:108 +#, fuzzy +msgid "builtin" msgstr "inbyggt kommando\\n" -#: share/functions/type.fish:115 +#: share/functions/type.fish:132 msgid "%s is %s\\n" msgstr "%s är %s\\n" -#: share/functions/type.fish:118 -msgid "file\\n" +#: share/functions/type.fish:135 +#, fuzzy +msgid "file" msgstr "fil\\n" -#: share/functions/type.fish:129 +#: share/functions/type.fish:147 msgid "%s: Could not find '%s'\\n" msgstr "%s: Kunde inte hitta â€%sâ€\\n" @@ -7038,15 +8946,15 @@ msgstr "%s: Ogiltigt mask â€%sâ€\\n" msgid "Set default file permission mask" msgstr "Välj standardfilrättighetsmask" -#: share/functions/umask.fish:204 +#: share/functions/umask.fish:212 msgid "%s: Too many arguments\\n" msgstr "%s: För mÃ¥nga argument\\n" -#: share/functions/vared.fish:7 +#: share/functions/vared.fish:6 msgid "Edit variable value" msgstr "Redigera variabelvärde" -#: share/functions/vared.fish:42 +#: share/functions/vared.fish:41 msgid "" "%s: %s is an array variable. Use %svared%s %s[n] to edit the n:th element of " "%s\\n" @@ -7054,7 +8962,7 @@ msgstr "" "%s: %s är en arrayvariabel. Använd %svared%s %s[n] för att redigera det n:te " "elementet av %s\\n" -#: share/functions/vared.fish:46 +#: share/functions/vared.fish:45 msgid "" "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%svared%s " "VARIABLE\\n" @@ -7062,17 +8970,241 @@ msgstr "" "%s: Förväntade exakt ett argument, fick %s\\n\\nSynopsis:\\n\\t%svared%s " "VARIABEL\\n" -#: seq:15 -msgid "^/dev/null" -msgstr "" +#~ msgid "%ls: Missing function definition information." +#~ msgstr "%ls: Funktionsdefinition saknas." -#: seq:36 -msgid "%s: Expected 1, 2 or 3 arguments, got %d\\n" -msgstr "%s: Förväntade 1, 2 eller 3 argument, fick %d\\n" +#~ msgid "%ls: Command only available in interactive sessions" +#~ msgstr "%ls: Kommandot finns bara tillgängligt under interaktiva sessioner" -#: seq:43 -msgid "%s: '%s' is not a number\\n" -msgstr "%s: â€%s†är inte ett nummer\\n" +#~ msgid "Procces\n" +#~ msgstr "Process\n" + +#~ msgid "This is a bug. " +#~ msgstr "Detta är en bug. " + +#~ msgid "Could not create child process - exiting" +#~ msgstr "Kunde inte skapa barnprocess - avslutar programmet" + +#~ msgid "Failed to close file descriptor %d" +#~ msgstr "Misslyckades med att stänga filidentifierare %d" + +#~ msgid "Failed to execute process '%ls'" +#~ msgstr "Misslyckades med att exekvera processen â€%lsâ€" + +#~ msgid "" +#~ "Could not send process %d, '%ls' in job %d, '%ls' from group %d to group " +#~ "%d" +#~ msgstr "" +#~ "Kunde inte skicka process %d, â€%lsâ€, i jobb %d, â€%ls†frÃ¥n grupp %d till " +#~ "grupp %d" + +#~ msgid "%s: Unknown error\n" +#~ msgstr "%s: Okänt fel\n" + +#~ msgid "Maximum recursion depth reached. Accidental infinite loop?" +#~ msgstr "Maximalt rekursionsdjup uppnÃ¥tt. Oavsiktlig oändlig upprepning?" + +#~ msgid "Maximum number of nested blocks reached." +#~ msgstr "Maximalt antal nästade block har uppnÃ¥tts." + +#~ msgid "" +#~ "Warning: No match for wildcard '%ls'. The command will not be executed." +#~ msgstr "" +#~ "Varning: Inga matchningar för jokertecknen i â€%lsâ€. Kommandot kommer inte " +#~ "utföras." + +#~ msgid "Tried to evaluate null pointer." +#~ msgstr "Försökte evaluera nollpekare." + +#~ msgid "in . (source) call of file '%ls',\n" +#~ msgstr "i â€.â€-anrop av fil â€%lsâ€,\n" + +#~ msgid "Unknown command '%ls'" +#~ msgstr "Okänt kommando â€%lsâ€" + +#~ msgid "Job command" +#~ msgstr "Jobb kommando" + +#~ msgid "Job list pointer" +#~ msgstr "Jobblistepekare" + +#~ msgid "Process command" +#~ msgstr "Processkommando" + +#~ msgid "There are stopped jobs\n" +#~ msgstr "Det finns stannade jobb\n" + +#~ msgid "Could not convert input. Read %d bytes." +#~ msgstr "Kunde inte konvertera indata. Läste %d bytes." + +#~ msgid "Could not read input stream" +#~ msgstr "Kunde inte läsa frÃ¥n indataström" + +#~ msgid "%s: Too many arguments\n" +#~ msgstr "%s: För mÃ¥nga argument\n" + +#~ msgid "Invalid token" +#~ msgstr "Ogiltig symbol" + +#~ msgid "function %s called with null value for argument %s. " +#~ msgstr "funktionen %s anropades med nollvärde som argument %s. " + +#~ msgid "function %s called while blocking signals. " +#~ msgstr "funktionen %s anropades medan signaler var blockerade. " + +#~ msgid "Remove one or more files or directories from the repository" +#~ msgstr "Ta bort filer eller kataloger frÃ¥n lagret" + +#~ msgid "Move/rename one or more files or directories" +#~ msgstr "Flytta/byt namn pÃ¥ en eller flera filer eller kataloger" + +#~ msgid "Replace a token with a new value for that token" +#~ msgstr "Ersätt en symbol med ett nytt värde för den symbolen" + +#~ msgid "Revert to the recorded version (safe the first time only)" +#~ msgstr "Backa till senaste lagrade version (Är bara säkert en gÃ¥ng)" + +#~ msgid "Save changes in the working copy to the repository as a patch" +#~ msgstr "Spara ändringar i arbetskopian till lagret som en fix" + +#~ msgid "Tag the contents of the repository with a version name" +#~ msgstr "Tagga innehÃ¥llet i lagret med ett versionsnummer" + +#, fuzzy +#~ msgid "Record an inverse patch without changing the working directory" +#~ msgstr "Lagra en omvänd fix utan att ändra arbetskopian" + +#, fuzzy +#~ msgid "Gives a changelog-style summary of the repository history" +#~ msgstr "Ge en changelog-formaterad summering av förrÃ¥dhistorik" + +#, fuzzy +#~ msgid "Opposite of pull; unsafe if patch is not in remote repository" +#~ msgstr "Motsatsen till pull, osäker om fixen inte finns i fjärrlagret" + +#~ msgid "Apply patches (from an email bundle) to the repository" +#~ msgstr "Applicera fixar (frÃ¥n e-postpaket) till lagret" + +#~ msgid "Create a local copy of another repository" +#~ msgstr "Skapa lokal kopia av förrÃ¥d" + +#, fuzzy +#~ msgid "Makes a copy of the repository" +#~ msgstr "Skapa lokal kopia av förrÃ¥d" + +#, fuzzy +#~ msgid "Initialize a new source tree as a darcs repository" +#~ msgstr "Checka in filer till förrÃ¥d" + +#~ msgid "Optimize the repository" +#~ msgstr "Optimera förrÃ¥d" + +#~ msgid "Check the repository for consistency" +#~ msgstr "Kontrollera lagrets konsistens" + +#~ msgid "Specify hash of creator patch (see docs)" +#~ msgstr "Ange hash av skaparfix (se dokumentationen)" + +#, fuzzy +#~ msgid "Name of version" +#~ msgstr "NAmn pÃ¥ version at använda som kontrollpunkt" + +#~ msgid "Send to context stored in FILENAME" +#~ msgstr "Skicka till sammanhang lagrat i FILNAMN" + +#~ msgid "Specify sendmail command" +#~ msgstr "Ange sendmailkommando" + +#~ msgid "Verify that the patch was signed by a key in PUBRING" +#~ msgstr "Verifiera att fix är signerad frÃ¥n nyckel i angiven nyckelring" + +#, fuzzy +#~ msgid "Verify using openSSL with authorized keys from file KEYS" +#~ msgstr "Verifiera med openSSL med auktoriserade nycklar frÃ¥n angiven fil" + +#~ msgid "Name of version to checkpoint" +#~ msgstr "NAmn pÃ¥ version at använda som kontrollpunkt" + +#~ msgid "Ignore changes whose lines match the REGEX" +#~ msgstr "Ignorera ändringar som matchar REGEX" + +#~ msgid "Output NUM lines of copied context" +#~ msgstr "Skriv ut NUM rader av kopierad sammanhang" + +#~ msgid "Output NUM lines of unified context" +#~ msgstr "Skriv ut NUM rader av unifieradt sammanhang" + +#~ msgid "Output at most NUM print columns" +#~ msgstr "Skriv ut som mest NUM kolumner" + +#~ msgid "Compare FILE2 to all operands" +#~ msgstr "Jämför FIL2 med alla operander" + +#~ msgid "Action for devices" +#~ msgstr "Handling för enheter" + +#~ msgid "Action for directories" +#~ msgstr "Handling för kataloger" + +#~ msgid "Use pattern from file" +#~ msgstr "Använd mönster frÃ¥n fil" + +#, fuzzy +#~ msgid "print information about the working copy" +#~ msgstr "Hämta ändringar frÃ¥n förrÃ¥det till arbetskopian" + +#, fuzzy +#~ msgid "export the repository via HTTP" +#~ msgstr "Uppdatera förrÃ¥d" + +#~ msgid "Debug option" +#~ msgstr "Debugflagga" + +#~ msgid "Execute argument as command" +#~ msgstr "Utför parameter som kommando" + +#~ msgid "Division control" +#~ msgstr "Divisionskontroll" + +#~ msgid "Warning control" +#~ msgstr "Varningsläge" + +#, fuzzy +#~ msgid "Read user configuration files from directory ARG" +#~ msgstr "Läs användarkonfigurationsfiler frÃ¥n angiven katalog" + +#, fuzzy +#~ msgid "Specify a username ARG" +#~ msgstr "Välj användarnamn" + +#, fuzzy +#~ msgid "Specify a password ARG" +#~ msgstr "Välj lösenord" + +#, fuzzy +#~ msgid "Use ARG as merge command" +#~ msgstr "Ange sammanslagningskommando" + +#, fuzzy +#~ msgid "Use ARG as external editor" +#~ msgstr "Ange extern editor" + +#~ msgid "Maximum number of log entries" +#~ msgstr "Maximalt antal logginlägg" + +#~ msgid "Commands to execute when fish exits" +#~ msgstr "Kommandon som utförs när fish avslutas" + +#~ msgid "Good bye\\n" +#~ msgstr "Hej dÃ¥\\n" + +#, fuzzy +#~ msgid "" +#~ "%s: Expected exactly one argument, got %s.\\n\\nSynopsis:\\n\\t%sfunced%s " +#~ "FUNCTION\\n" +#~ msgstr "" +#~ "%s: Förväntade exakt ett argument, fick %s\\n\\nSynopsis:\\n\\t%svared%s " +#~ "VARIABEL\\n" #~ msgid "" #~ "%ls: '%ls' is not a directory or you do not have permission to enter it\n" @@ -7203,18 +9335,9 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Disable downloading packages" #~ msgstr "Inaktivera paketnedladdning" -#~ msgid "Perform a simulation" -#~ msgstr "Utför en simulering" - #~ msgid "Automatic yes to prompts" #~ msgstr "Svara automatiskt ja pÃ¥ alla frÃ¥gor" -#~ msgid "Show upgraded packages" -#~ msgstr "Visa uppgraderade paket" - -#~ msgid "Show full versions for packages" -#~ msgstr "Visa fulla versioner för paket" - #~ msgid "Compile source packages" #~ msgstr "Kompilera källkodspaket" @@ -7227,9 +9350,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Force yes" #~ msgstr "Tvinga ja" -#~ msgid "Print the URIs" -#~ msgstr "Visa URIer" - #~ msgid "Erase obsolete files" #~ msgstr "Radera förlegade filer" @@ -7260,21 +9380,12 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Specify apt config file" #~ msgstr "Välj apt-konfigurationsfil" -#~ msgid "List bugs from packages" -#~ msgstr "Lista buggar frÃ¥n paket" - #~ msgid "List bugs in rss format" #~ msgstr "Lista information om inoder" #~ msgid "Read filenames from pipe" #~ msgstr "Läs filnamn frÃ¥n rör" -#~ msgid "Select display" -#~ msgstr "Välj display" - -#~ msgid "Generate master file" -#~ msgstr "Generera huvudfil" - #~ msgid "Alias for 'get'" #~ msgstr "Alias för â€getâ€" @@ -7301,9 +9412,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Run in noninteractive mode" #~ msgstr "Kör i icke-interaktivt läge" -#~ msgid "Conf file" -#~ msgstr "Konfigurationsfil" - #~ msgid "File to grab servers" #~ msgstr "Fil att hämta servrar frÃ¥n" @@ -7475,9 +9583,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Set TAO (Track At Once) writing mode" #~ msgstr "Välj TAO- (Track At Once) skrivläge" -#~ msgid "Set RAW writing mode" -#~ msgstr "Välj RAW-skrivläge" - #~ msgid "Select Set RAW writing, the preferred raw writing mode" #~ msgstr "Välj det bättre RAW-skrivläget" @@ -7739,9 +9844,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Inject readline functions to reader" #~ msgstr "Skicka readline-funktion till läsaren" -#~ msgid "Specify command to operate on" -#~ msgstr "Ange kommando att operera pÃ¥" - #~ msgid "Set/get cursor position, not buffer contents" #~ msgstr "Sätt/hämta markörposition, inte bufferinnehÃ¥ll" @@ -7781,9 +9883,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Remove completion" #~ msgstr "Ta bort komplettering" -#~ msgid "Print all completions for the specified commandline" -#~ msgstr "Visa alla möjliga kompletteringar för det angivna commandot" - #~ msgid "" #~ "The completion should only be used if the specified command has a zero " #~ "exit status" @@ -7873,12 +9972,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Stay on this file system" #~ msgstr "Stanna pÃ¥ detta filsystem" -#~ msgid "Dont split mutibyte characters" -#~ msgstr "Dela inte multibytesekvenser" - -#~ msgid "Do not print lines without delimiter" -#~ msgstr "Skriv inte ut rader utan fältavgränsare" - #~ msgid "Select output delimiter" #~ msgstr "Välj utdataavgränsare" @@ -7891,9 +9984,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Prompt for password for authenticating server" #~ msgstr "Be om lösenord för autentisering" -#~ msgid "Removes entry in .cvspass for remote repository" -#~ msgstr "Ta bort inlägg i .cvspass för fjärrförrÃ¥d" - #~ msgid "Password server mode" #~ msgstr "Serverlösenordsläge" @@ -7945,9 +10035,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Cause CVS to be really quiet" #~ msgstr "Gör CVS mycket tyst läge" -#~ msgid "Read-only repository mode" -#~ msgstr "Skrivskyddat förrÃ¥d-läge" - #~ msgid "Cause CVS to be somewhat quiet" #~ msgstr "Gör CVS nÃ¥got tystare" @@ -8038,9 +10125,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Force new revision" #~ msgstr "Tvinga ny revision" -#~ msgid "Treat all files as text" -#~ msgstr "Behandla alla filer som text" - #~ msgid "Treat all whitespace as one space" #~ msgstr "Behandla alla blanktecken som ett mellanslag" @@ -8065,9 +10149,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Set line group format" #~ msgstr "Välj radgruppsformat" -#~ msgid "Try to find a smaller set of changes" -#~ msgstr "Försök hitta en mindre uppsättning ändringar" - #~ msgid "Make output a valid ed script" #~ msgstr "Gör utdata till ett giltigt ed-skript" @@ -8182,15 +10263,9 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print only rcs filename" #~ msgstr "Skriv bara RCS-filnamn" -#~ msgid "Print only given revisions" -#~ msgstr "Skriv bara ut angiven revision" - #~ msgid "Suppress header if no revisions found" #~ msgstr "Visa inte huvud om inga revisioner hittas" -#~ msgid "Specify revision states" -#~ msgstr "Ange revisionstiollstÃ¥nd" - #~ msgid "Same as -h, plus descriptive text" #~ msgstr "Samma som -h, men med beskrivande text" @@ -8209,9 +10284,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Use unidiff format" #~ msgstr "Använd unidiff-format" -#~ msgid "Delete working copy if release succeeds" -#~ msgstr "Radera arbetskopia om släppning lyckas" - #~ msgid "Reset sticky tags, dates, and k-opts" #~ msgstr "Ã…terställ fasta taggar, datum och k-opts" @@ -8236,9 +10308,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Neither verbose nor quiet output" #~ msgstr "Varken tyst eller utförligt läge" -#~ msgid "Name of patch" -#~ msgstr "Namn pÃ¥ fix" - #~ msgid "Give patch name and comment in file" #~ msgstr "Välj fixnamn och kommentar via fil" @@ -8264,9 +10333,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Remove the test directory" #~ msgstr "Ta bort testkatalog" -#~ msgid "Create compressed patches" -#~ msgstr "Skapa komprimerade fixar" - #~ msgid "Don't create compressed patches" #~ msgstr "Skapa inte komprimerade fixar" @@ -8325,9 +10391,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Don't make scripts executable" #~ msgstr "Gör inte skript exekverbara" -#~ msgid "Reply to email-based patch using FROM address" -#~ msgstr "Svara pÃ¥ e-postbaserad fix frÃ¥n adress" - #~ msgid "Don't verify patch signature" #~ msgstr "Verifiera inte fix-signaturer" @@ -8361,9 +10424,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Do not sign the patch" #~ msgstr "Signera inte fixen" -#~ msgid "Edit the patch bundle description" -#~ msgstr "Redigera fix-paketbeskrivning" - #~ msgid "Use a plain pristine tree [DEFAULT]" #~ msgstr "Använd enkelt pristint träd [DEFAULT]" @@ -8376,9 +10436,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Generate XML formatted output" #~ msgstr "Generera XML-formaterad utdata" -#~ msgid "Select changes up to a tag matching REGEXP" -#~ msgstr "Välj ändringar fram till tag som matchar REGEXP" - #~ msgid "Give output suitable for get --context" #~ msgstr "Formatera utdata lämpligt för get --context" @@ -8402,9 +10459,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Don't use experimental date appending trick. [DEFAULT]" #~ msgstr "Använd inte experimentellt datum-tillläggningstrick. [STANDARD]" -#~ msgid "Uncompress patches" -#~ msgstr "Dekomprimera fixar" - #~ msgid "Rewrite all patches in current darcs format" #~ msgstr "Skriv om alla fixar till nuvarande darcs-format" @@ -8474,51 +10528,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print out the previously obtained statistics from the file systems" #~ msgstr "Visa tidigare hämtad statistik frÃ¥n filsystemet" -#~ msgid "Ignore case differences" -#~ msgstr "Ignorera skiftläge" - -#~ msgid "Ignore case when comparing file names" -#~ msgstr "Ignorera skiftläge pÃ¥ filnamn" - -#~ msgid "Consider case when comparing file names" -#~ msgstr "Skilj pÃ¥ skiftläge pÃ¥ filnamn" - -#~ msgid "Ignore changes due to tab expansion" -#~ msgstr "Ignorera ändringar pÃ¥ grund av tabbexpansion" - -#~ msgid "Ignore changes in the amount of white space" -#~ msgstr "Ignorera skillnader i blanka tecken" - -#~ msgid "Ignore all white space" -#~ msgstr "Ignorera blanka tecken" - -#~ msgid "Ignore changes whose lines are all blank" -#~ msgstr "Ignorera ändringar vars rader enbart bestÃ¥r av blana tecken" - -#~ msgid "Recursively compare subdirectories" -#~ msgstr "Rekursera till underkataloger" - -#~ msgid "Treat absent files as empty" -#~ msgstr "Behandla saknade filer som om de vore tomma" - -#~ msgid "Output 3 lines of copied context" -#~ msgstr "Skriv ut 3 rader av kopierad sammanhang" - -#~ msgid "Output 3 lines of unified context" -#~ msgstr "Skriv ut 3 rader av unifierat sammanhang" - -#~ msgid "Output only whether the files differ" -#~ msgstr "Skriv bara ut huruvida filerna skiljer sig" - -#~ msgid "Output a normal diff" -#~ msgstr "Skriv ut en vanlig diff" - -#~ msgid "Output in two columns" -#~ msgstr "Skriv ut i tvÃ¥ kolumner" - -#~ msgid "Pass the output through 'pr'" -#~ msgstr "Skicka utdata genom â€prâ€" - #~ msgid "Write size for all files" #~ msgstr "Skriv ut storlek för alla filer" @@ -8640,10 +10649,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "File last modified more recently than file was modified" #~ msgstr "Visa senaste revision vid vilken vare rad ändrades" -#, fuzzy -#~ msgid "File name matches pattern" -#~ msgstr "Visa inte filer som matchar mönster" - #, fuzzy #~ msgid "File path matches pattern" #~ msgstr "Exkludera filer som matchar mönster" @@ -8696,10 +10701,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print null separated full file names" #~ msgstr "Skriv bara RCS-filnamn" -#, fuzzy -#~ msgid "Print formated data" -#~ msgstr "Visa informativa meddelanden" - #, fuzzy #~ msgid "Exit at once" #~ msgstr "Förklara vad som utförs" @@ -8724,9 +10725,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Run in login mode" #~ msgstr "Kör i loginläge" -#~ msgid "Output profiling information to specified file" -#~ msgstr "Skriv profileringsinformation till angiven fil" - #~ msgid "Set function description" #~ msgstr "Välj funktionsbeskrivning" @@ -8794,9 +10792,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Use ansi mode" #~ msgstr "Använd ansiläge" -#~ msgid "Write prototypes to file" -#~ msgstr "Skriv prototyper till fil" - #~ msgid "Do not recognize asm, inline or typeof keywords" #~ msgstr "Känn inte igen asm, inline och typeof nyckelorden" @@ -8881,9 +10876,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Do not emit out-of-line code for inline functions" #~ msgstr "Skapa inte icke-inlinekod for inline-funktioner" -#~ msgid "Disable warnings about MFC" -#~ msgstr "Visa inte varningar om MFC" - #~ msgid "Disable some built-in functions" #~ msgstr "Inaktivera somliga inbyggda funktioner" @@ -9380,9 +11372,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ "numbers" #~ msgstr "Skapa inte en intern pool-fil för snabbare generering av slumptal" -#~ msgid "Reset verbose level to 0" -#~ msgstr "Ã…terställ felrapporteringsnivÃ¥ till 0" - #~ msgid "Suppress the initial copyright message" #~ msgstr "Visa inte initialt copyrightmeddelande" @@ -9495,9 +11484,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Display summary" #~ msgstr "Visa sammanställning" -#~ msgid "Search directories for source" -#~ msgstr "Sök i angivna kataloger efter källkod" - #~ msgid "No annotated source" #~ msgstr "Visa inte kommenterad källkod" @@ -9567,105 +11553,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print summary" #~ msgstr "Visa sammanfattning" -#~ msgid "Print NUM lines of trailing context" -#~ msgstr "Visa NUM rader av följande sammanhang" - -#~ msgid "Process binary file as text" -#~ msgstr "Processa binär fil som text" - -#~ msgid "Print NUM lines of leading context" -#~ msgstr "Visa NUM rader av inledande sammanhang" - -#~ msgid "Print NUM lines of context" -#~ msgstr "Visa NUM rader av sammanhang" - -#~ msgid "Assume data type for binary files" -#~ msgstr "Antag följande datatyp för binära filer" - -#~ msgid "Pattern is extended regexp" -#~ msgstr "Mönster är ett förlängt reguljärt uttryck" - -#~ msgid "Pattern is a regexp" -#~ msgstr "Mönster är ett reguljärt uttryck" - -#~ msgid "Pattern is a fixed string" -#~ msgstr "Mönster är en fixsträng" - -#~ msgid "Pattern is basic regex" -#~ msgstr "Mönster är ett grundläggande reguljärt uttryck" - -#~ msgid "Print filename" -#~ msgstr "Visa filnamn" - -#~ msgid "Supress printing filename" -#~ msgstr "Visa inte filnamn" - -#~ msgid "Skip binary files" -#~ msgstr "Skippa binära filer" - -#~ msgid "Ignore case" -#~ msgstr "Ignorera skiftläge" - -#~ msgid "Print first non-matching file" -#~ msgstr "Visa första icke-matchande fil" - -#~ msgid "Print first matching file" -#~ msgstr "Visa första matchande fil" - -#~ msgid "Stop reading after NUM matches" -#~ msgstr "Sluta läsa efter NUM matchningar" - -#~ msgid "Use the mmap system call to read input" -#~ msgstr "Använd systemanroppet mmap för inläsning" - -#~ msgid "Print linenumber" -#~ msgstr "Visa radnummer" - -#~ msgid "Show only matching part" -#~ msgstr "Visa bara matchande del" - -#~ msgid "Rename stdin" -#~ msgstr "Byt namn pÃ¥ standard in" - -#~ msgid "Use line buffering" -#~ msgstr "Använd radbuffring" - -#~ msgid "Do not write anything" -#~ msgstr "Skriv ingenting" - -#~ msgid "Read files under each directory" -#~ msgstr "Läs filer i varje katalog" - -#~ msgid "Recurse, search file matching PATTERN" -#~ msgstr "Rekursera, sök i filer som matchar mönster" - -#~ msgid "Recurse, skip file matching PATTERN" -#~ msgstr "Rekursera, skippa filer som matchar mönster" - -#~ msgid "Suppress error messages" -#~ msgstr "Visa inte felmeddelanden" - -#~ msgid "Treat files as binary" -#~ msgstr "Behandla filer som om de vore binära" - -#~ msgid "Report Unix-style byte offsets" -#~ msgstr "Visa Unix-typ av byteavstÃ¥nd" - -#~ msgid "Invert the sense of matching" -#~ msgstr "Invertera matchning" - -#~ msgid "Only whole matching words" -#~ msgstr "Matcha bara hela ord" - -#~ msgid "Only whole matching lines" -#~ msgstr "Matcha bara hela rader" - -#~ msgid "Synonym for -i" -#~ msgstr "Synonym för -i" - -#~ msgid "Output a zero byte after filename" -#~ msgstr "Skriv en nollad byte efter filnamn" - #~ msgid "List compression information" #~ msgstr "Visa kompressionsinformation" @@ -9675,9 +11562,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Save/restore filename" #~ msgstr "Spara/Ã¥terställ filnamn" -#~ msgid "Supress warnings" -#~ msgstr "Visa inte varningar" - #~ msgid "Recurse directories" #~ msgstr "Rekursera till underkataloger" @@ -9690,40 +11574,22 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Use high compression setting" #~ msgstr "Använd inställningar för hög kompressionsnivÃ¥" -#, fuzzy -#~ msgid "Convert from specified encoding" -#~ msgstr "Flytta filen angiven pÃ¥ kommandoraden" - -#, fuzzy -#~ msgid "Convert to specified encoding" -#~ msgstr "Flytta filen angiven pÃ¥ kommandoraden" - #, fuzzy #~ msgid "List known coded character sets" #~ msgstr "Välj den interna teckenuppsättningen" -#, fuzzy -#~ msgid "Print progress information" -#~ msgstr "Visa all information" - #~ msgid "Print effective group id" #~ msgstr "Visa effektivt grupp-id" #~ msgid "Print all group ids" #~ msgstr "Visa alla grupp-id" -#~ msgid "Print name, not number" -#~ msgstr "Visa namn, inte nummer" - #~ msgid "Print real ID, not effective" #~ msgstr "Visa verkligt id, inte effektivt" #~ msgid "Print effective user ID" #~ msgstr "Visa effektivt användar-id" -#~ msgid "Show the process id of each process in the job" -#~ msgstr "Visa process-id för varje process i jobbet" - #~ msgid "Show group id of job" #~ msgstr "Visa grupp-id för jobb" @@ -9737,9 +11603,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "List codes and names of available signals" #~ msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" -#~ msgid "List names of available signals" -#~ msgstr "Visa namnen pÃ¥ alla tillgängliga signaler" - #~ msgid "Search after end of screen" #~ msgstr "Sök förbi slut pÃ¥ skärmen" @@ -9980,9 +11843,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Manual sections" #~ msgstr "Manualsektion" -#~ msgid "Display all matches" -#~ msgstr "Visa alla matchningar" - #~ msgid "Always reformat" #~ msgstr "Formatera alltid om" @@ -10063,9 +11923,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Ignore module interface version" #~ msgstr "Ignorera modulinterfaceversion" -#~ msgid "List all modules matching the given wildcard" -#~ msgstr "Lista alla moduler som matchar parameter med jokertecken" - #~ msgid "Insert modules matching the given wildcard" #~ msgstr "Ligg till alla moduler som matchar parameter med jokertecken" @@ -10102,9 +11959,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Do not write mtab" #~ msgstr "Skriv inte till mtab" -#~ msgid "Tolerate sloppy mount options" -#~ msgstr "Tolerera slarviga monteringsflaggor" - #~ msgid "Read/Write mode" #~ msgstr "Läs ock skrivbart läge" @@ -10220,18 +12074,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Interpret the patch file as a unified context diff" #~ msgstr "Tolka fixfil som unifierad kontextdiff" -#~ msgid "Specify record separator" -#~ msgstr "Ange postavdelare" - -#~ msgid "Turn on autosplit mode" -#~ msgstr "SlÃ¥ pÃ¥ autosplitläge" - -#~ msgid "Check syntax" -#~ msgstr "Kontrollera syntax" - -#~ msgid "Debugger" -#~ msgstr "Debugger" - #~ msgid "Set regexp used to split input" #~ msgstr "Välj reguljärt uttryck för att avdela indata" @@ -10241,30 +12083,9 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Include path" #~ msgstr "Inkluderingssökväg" -#~ msgid "Automatic line ending processing" -#~ msgstr "Automatisk radslutprocessning" - -#~ msgid "Loop script" -#~ msgstr "Upprepa skript" - -#~ msgid "Loop script, print $_" -#~ msgstr "Upprepa skript, skriv $_" - #~ msgid "Invoke CPP" #~ msgstr "Kör C-förprocessorn" -#~ msgid "Define custom switches" -#~ msgstr "Definera egna flaggor" - -#~ msgid "Search $PATH for script" -#~ msgstr "Genomsök $PATH efter skript" - -#~ msgid "Taint checking" -#~ msgstr "â€taintâ€-verifiering" - -#~ msgid "Unsafe mode" -#~ msgstr "Osäkert läge" - #~ msgid "Extract script" #~ msgstr "Extrahera skript" @@ -10289,9 +12110,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Open folder read-only" #~ msgstr "Öppna folder i skrivskyddat läge" -#~ msgid "Set configuration file" -#~ msgstr "Välj konfigurationsfil" - #~ msgid "Set global configuration file" #~ msgstr "Välj global konfigurationsfil" @@ -10474,15 +12292,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Enable optimizations" #~ msgstr "SlÃ¥ pÃ¥ optimeringar" -#~ msgid "Disable import of site module" -#~ msgstr "SlÃ¥ av importering av platsmodul" - -#~ msgid "Warn on mixed tabs and spaces" -#~ msgstr "Varna vid blandad användning av tabbar och mellanslag" - -#~ msgid "Unbuffered input and output" -#~ msgstr "Buffra inte indata och utdata" - #~ msgid "Ignore first line of input" #~ msgstr "Ignorera första raden indata" @@ -10637,9 +12446,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Define key" #~ msgstr "Definera nyckel" -#~ msgid "Merge sorted files" -#~ msgstr "SammanslÃ¥ sorterade filer" - #~ msgid "Stabilize sort" #~ msgstr "Stabilisera sortering" @@ -10767,78 +12573,33 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Recursively clean up the working copy" #~ msgstr "Rensa arbetskopian rekursivt" -#~ msgid "Specify revision" -#~ msgstr "Ange revision" - #~ msgid "Pass contents of file as additional args" #~ msgstr "Skicka filinnehÃ¥ll som extra argument" #~ msgid "Print as little as possible" #~ msgstr "Skriv ut sÃ¥ lite som möjligt" -#~ msgid "Force operation to run" -#~ msgstr "Tvinga operationen att utföras" - #~ msgid "Enable automatic properties" #~ msgstr "Aktivera automatiska egenskaper" -#~ msgid "Disable automatic properties" -#~ msgstr "Inaktivera automatiska egenskaper" - #~ msgid "Print extra info" #~ msgstr "Visa utförlig information" -#~ msgid "Don't cache auth tokens" -#~ msgstr "Cacha inte autentiseringssymboler" - -#~ msgid "Do no interactive prompting" -#~ msgstr "Ställ inga interaktiva frÃ¥gor" - #~ msgid "Don't unlock targets" #~ msgstr "LÃ¥s inte upp mÃ¥l" -#~ msgid "Read commit message from file" -#~ msgstr "Läs meddelande för tillägg frÃ¥n fil" - -#~ msgid "Force log message source validity" -#~ msgstr "Tvinga validitet av loggmeddelandes källa" - #~ msgid "Descend recursively" #~ msgstr "Rekurivt läge" #~ msgid "Give output suitable for concatenation" #~ msgstr "Formatera utdata lämpligt för sammanslagning" -#~ msgid "Output in XML" -#~ msgstr "Utadata i XML-format" - -#~ msgid "Operate on revision property" -#~ msgstr "Utför pÃ¥ revisionsegenskap" - -#~ msgid "Use strict semantics" -#~ msgstr "Använd strikt semantik" - -#~ msgid "Ignore externals definitions" -#~ msgstr "Ignorera definitioner av externals" - -#~ msgid "Do not cross copies" -#~ msgstr "Korsa inte kopior" - #~ msgid "Make no changes" #~ msgstr "Gör inga förändringar" -#~ msgid "Ignore ancestry when calculating merge" -#~ msgstr "Ignorera ursprung vid beräknandet av sammanslagning" - -#~ msgid "Display update information" -#~ msgstr "Visa uppdateringsinformation" - #~ msgid "Disregard ignores" #~ msgstr "Strunta i ignores" -#~ msgid "Relocate VIA URL-rewriting" -#~ msgstr "Relokera via URL-omskrivning" - #~ msgid "Print client version info" #~ msgstr "Visa klientversion" @@ -11106,9 +12867,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Change access time" #~ msgstr "Visa Ã¥tkomsttid" -#~ msgid "Do not create file" -#~ msgstr "Skapa inte fil" - #~ msgid "Change modification time" #~ msgstr "Ändra ändringstid" @@ -11127,9 +12885,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Supress function and builtin lookup" #~ msgstr "Undertryck kontroll av funktioner och inbyggda kommandon" -#~ msgid "Print command type" -#~ msgstr "Skriv ut kommandotyp" - #~ msgid "Print path to command, or nothing if name is not a command" #~ msgstr "" #~ "Visa sökväg till kommando, eller ingenting om namn inte är ett kommando" @@ -11228,9 +12983,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print hardware platform" #~ msgstr "Visa hÃ¥rdvaruplattoform" -#~ msgid "Print operating system" -#~ msgstr "Visa operativsystem" - #~ msgid "Print number of occurences" #~ msgstr "Visa antal händelser" @@ -11288,12 +13040,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Debugger command" #~ msgstr "Debuggerkommando" -#~ msgid "File descriptor for input" -#~ msgstr "Filidentifierare för indata" - -#~ msgid "Check for memory leaks" -#~ msgstr "Kontrollera förekomst av minnesläckor" - #~ msgid "Show reachable leaked memory" #~ msgstr "Visa nÃ¥bart läckt minne" @@ -11336,9 +13082,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print length of longest line" #~ msgstr "Visa längd av längsta rad" -#~ msgid "Print word counts" -#~ msgstr "Visa antal ord" - #~ msgid "Dont print header" #~ msgstr "Visa inte huvud" @@ -11354,9 +13097,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Go to background immediately after startup" #~ msgstr "GÃ¥ till bakgrunden omedelbart efter uppstart" -#~ msgid "Execute command as if part of .wgetrc" -#~ msgstr "Utför kommando som om get vore en del av .wgetrc" - #~ msgid "Log all messages to logfile" #~ msgstr "Logga alla meddelanden till loggfil" @@ -11473,9 +13213,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Disable server-side cache" #~ msgstr "Inaktivera cache pÃ¥ serversidan" -#~ msgid "Disable the use of cookies" -#~ msgstr "Inaktivera användandet av kakor" - #~ msgid "Load cookies from file" #~ msgstr "Ladda kakor frÃ¥n fil" @@ -11639,9 +13376,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print time of last boot" #~ msgstr "Visa tidpunkt för senaste uppstart" -#~ msgid "Print dead processes" -#~ msgstr "Visa döda processer" - #~ msgid "Print line of headings" #~ msgstr "Skriv ut rad av överskrifter" @@ -11726,10 +13460,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Run up to max-procs processes at a time" #~ msgstr "Kör upp till angivet antal processer i taget" -#, fuzzy -#~ msgid "Show summary of options" -#~ msgstr "Välj en konfigurationsinställning" - #, fuzzy #~ msgid "Select XMMS session (Default: 0)" #~ msgstr "Välj via sessions-id" @@ -11754,10 +13484,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Set the background of the page display" #~ msgstr "Skapa fönster pÃ¥ angiven skärm" -#, fuzzy -#~ msgid "Set the initial zoom factor" -#~ msgstr "Sätt maximal fuzzfaktor" - #, fuzzy #~ msgid "Set the default file name for PostScript output" #~ msgstr "Ange standardnyckelordssubstitution" @@ -11798,10 +13524,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Print copyright and version information" #~ msgstr "Ignorera all versionsinformation" -#, fuzzy -#~ msgid "Print usage information" -#~ msgstr "Visa all information" - #~ msgid "Display grammar and exit" #~ msgstr "Visa grammatik och avsluta" @@ -11829,9 +13551,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Examine property updates forever" #~ msgstr "Lyssna efter uppdateringar för alltid" -#~ msgid "Set format" -#~ msgstr "Välj format" - #~ msgid "Append input to selection" #~ msgstr "Lägg till indata till slutet at urval" @@ -11892,9 +13611,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Specify installroot" #~ msgstr "Välj installationsrot" -#~ msgid "Enable repository" -#~ msgstr "Aktivera förrÃ¥d" - #~ msgid "Enables obsolets processing logic" #~ msgstr "SlÃ¥ pÃ¥ hantering av obsoleta paket" @@ -12064,12 +13780,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ msgid "Set block size" #~ msgstr "Välj blockstorlek" -#~ msgid "List format" -#~ msgstr "Listformat" - -#~ msgid "Skip entries matching pattern" -#~ msgstr "Visa inte filer som matchar mönster" - #~ msgid "Select quoting style" #~ msgstr "Välj citatstil" @@ -12315,9 +14025,6 @@ msgstr "%s: â€%s†är inte ett nummer\\n" #~ "Visar den för tillfället installerade versionen av portage och annan " #~ "information som är användbar som en snabbreferens för systemet" -#~ msgid "Help for the specified builtin" -#~ msgstr "Hjälp för det angivna inbyggda kommandot" - #~ msgid "A short summary of all builtin commands" #~ msgstr "En kort sammanfattning om alla inbyggda kommandon" From 44e94b8cfa3baa05f6775e67666c2a253b1a1cca Mon Sep 17 00:00:00 2001 From: David Adam Date: Thu, 13 Mar 2014 21:56:56 +0800 Subject: [PATCH 113/145] ignore (generated) messages.pot --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b587873d4..2e1397272 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ tests/*tmp.* tests/foo.txt FISH-BUILD-VERSION-FILE version +messages.pot From 20f9dd9a6bd5c90f7fc2304ad232bec5faebd835 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Mar 2014 13:07:19 -0700 Subject: [PATCH 114/145] Fix for extra newline that gets appended if a command is not found in the new parser --- parser.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/parser.cpp b/parser.cpp index 3febef097..69bbaa3ca 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3032,17 +3032,18 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro if (filename) { prefix = format_string(_(L"%ls (line %lu): "), user_presentable_path(filename).c_str(), which_line); - //append_format(*output, _(L"%ls (line %lu):\n"), user_presentable_path(filename).c_str(), which_line); } else { prefix = L"fish: "; - //output->append(L"fish: "); } - output->append(err.describe_with_prefix(src, prefix, skip_caret)); - output->push_back(L'\n'); - + const wcstring description = err.describe_with_prefix(src, prefix, skip_caret); + if (! description.empty()) + { + output->append(description); + output->push_back(L'\n'); + } this->stack_trace(0, *output); } } From 6c096191ba0b13c3396c4b130daf64f5a9f75267 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Mar 2014 13:46:15 -0700 Subject: [PATCH 115/145] Remove support for invoking old pager --- parser.cpp | 13 ------------- parser.h | 1 - reader.cpp | 34 +++++++++------------------------- 3 files changed, 9 insertions(+), 39 deletions(-) diff --git a/parser.cpp b/parser.cpp index 69bbaa3ca..d512f77ef 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3152,16 +3152,3 @@ bool parser_use_ast(void) return from_string(var); } } - -bool pager_use_inline(void) -{ - env_var_t var = env_get_string(L"fish_new_pager"); - if (var.missing_or_empty()) - { - return 1; - } - else - { - return from_string(var); - } -} diff --git a/parser.h b/parser.h index f4dfcac25..2ec6ed05b 100644 --- a/parser.h +++ b/parser.h @@ -550,7 +550,6 @@ public: /* Temporary */ bool parser_use_ast(void); -bool pager_use_inline(void); #endif diff --git a/reader.cpp b/reader.cpp index 250884ffb..3899e4d47 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1988,32 +1988,16 @@ static bool handle_completions(const std::vector &comp, bool conti wchar_t quote; parse_util_get_parameter_info(el->text, el->position, "e, NULL, NULL); - bool is_quoted = (quote != L'\0'); - if (pager_use_inline()) - { - /* Inline pager */ - data->pager.set_prefix(prefix); - data->pager.set_completions(surviving_completions); - - /* Invalidate our rendering */ - data->current_page_rendering = page_rendering_t(); - - /* Modify the command line to reflect the new pager */ - data->pager_selection_changed(); - } - else - { - /* Classic pager. Clear the autosuggestion from the old commandline before abandoning it (see #561) */ - if (! data->autosuggestion.empty()) - reader_repaint_without_autosuggestion(); - - write_loop(1, "\n", 1); - - run_pager(prefix, is_quoted, surviving_completions); - - s_reset(&data->screen, screen_reset_abandon_line); - } + /* Update the pager data */ + data->pager.set_prefix(prefix); + data->pager.set_completions(surviving_completions); + + /* Invalidate our rendering */ + data->current_page_rendering = page_rendering_t(); + + /* Modify the command line to reflect the new pager */ + data->pager_selection_changed(); reader_repaint_needed(); From 2442ae60dba9e7120170fba7c0cb307a3609b375 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Mar 2014 14:00:18 -0700 Subject: [PATCH 116/145] Remove old fish_pager source and implementation --- Makefile.in | 25 +- complete.h | 7 - fish.xcodeproj/project.pbxproj | 137 --- fish_pager.cpp | 1427 -------------------------------- reader.cpp | 138 --- 5 files changed, 2 insertions(+), 1732 deletions(-) delete mode 100644 fish_pager.cpp diff --git a/Makefile.in b/Makefile.in index ccd908330..8d18ce1d7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -57,7 +57,6 @@ CXXFLAGS = @CXXFLAGS@ $(MACROS) $(EXTRA_CXXFLAGS) LDFLAGS = @LDFLAGS@ LDFLAGS_FISH = ${LDFLAGS} @LIBS_FISH@ @LDFLAGS_FISH@ LDFLAGS_FISH_INDENT = ${LDFLAGS} @LIBS_FISH_INDENT@ -LDFLAGS_FISH_PAGER = ${LDFLAGS} @LIBS_FISH_PAGER@ LDFLAGS_FISHD = ${LDFLAGS} @LIBS_FISHD@ LDFLAGS_MIMEDB = ${LDFLAGS} @LIBS_MIMEDB@ @@ -106,15 +105,6 @@ BUILTIN_FILES := builtin_set.cpp builtin_commandline.cpp \ builtin_set_color.cpp builtin_printf.cpp -# -# All objects that the system needs to build fish_pager -# - -FISH_PAGER_OBJS := fish_pager.o output.o wutil.o \ - input_common.o env_universal.o env_universal_common.o common.o \ - print_help.o iothread.o color.o - - # # All objects that the system needs to build fish_tests # @@ -192,7 +182,7 @@ FUNCTIONS_DIR_FILES := $(wildcard share/functions/*.fish) # Programs to install # -PROGRAMS := fish mimedb fish_pager fishd fish_indent +PROGRAMS := fish mimedb fishd fish_indent # # Manual pages to install @@ -239,7 +229,7 @@ FISH-BUILD-VERSION-FILE: FORCE -include FISH-BUILD-VERSION-FILE CPPFLAGS += -DFISH_BUILD_VERSION=\"$(FISH_BUILD_VERSION)\" .PHONY: FORCE -env.o fish.o fish_indent.o fish_pager.o fishd.o mimedb.o: FISH-BUILD-VERSION-FILE +env.o fish.o fish_indent.o fishd.o mimedb.o: FISH-BUILD-VERSION-FILE # @@ -699,14 +689,6 @@ fish: $(FISH_OBJS) fish.o $(CXX) $(CXXFLAGS) $(FISH_OBJS) fish.o $(LDFLAGS_FISH) -o $@ -# -# Build the fish_pager program. -# - -fish_pager: $(FISH_PAGER_OBJS) - $(CXX) $(CXXFLAGS) $(FISH_PAGER_OBJS) $(LDFLAGS_FISH_PAGER) -o $@ - - # # Build the fishd program. # @@ -863,9 +845,6 @@ fish.o: expand.h intern.h exec.h output.h screen.h history.h path.h input.h fish.o: input_common.h fish_indent.o: config.h fallback.h signal.h util.h common.h wutil.h fish_indent.o: tokenizer.h print_help.h parser_keywords.h -fish_pager.o: config.h signal.h fallback.h util.h wutil.h common.h complete.h -fish_pager.o: output.h screen.h highlight.h env.h color.h input_common.h -fish_pager.o: env_universal.h env_universal_common.h print_help.h fish_tests.o: config.h signal.h fallback.h util.h common.h proc.h io.h fish_tests.o: parse_tree.h tokenizer.h parse_constants.h reader.h complete.h fish_tests.o: highlight.h env.h color.h builtin.h function.h event.h diff --git a/complete.h b/complete.h index be10d17bf..10f351fed 100644 --- a/complete.h +++ b/complete.h @@ -55,13 +55,6 @@ */ #define COMPLETE_SEP_STR L"\004" -/** - * Separator between completion items in fish_pager. This is used for - * completion grouping, e.g. when putting completions with the same - * descriptions on the same line. - */ -#define COMPLETE_ITEM_SEP L'\uf500' - /** * Character that separates the completion and description on * programmable completions diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index d2e9d2bcd..deb3a107d 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ dependencies = ( D07D265715E33B86009E43F6 /* PBXTargetDependency */, D07D265915E33B86009E43F6 /* PBXTargetDependency */, - D07D265B15E33B86009E43F6 /* PBXTargetDependency */, D07D265D15E33B86009E43F6 /* PBXTargetDependency */, D0A56500168D257900AF6161 /* PBXTargetDependency */, ); @@ -49,7 +48,6 @@ dependencies = ( D0F01A1315AA36280034B3B1 /* PBXTargetDependency */, D0F01A1515AA362E0034B3B1 /* PBXTargetDependency */, - D0F01A1915AA36310034B3B1 /* PBXTargetDependency */, D0F01A1715AA36300034B3B1 /* PBXTargetDependency */, D0A564EF168D09C000AF6161 /* PBXTargetDependency */, ); @@ -172,24 +170,11 @@ D0D02ADB159864C2008E62BD /* tokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855D13B3ACEE0099B651 /* tokenizer.cpp */; }; D0D02ADC159864D5008E62BD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; D0D02ADD159864D7008E62BD /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; - D0D02AEA15986549008E62BD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; - D0D02AEB1598654C008E62BD /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; - D0D1CD6C15B7451900F03988 /* fish_pager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854013B3ACEE0099B651 /* fish_pager.cpp */; }; - D0D1CD6D15B7452100F03988 /* output.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855113B3ACEE0099B651 /* output.cpp */; }; - D0D1CD6E15B7452600F03988 /* wutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0856113B3ACEE0099B651 /* wutil.cpp */; }; - D0D1CD6F15B7452D00F03988 /* input_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854913B3ACEE0099B651 /* input_common.cpp */; }; - D0D1CD7015B7453300F03988 /* env_universal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853913B3ACEE0099B651 /* env_universal.cpp */; }; - D0D1CD7115B7453700F03988 /* env_universal_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853813B3ACEE0099B651 /* env_universal_common.cpp */; }; - D0D1CD7215B7454A00F03988 /* print_help.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855613B3ACEE0099B651 /* print_help.cpp */; }; - D0D1CD7315B7455200F03988 /* color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0B6B0FE14E88BA400AD6C10 /* color.cpp */; }; - D0D1CD7415B7456000F03988 /* iothread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854D13B3ACEE0099B651 /* iothread.cpp */; }; - D0D1CD7515B7458B00F03988 /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853613B3ACEE0099B651 /* common.cpp */; }; D0D2694915983772005D9B9C /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854413B3ACEE0099B651 /* function.cpp */; }; D0D2694A15983779005D9B9C /* builtin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853513B3ACEE0099B651 /* builtin.cpp */; }; D0F019F115A977140034B3B1 /* fish in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0D2693C159835CA005D9B9C /* fish */; }; D0F019F215A977270034B3B1 /* fishd in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0D02ABC15985EF9008E62BD /* fishd */; }; D0F019F315A977290034B3B1 /* fish_indent in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0D02AD01598642A008E62BD /* fish_indent */; }; - D0F019F415A9772C0034B3B1 /* fish_pager in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0D02AE415986537008E62BD /* fish_pager */; }; D0F019F815A977AB0034B3B1 /* config.fish in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0CBD580159EE48F0024809C /* config.fish */; }; D0F019FD15A977CA0034B3B1 /* config.fish in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0C4FD9415A7D7EE00212EF1 /* config.fish */; }; D0F01A0315A978910034B3B1 /* osx_fish_launcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D0D02AFA159871B2008E62BD /* osx_fish_launcher.m */; }; @@ -219,13 +204,6 @@ remoteGlobalIDString = D0D02ABB15985EF9008E62BD; remoteInfo = fishd; }; - D07D265C15E33B86009E43F6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0A084F213B3AC130099B651 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0D02AE315986537008E62BD; - remoteInfo = fish_pager; - }; D07D265E15E33B86009E43F6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D0A084F213B3AC130099B651 /* Project object */; @@ -268,13 +246,6 @@ remoteGlobalIDString = D0D02ACF1598642A008E62BD; remoteInfo = fish_indent; }; - D0F01A1815AA36310034B3B1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D0A084F213B3AC130099B651 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D0D02AE315986537008E62BD; - remoteInfo = fish_pager; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -355,7 +326,6 @@ D0F019F115A977140034B3B1 /* fish in CopyFiles */, D0F019F215A977270034B3B1 /* fishd in CopyFiles */, D0F019F315A977290034B3B1 /* fish_indent in CopyFiles */, - D0F019F415A9772C0034B3B1 /* fish_pager in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -458,7 +428,6 @@ D0A0853D13B3ACEE0099B651 /* expand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expand.cpp; sourceTree = ""; }; D0A0853E13B3ACEE0099B651 /* fallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fallback.cpp; sourceTree = ""; }; D0A0853F13B3ACEE0099B651 /* fish_indent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fish_indent.cpp; sourceTree = ""; }; - D0A0854013B3ACEE0099B651 /* fish_pager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fish_pager.cpp; sourceTree = ""; }; D0A0854113B3ACEE0099B651 /* fish_tests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fish_tests.cpp; sourceTree = ""; }; D0A0854213B3ACEE0099B651 /* fish.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fish.cpp; sourceTree = ""; }; D0A0854313B3ACEE0099B651 /* fishd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fishd.cpp; sourceTree = ""; }; @@ -516,7 +485,6 @@ D0D02AA915985C0C008E62BD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = osx/Info.plist; sourceTree = ""; }; D0D02ABC15985EF9008E62BD /* fishd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fishd; sourceTree = BUILT_PRODUCTS_DIR; }; D0D02AD01598642A008E62BD /* fish_indent */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fish_indent; sourceTree = BUILT_PRODUCTS_DIR; }; - D0D02AE415986537008E62BD /* fish_pager */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fish_pager; sourceTree = BUILT_PRODUCTS_DIR; }; D0D02AFA159871B2008E62BD /* osx_fish_launcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = osx_fish_launcher.m; path = osx/osx_fish_launcher.m; sourceTree = ""; }; D0D2693C159835CA005D9B9C /* fish */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = fish; sourceTree = BUILT_PRODUCTS_DIR; }; D0D9B2B318555D92001AE279 /* parse_constants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parse_constants.h; sourceTree = ""; }; @@ -554,15 +522,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D0D02AE115986537008E62BD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D02AEA15986549008E62BD /* libncurses.dylib in Frameworks */, - D0D02AEB1598654C008E62BD /* libiconv.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D0D26939159835CA005D9B9C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -676,7 +635,6 @@ D0A0850E13B3ACEE0099B651 /* function.h */, D0A0854413B3ACEE0099B651 /* function.cpp */, D0A0853F13B3ACEE0099B651 /* fish_indent.cpp */, - D0A0854013B3ACEE0099B651 /* fish_pager.cpp */, D0A0854113B3ACEE0099B651 /* fish_tests.cpp */, D0A0854213B3ACEE0099B651 /* fish.cpp */, D0A0854313B3ACEE0099B651 /* fishd.cpp */, @@ -789,7 +747,6 @@ D0D02A9A15985A75008E62BD /* fish.app */, D0D02ABC15985EF9008E62BD /* fishd */, D0D02AD01598642A008E62BD /* fish_indent */, - D0D02AE415986537008E62BD /* fish_pager */, D08A328D17B4455100F3A533 /* fish_tests */, ); name = Products; @@ -890,22 +847,6 @@ productReference = D0D02AD01598642A008E62BD /* fish_indent */; productType = "com.apple.product-type.tool"; }; - D0D02AE315986537008E62BD /* fish_pager */ = { - isa = PBXNativeTarget; - buildConfigurationList = D0D02AE715986537008E62BD /* Build configuration list for PBXNativeTarget "fish_pager" */; - buildPhases = ( - D0D02AE015986537008E62BD /* Sources */, - D0D02AE115986537008E62BD /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = fish_pager; - productName = fish_pager; - productReference = D0D02AE415986537008E62BD /* fish_pager */; - productType = "com.apple.product-type.tool"; - }; D0D2693B159835CA005D9B9C /* fish_shell */ = { isa = PBXNativeTarget; buildConfigurationList = D0D26943159835CA005D9B9C /* Build configuration list for PBXNativeTarget "fish_shell" */; @@ -948,7 +889,6 @@ D0D2693B159835CA005D9B9C /* fish_shell */, D0D02ABB15985EF9008E62BD /* fishd */, D0D02ACF1598642A008E62BD /* fish_indent */, - D0D02AE315986537008E62BD /* fish_pager */, D08A328C17B4455100F3A533 /* fish_tests */, D0A564E6168CFDD800AF6161 /* man_pages */, D0A084F713B3AC130099B651 /* Makefile */, @@ -1201,23 +1141,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D0D02AE015986537008E62BD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D0D1CD6C15B7451900F03988 /* fish_pager.cpp in Sources */, - D0D1CD6D15B7452100F03988 /* output.cpp in Sources */, - D0D1CD6E15B7452600F03988 /* wutil.cpp in Sources */, - D0D1CD6F15B7452D00F03988 /* input_common.cpp in Sources */, - D0D1CD7015B7453300F03988 /* env_universal.cpp in Sources */, - D0D1CD7115B7453700F03988 /* env_universal_common.cpp in Sources */, - D0D1CD7315B7455200F03988 /* color.cpp in Sources */, - D0D1CD7515B7458B00F03988 /* common.cpp in Sources */, - D0D1CD7215B7454A00F03988 /* print_help.cpp in Sources */, - D0D1CD7415B7456000F03988 /* iothread.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D0D26938159835CA005D9B9C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1292,11 +1215,6 @@ target = D0D02ABB15985EF9008E62BD /* fishd */; targetProxy = D07D265A15E33B86009E43F6 /* PBXContainerItemProxy */; }; - D07D265B15E33B86009E43F6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0D02AE315986537008E62BD /* fish_pager */; - targetProxy = D07D265C15E33B86009E43F6 /* PBXContainerItemProxy */; - }; D07D265D15E33B86009E43F6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D0D02ACF1598642A008E62BD /* fish_indent */; @@ -1327,11 +1245,6 @@ target = D0D02ACF1598642A008E62BD /* fish_indent */; targetProxy = D0F01A1615AA36300034B3B1 /* PBXContainerItemProxy */; }; - D0F01A1915AA36310034B3B1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = D0D02AE315986537008E62BD /* fish_pager */; - targetProxy = D0F01A1815AA36310034B3B1 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -1435,18 +1348,6 @@ }; name = "Release_C++11"; }; - D007FDE117136EAA00A52BE6 /* Release_C++11 */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = "Release_C++11"; - }; D007FDE217136EAA00A52BE6 /* Release_C++11 */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1743,34 +1644,6 @@ }; name = Release; }; - D0D02AE815986537008E62BD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_UNINITIALIZED_AUTOS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - D0D02AE915986537008E62BD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; D0D26944159835CA005D9B9C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1898,16 +1771,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D0D02AE715986537008E62BD /* Build configuration list for PBXNativeTarget "fish_pager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D0D02AE815986537008E62BD /* Debug */, - D0D02AE915986537008E62BD /* Release */, - D007FDE117136EAA00A52BE6 /* Release_C++11 */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; D0D26943159835CA005D9B9C /* Build configuration list for PBXNativeTarget "fish_shell" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/fish_pager.cpp b/fish_pager.cpp deleted file mode 100644 index f640e9959..000000000 --- a/fish_pager.cpp +++ /dev/null @@ -1,1427 +0,0 @@ -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - -#include -#include -#include -#include - -#include - -#if HAVE_NCURSES_H -#include -#else -#include -#endif - -#if HAVE_TERM_H -#include -#elif HAVE_NCURSES_TERM_H -#include -#endif - -#include - -#ifdef HAVE_GETOPT_H -#include -#endif - -#include -#include - -#include "fallback.h" -#include "util.h" - -#include "wutil.h" -#include "common.h" -#include "complete.h" -#include "output.h" -#include "input_common.h" -#include "env_universal.h" -#include "print_help.h" - -enum -{ - LINE_UP = R_NULL+1, - LINE_DOWN, - PAGE_UP, - PAGE_DOWN -} -; - - -enum -{ - HIGHLIGHT_PAGER_PREFIX, - HIGHLIGHT_PAGER_COMPLETION, - HIGHLIGHT_PAGER_DESCRIPTION, - HIGHLIGHT_PAGER_PROGRESS, - HIGHLIGHT_PAGER_SECONDARY -} -; - -enum -{ - /* - Returnd by the pager if no more displaying is needed - */ - PAGER_DONE, - /* - Returned by the pager if the completions would not fit in the specified number of columns - */ - PAGER_RETRY, - /* - Returned by the pager if the terminal changes size - */ - PAGER_RESIZE -} -; - -/** - The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions -*/ -#define PAGER_MIN_WIDTH 16 - -/** - The maximum number of columns of completion to attempt to fit onto the screen -*/ -#define PAGER_MAX_COLS 6 - -/** - The string describing the single-character options accepted by fish_pager -*/ -#define GETOPT_STRING "c:hr:qvp:" - -/** - Error to use when given an invalid file descriptor for reading completions or writing output -*/ -#define ERR_NOT_FD _( L"%ls: Argument '%s' is not a valid file descriptor\n" ) - -/** - This struct should be continually updated by signals as the term - resizes, and as such always contain the correct current size. -*/ -static struct winsize termsize; - -/** - The termios modes the terminal had when the program started. These - should be restored on exit -*/ -static struct termios saved_modes; - -/** - This flag is set to 1 of we have sent the enter_ca_mode terminfo - sequence to save the previous terminal contents. -*/ -static int is_ca_mode = 0; - -/** - This buffer is used to buffer the output of the pager to improve - screen redraw performance bu cutting down the number of write() - calls to only one. -*/ -static std::vector pager_buffer; - -/** - The environment variables used to specify the color of different - tokens. -*/ -static const wchar_t *hightlight_var[] = -{ - L"fish_pager_color_prefix", - L"fish_pager_color_completion", - L"fish_pager_color_description", - L"fish_pager_color_progress", - L"fish_pager_color_secondary" -} -; - -/** - This string contains the text that should be sent back to the calling program -*/ -static wcstring out_buff; -/** - This is the file to which the output text should be sent. It is really a pipe. -*/ -static FILE *out_file; - -/** - Data structure describing one or a group of related completions -*/ -struct comp_t -{ - /** - The list of all completin strings this entry applies to - */ - wcstring_list_t comp; - /** - The description - */ - wcstring desc; - /** - On-screen width of the completion string - */ - int comp_width; - /** - On-screen width of the description information - */ - int desc_width; - /** - Preffered total width - */ - int pref_width; - /** - Minimum acceptable width - */ - int min_width; -}; - -/** - This function translates from a highlight code to a specific color - by check invironement variables -*/ -static rgb_color_t get_color(int highlight) -{ - const wchar_t *val; - - if (highlight < 0) - return rgb_color_t::normal(); - if (highlight >= (5)) - return rgb_color_t::normal(); - - val = wgetenv(hightlight_var[highlight]); - - if (!val) - { - val = env_universal_get(hightlight_var[highlight]); - } - - if (!val) - { - return rgb_color_t::normal(); - } - - return parse_color(val, false); -} - -/** - This function calculates the minimum width for each completion - entry in the specified array_list. This width depends on the - terminal size, so this function should be called when the terminal - changes size. -*/ -static void recalc_width(std::vector &lst, const wchar_t *prefix) -{ - for (size_t i=0; imin_width = mini(c->desc_width, maxi(0,termsize.ws_col/3 - 2)) + - mini(c->desc_width, maxi(0,termsize.ws_col/5 - 4)) +4; - } - -} - -/** - Test if the specified character sequence has been entered on the - keyboard -*/ -static int try_sequence(const char *seq) -{ - int j, k; - wint_t c=0; - - for (j=0; - seq[j] != '\0' && seq[j] == (c=input_common_readch(j>0)); - j++) - ; - - if (seq[j] == '\0') - { - return 1; - } - else - { - input_common_unreadch(c); - for (k=j-1; k>=0; k--) - input_common_unreadch(seq[k]); - } - return 0; -} - -/** - Read a character from keyboard -*/ -static wint_t readch() -{ - struct mapping - { - const char *seq; - wint_t bnd; - } - ; - - struct mapping m[]= - { - { - "\x1b[A", LINE_UP - } - , - { - key_up, LINE_UP - } - , - { - "\x1b[B", LINE_DOWN - } - , - { - key_down, LINE_DOWN - } - , - { - key_ppage, PAGE_UP - } - , - { - key_npage, PAGE_DOWN - } - , - { - " ", PAGE_DOWN - } - , - { - "\t", PAGE_DOWN - } - , - { - 0, 0 - } - - } - ; - int i; - - for (i=0; m[i].bnd; i++) - { - if (!m[i].seq) - { - continue; - } - - if (try_sequence(m[i].seq)) - return m[i].bnd; - } - return input_common_readch(0); -} - -/** - Write specified character to the output buffer \c pager_buffer -*/ -static int pager_buffered_writer(char c) -{ - pager_buffer.push_back(c); - return 0; -} - -/** - Flush \c pager_buffer to stdout -*/ -static void pager_flush() -{ - if (! pager_buffer.empty()) - { - write_loop(1, & pager_buffer.at(0), pager_buffer.size() * sizeof(char)); - pager_buffer.clear(); - } -} - -/** - Print the specified string, but use at most the specified amount of - space. If the whole string can't be fitted, ellipsize it. - - \param str the string to print - \param max the maximum space that may be used for printing - \param has_more if this flag is true, this is not the entire string, and the string should be ellisiszed even if the string fits but takes up the whole space. -*/ -static int print_max(const wchar_t *str, int max, int has_more) -{ - int i; - int written = 0; - for (i=0; str[i]; i++) - { - - if (written + wcwidth(str[i]) > max) - break; - if ((written + wcwidth(str[i]) == max) && (has_more || str[i+1])) - { - writech(ellipsis_char); - written += wcwidth(ellipsis_char); - break; - } - - writech(str[i]); - written+= wcwidth(str[i]); - } - return written; -} - -/** - Print the specified item using at the specified amount of space -*/ -static void completion_print_item(const wchar_t *prefix, comp_t *c, int width, bool secondary) -{ - int comp_width=0, desc_width=0; - int written=0; - - if (c->pref_width <= width) - { - /* - The entry fits, we give it as much space as it wants - */ - comp_width = c->comp_width; - desc_width = c->desc_width; - } - else - { - /* - The completion and description won't fit on the - allocated space. Give a maximum of 2/3 of the - space to the completion, and whatever is left to - the description. - */ - int desc_all = c->desc_width?c->desc_width+4:0; - - comp_width = maxi(mini(c->comp_width, - 2*(width-4)/3), - width - desc_all); - if (c->desc_width) - desc_width = width-comp_width-4; - else - c->desc_width=0; - - } - - rgb_color_t bg = secondary ? get_color(HIGHLIGHT_PAGER_SECONDARY) : rgb_color_t::normal(); - for (size_t i=0; icomp.size(); i++) - { - const wcstring &comp = c->comp.at(i); - if (i != 0) - written += print_max(L" ", comp_width - written, 2); - set_color(get_color(HIGHLIGHT_PAGER_PREFIX), bg); - written += print_max(prefix, comp_width - written, comp.empty()?0:1); - set_color(get_color(HIGHLIGHT_PAGER_COMPLETION), bg); - written += print_max(comp.c_str(), comp_width - written, i!=(c->comp.size()-1)); - } - - - if (desc_width) - { - while (written < (width-desc_width-2)) - { - written++; - writech(L' '); - } - set_color(get_color(HIGHLIGHT_PAGER_DESCRIPTION), bg); - written += print_max(L"(", 1, 0); - written += print_max(c->desc.c_str(), desc_width, 0); - written += print_max(L")", 1, 0); - } - else - { - while (written < width) - { - written++; - writech(L' '); - } - } - if (secondary) - set_color(rgb_color_t::normal(), rgb_color_t::normal()); -} - -/** - Print the specified part of the completion list, using the - specified column offsets and quoting style. - - \param l The list of completions to print - \param cols number of columns to print in - \param width An array specifying the width of each column - \param row_start The first row to print - \param row_stop the row after the last row to print - \param prefix The string to print before each completion - \param is_quoted Whether to print the completions are in a quoted environment -*/ - -static void completion_print(int cols, - int *width, - int row_start, - int row_stop, - const wchar_t *prefix, - int is_quoted, - const std::vector &lst) -{ - - size_t rows = (lst.size()-1)/cols+1; - size_t i, j; - - for (i = row_start; i &lst) -{ - /* - The calculated preferred width of each column - */ - int pref_width[PAGER_MAX_COLS]; - /* - The calculated minimum width of each column - */ - int min_width[PAGER_MAX_COLS]; - /* - If the list can be printed with this width, width will contain the width of each column - */ - int *width=pref_width; - /* - Set to one if the list should be printed at this width - */ - int print=0; - - long i, j; - - int rows = (int)((lst.size()-1)/cols+1); - - int pref_tot_width=0; - int min_tot_width = 0; - int res=PAGER_RETRY; - /* - Skip completions on tiny terminals - */ - - if (termsize.ws_col < PAGER_MIN_WIDTH) - return PAGER_DONE; - - memset(pref_width, 0, sizeof(pref_width)); - memset(min_width, 0, sizeof(min_width)); - - /* Calculate how wide the list would be */ - for (j = 0; j < cols; j++) - { - for (i = 0; ipref_width; - min = c->min_width; - - if (j != cols-1) - { - pref += 2; - min += 2; - } - min_width[j] = maxi(min_width[j], - min); - pref_width[j] = maxi(pref_width[j], - pref); - } - min_tot_width += min_width[j]; - pref_tot_width += pref_width[j]; - } - /* - Force fit if one column - */ - if (cols == 1) - { - if (pref_tot_width > termsize.ws_col) - { - pref_width[0] = termsize.ws_col; - } - width = pref_width; - print=1; - } - else if (pref_tot_width <= termsize.ws_col) - { - /* Terminal is wide enough. Print the list! */ - width = pref_width; - print=1; - } - else - { - long next_rows = (lst.size()-1)/(cols-1)+1; - /* fwprintf( stderr, - L"cols %d, min_tot %d, term %d, rows=%d, nextrows %d, termrows %d, diff %d\n", - cols, - min_tot_width, termsize.ws_col, - rows, next_rows, termsize.ws_row, - pref_tot_width-termsize.ws_col ); - */ - if (min_tot_width < termsize.ws_col && - (((rows < termsize.ws_row) && (next_rows >= termsize.ws_row)) || - (pref_tot_width-termsize.ws_col< 4 && cols < 3))) - { - /* - Terminal almost wide enough, or squeezing makes the - whole list fit on-screen. - - This part of the code is really important. People hate - having to scroll through the completion list. In cases - where there are a huge number of completions, it can't - be helped, but it is not uncommon for the completions to - _almost_ fit on one screen. In those cases, it is almost - always desirable to 'squeeze' the completions into a - single page. - - If we are using N columns and can get everything to - fit using squeezing, but everything would also fit - using N-1 columns, don't try. - */ - - int tot_width = min_tot_width; - width = min_width; - - while (tot_width < termsize.ws_col) - { - for (i=0; (i 0) - { - pos--; - writembs(tparm(cursor_address, 0, 0)); - writembs(scroll_reverse); - completion_print(cols, - width, - pos, - pos+1, - prefix, - is_quoted, - lst); - writembs(tparm(cursor_address, - termsize.ws_row-1, 0)); - writembs(clr_eol); - - } - - break; - } - - case LINE_DOWN: - { - if (pos <= (rows - termsize.ws_row)) - { - pos++; - completion_print(cols, - width, - pos+termsize.ws_row-2, - pos+termsize.ws_row-1, - prefix, - is_quoted, - lst); - } - break; - } - - case PAGE_DOWN: - { - - npos = mini((int)(rows - termsize.ws_row+1), (int)(pos + termsize.ws_row-1)); - if (npos != pos) - { - pos = npos; - completion_print(cols, - width, - pos, - pos+termsize.ws_row-1, - prefix, - is_quoted, - lst); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - - break; - } - - case PAGE_UP: - { - npos = maxi(0, - pos - termsize.ws_row+1); - - if (npos != pos) - { - pos = npos; - completion_print(cols, - width, - pos, - pos+termsize.ws_row-1, - prefix, - is_quoted, - lst); - } - else - { - if (flash_screen) - writembs(flash_screen); - } - break; - } - - case R_NULL: - { - do_loop=0; - res=PAGER_RESIZE; - break; - - } - - default: - { - out_buff.push_back(c); - do_loop = 0; - break; - } - } - } - writembs(clr_eol); - } - } - return res; -} - -/** - Substitute any series of whitespace with a single space character - inside completion descriptions. Remove all whitespace from - beginning/end of completion descriptions. -*/ -static void mangle_descriptions(wcstring_list_t &lst) -{ - int skip; - for (size_t i=0; i desc_table; - - for (size_t i=0; isize(); i++) - { - const wchar_t *item = lst->at(i).c_str(); - const wchar_t *desc = wcschr(item, COMPLETE_SEP); - long prev_idx; - - if (!desc) - continue; - desc++; - prev_idx = desc_table[desc] - 1; - if (prev_idx == -1) - { - desc_table[desc] = (long)(i+1); - } - else - { - const wchar_t *old = lst->at(prev_idx).c_str(); - const wchar_t *old_end = wcschr(old, COMPLETE_SEP); - - if (old_end) - { - - wcstring foo; - foo.append(old, old_end - old); - foo.push_back(COMPLETE_ITEM_SEP); - foo.append(item); - - lst->at(prev_idx) = foo; - lst->at(i).clear(); - } - - } - - } - - /* Remove empty strings */ - lst->erase(remove(lst->begin(), lst->end(), wcstring()), lst->end()); -} - -/** - Replace completion strings with a comp_t structure -*/ -static std::vector mangle_completions(wcstring_list_t &lst, const wchar_t *prefix) -{ - std::vector result; - for (size_t i=0; icomp_width += my_wcswidth(str.c_str()); - comp->comp.push_back(str); - start = end+1; - } - - if (c == COMPLETE_SEP) - { - comp->desc = next.c_str() + start; - break; - } - - if (!c) - break; - - } - - comp->comp_width += (int)(my_wcswidth(prefix)*comp->comp.size() + 2*(comp->comp.size()-1)); - comp->desc_width = comp->desc.empty()?0:my_wcswidth(comp->desc.c_str()); - - comp->pref_width = comp->comp_width + comp->desc_width + (comp->desc_width?4:0); - - result.push_back(comp); - } - - recalc_width(result, prefix); - return result; -} - - - -/** - Respond to a winch signal by checking the terminal size -*/ -static void handle_winch(int sig) -{ - if (ioctl(1,TIOCGWINSZ,&termsize)!=0) - { - return; - } -} - -/** - The callback function that the keyboard reading function calls when - an interrupt occurs. This makes sure that R_NULL is returned at - once when an interrupt has occured. -*/ -static int interrupt_handler() -{ - return R_NULL; -} - -/** - Initialize various subsystems. This also closes stdin and replaces - it with a copy of stderr, so the reading of completion strings must - be done before init is called. -*/ -static void init(int mangle_descriptors, int out) -{ - struct sigaction act; - - static struct termios pager_modes; - char *term; - - if (mangle_descriptors) - { - - /* - Make fd 1 output to screen, and use some other fd for writing - the resulting output back to the caller - */ - int in; - out = dup(1); - close(1); - close(0); - - /* OK to not use CLO_EXEC here because fish_pager is single threaded */ - if ((in = open(ttyname(2), O_RDWR)) != -1) - { - if (dup2(2, 1) == -1) - { - debug(0, _(L"Could not set up output file descriptors for pager")); - exit(1); - } - - if (dup2(in, 0) == -1) - { - debug(0, _(L"Could not set up input file descriptors for pager")); - exit(1); - } - } - else - { - debug(0, _(L"Could not open tty for pager")); - exit(1); - } - } - - if (!(out_file = fdopen(out, "w"))) - { - debug(0, _(L"Could not initialize result pipe")); - exit(1); - } - - - env_universal_init(0, 0, 0, 0); - input_common_init(&interrupt_handler); - output_set_writer(&pager_buffered_writer); - - sigemptyset(& act.sa_mask); - act.sa_flags=0; - act.sa_handler=SIG_DFL; - act.sa_flags = 0; - act.sa_handler= &handle_winch; - if (sigaction(SIGWINCH, &act, 0)) - { - wperror(L"sigaction"); - exit(1); - } - - handle_winch(0); /* Set handler for window change events */ - - tcgetattr(0,&pager_modes); /* get the current terminal modes */ - memcpy(&saved_modes, - &pager_modes, - sizeof(saved_modes)); /* save a copy so we can reset the terminal later */ - - pager_modes.c_lflag &= ~ICANON; /* turn off canonical mode */ - pager_modes.c_lflag &= ~ECHO; /* turn off echo mode */ - pager_modes.c_cc[VMIN]=1; - pager_modes.c_cc[VTIME]=0; - - /* - - */ - if (tcsetattr(0,TCSANOW,&pager_modes)) /* set the new modes */ - { - wperror(L"tcsetattr"); - exit(1); - } - - int errret; - if (setupterm(0, STDOUT_FILENO, &errret) == ERR) - { - debug(0, _(L"Could not set up terminal")); - exit(1); - } - - term = getenv("TERM"); - if (term) - { - wcstring wterm = str2wcstring(term); - output_set_term(wterm); - } - - /* Infer term256 support */ - char *fish_term256 = getenv("fish_term256"); - bool support_term256; - if (fish_term256) - { - support_term256 = from_string(fish_term256); - } - else - { - support_term256 = term && strstr(term, "256color"); - } - output_set_supports_term256(support_term256); -} - -/** - Free memory used by various subsystems. -*/ -static void destroy() -{ - env_universal_destroy(); - input_common_destroy(); - wutil_destroy(); - if (fish_del_curterm(cur_term) == ERR) - { - debug(0, _(L"Error while closing terminfo")); - } - - fclose(out_file); -} - -/** - Read lines of input from the specified file, unescape them and - insert them into the specified list. -*/ -static void read_array(FILE* file, wcstring_list_t &comp) -{ - std::vector buffer; - int c; - - while (!feof(file)) - { - buffer.clear(); - - while (1) - { - c = getc(file); - if (c == EOF) - { - break; - } - - if (c == '\n') - { - break; - } - - buffer.push_back(static_cast(c)); - } - - if (! buffer.empty()) - { - buffer.push_back(0); - wcstring wcs = str2wcstring(&buffer.at(0)); - if (unescape_string_in_place(&wcs, false)) - { - comp.push_back(wcs); - } - } - } - -} - -static int get_fd(const char *str) -{ - char *end; - long fd; - - errno = 0; - fd = strtol(str, &end, 10); - if (fd < 0 || *end || errno) - { - debug(0, ERR_NOT_FD, program_name, optarg); - exit(1); - } - return (int)fd; -} - - -int main(int argc, char **argv) -{ - int i; - int is_quoted=0; - wcstring_list_t comp; - wcstring prefix; - - int mangle_descriptors = 0; - int result_fd = -1; - set_main_thread(); - setup_fork_guards(); - - /* - This initialization is made early, so that the other init code - can use global_context for memory managment - */ - program_name = L"fish_pager"; - - - wsetlocale(LC_ALL, L""); - - /* - The call signature for fish_pager is a mess. Because we want - to be able to upgrade fish without breaking running - instances, we need to support all previous - modes. Unfortunatly, the two previous ones are a mess. The - third one is designed to be extensible, so hopefully it will - be the last. - */ - - if (argc > 1 && argv[1][0] == '-') - { - /* - Third mode - */ - - int completion_fd = -1; - FILE *completion_file; - - while (1) - { - static struct option - long_options[] = - { - { - "result-fd", required_argument, 0, 'r' - } - , - { - "completion-fd", required_argument, 0, 'c' - } - , - { - "prefix", required_argument, 0, 'p' - } - , - { - "is-quoted", no_argument, 0, 'q' - } - , - { - "help", no_argument, 0, 'h' - } - , - { - "version", no_argument, 0, 'v' - } - , - { - 0, 0, 0, 0 - } - } - ; - - int opt_index = 0; - - int opt = getopt_long(argc, - argv, - GETOPT_STRING, - long_options, - &opt_index); - - if (opt == -1) - break; - - switch (opt) - { - case 0: - { - break; - } - - case 'r': - { - result_fd = get_fd(optarg); - break; - } - - case 'c': - { - completion_fd = get_fd(optarg); - break; - } - - case 'p': - { - prefix = str2wcstring(optarg); - break; - } - - case 'h': - { - print_help(argv[0], 1); - exit(0); - } - - case 'v': - { - debug(0, L"%ls, version %s\n", program_name, FISH_BUILD_VERSION); - exit(0); - } - - case 'q': - { - is_quoted = 1; - } - - } - } - - if (completion_fd == -1 || result_fd == -1) - { - debug(0, _(L"Unspecified file descriptors")); - exit(1); - } - - - if ((completion_file = fdopen(completion_fd, "r"))) - { - read_array(completion_file, comp); - fclose(completion_file); - } - else - { - debug(0, _(L"Could not read completions")); - wperror(L"fdopen"); - exit(1); - } - - } - else - { - /* - Second or first mode. These suck, but we need to support - them for backwards compatibility. At least for some - time. - - Third mode was implemented in January 2007, and previous - modes should be considered deprecated from that point - forward. A reasonable time frame for removal of the code - below has yet to be determined. - */ - - if (argc < 3) - { - print_help(argv[0], 1); - exit(0); - } - else - { - mangle_descriptors = 1; - - prefix = str2wcstring(argv[2]); - is_quoted = strcmp("1", argv[1])==0; - - if (argc > 3) - { - /* - First mode - */ - for (i=3; i completions = mangle_completions(comp, prefix.c_str()); - - /** - Try to print the completions. Start by trying to print the - list in PAGER_MAX_COLS columns, if the completions won't - fit, reduce the number of columns by one. Printing a single - column never fails. - */ - for (i = PAGER_MAX_COLS; i>0; i--) - { - switch (completion_try_print(i, prefix.c_str(), is_quoted, completions)) - { - - case PAGER_RETRY: - break; - - case PAGER_DONE: - i=0; - break; - - case PAGER_RESIZE: - /* - This means we got a resize event, so we start - over from the beginning. Since it the screen got - bigger, we might be able to fit all completions - on-screen. - */ - i=PAGER_MAX_COLS+1; - break; - - } - } - - fwprintf(out_file, L"%ls", out_buff.c_str()); - if (is_ca_mode) - { - writembs(exit_ca_mode); - pager_flush(); - } - destroy(); - -} - diff --git a/reader.cpp b/reader.cpp index 3899e4d47..6a81f3805 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1347,144 +1347,6 @@ static void completion_insert(const wchar_t *val, complete_flags_t flags) data->suppress_autosuggestion = true; } -/* Return an escaped path to fish_pager */ -static wcstring escaped_fish_pager_path(void) -{ - wcstring result; - const env_var_t bin_dir = env_get_string(L"__fish_bin_dir"); - if (bin_dir.missing_or_empty()) - { - /* This isn't good, hope our normal command stuff can find it */ - result = L"fish_pager"; - } - else - { - result = escape_string(bin_dir + L"/fish_pager", ESCAPE_ALL); - } - return result; -} - -/** - Run the fish_pager command to display the completion list. If the - fish_pager outputs any text, it is inserted into the input - backbuffer. - - \param prefix the string to display before every completion. - \param is_quoted should be set if the argument is quoted. This will change the display style. - \param comp the list of completions to display -*/ -static void run_pager(const wcstring &prefix, int is_quoted, const std::vector &comp) -{ - wcstring msg; - wcstring prefix_esc; - char *foo; - - shared_ptr in_buff(io_buffer_t::create(true, 3)); - shared_ptr out_buff(io_buffer_t::create(false, 4)); - - // The above may fail e.g. if we have too many open fds - if (in_buff.get() == NULL || out_buff.get() == NULL) - return; - - wchar_t *escaped_separator; - - if (prefix.empty()) - { - prefix_esc = L"\"\""; - } - else - { - prefix_esc = escape_string(prefix, 1); - } - - - const wcstring pager_path = escaped_fish_pager_path(); - const wcstring cmd = format_string(L"%ls -c 3 -r 4 %ls -p %ls", - // L"valgrind --track-fds=yes --log-file=pager.txt --leak-check=full ./%ls %d %ls", - pager_path.c_str(), - is_quoted?L"-q":L"", - prefix_esc.c_str()); - - escaped_separator = escape(COMPLETE_SEP_STR, 1); - - editable_line_t *el = &data->command_line; - - for (size_t i=0; i< comp.size(); i++) - { - long base_len=-1; - const completion_t &cmpl = comp.at(i); - - wcstring completion_text; - wcstring description_text; - - // Note that an empty completion is perfectly sensible here, e.g. tab-completing 'foo' with a file called 'foo' and another called 'foobar' - if ((cmpl.flags & COMPLETE_REPLACES_TOKEN) && match_type_shares_prefix(cmpl.match.type)) - { - // Compute base_len if we have not yet - if (base_len == -1) - { - const wchar_t *begin, *buff = el->text.c_str(); - - parse_util_token_extent(buff, el->position, &begin, 0, 0, 0); - base_len = el->position - (begin-buff); - } - - completion_text = escape_string(cmpl.completion.c_str() + base_len, ESCAPE_ALL | ESCAPE_NO_QUOTED); - } - else - { - completion_text = escape_string(cmpl.completion, ESCAPE_ALL | ESCAPE_NO_QUOTED); - } - - - if (! cmpl.description.empty()) - { - description_text = escape_string(cmpl.description, true); - } - - /* It's possible (even common) to have an empty completion with no description. An example would be completing 'foo' with extant files 'foo' and 'foobar'. But fish_pager ignores blank lines. So if our completion text is empty, always include a description, even if it's empty. - */ - msg.reserve(msg.size() + completion_text.size() + description_text.size() + 2); - msg.append(completion_text); - if (! description_text.empty() || completion_text.empty()) - { - msg.append(escaped_separator); - msg.append(description_text); - } - msg.push_back(L'\n'); - } - - free(escaped_separator); - - foo = wcs2str(msg.c_str()); - in_buff->out_buffer_append(foo, strlen(foo)); - free(foo); - - term_donate(); - parser_t &parser = parser_t::principal_parser(); - io_chain_t io_chain; - io_chain.push_back(out_buff); - io_chain.push_back(in_buff); - parser.eval(cmd, io_chain, TOP); - term_steal(); - - out_buff->read(); - - const char zero = 0; - out_buff->out_buffer_append(&zero, 1); - - const char *out_data = out_buff->out_buffer_ptr(); - if (out_data) - { - const wcstring str = str2wcstring(out_data); - size_t idx = str.size(); - while (idx--) - { - input_unreadch(str.at(idx)); - } - } -} - struct autosuggestion_context_t { wcstring search_string; From acd203840720897d015b7f5f4e8e71927e667da2 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Mar 2014 14:23:42 -0700 Subject: [PATCH 117/145] Remove old pager remnants, including documentation and references in the build system --- .gitignore | 1 - configure.ac | 9 --------- doc_src/faq.hdr | 2 +- doc_src/fish_pager.txt | 7 ------- fish.xcodeproj/project.pbxproj | 4 +--- pager.cpp | 2 +- 6 files changed, 3 insertions(+), 22 deletions(-) delete mode 100644 doc_src/fish_pager.txt diff --git a/.gitignore b/.gitignore index 2e1397272..95ad8a334 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ doc_src/index.hdr po/*.gmo fish fish_indent -fish_pager fish_tests fishd mimedb diff --git a/configure.ac b/configure.ac index 9eda25a6b..342495668 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,6 @@ AC_SUBST(HAVE_DOXYGEN) AC_SUBST(LDFLAGS_FISH) AC_SUBST(LIBS_FISH) AC_SUBST(LIBS_FISH_INDENT) -AC_SUBST(LIBS_FISH_PAGER) AC_SUBST(LIBS_FISHD) AC_SUBST(LIBS_MIMEDB) @@ -435,14 +434,6 @@ LIBS_FISH=$LIBS LIBS="$LIBS_SHARED" LIBS_FISH_INDENT=$LIBS -# -# Check for libraries needed by fish_pager. -# - -LIBS="$LIBS_SHARED" -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 - # # Check for libraries needed by fishd. # diff --git a/doc_src/faq.hdr b/doc_src/faq.hdr index c727dd5da..3961d1da9 100644 --- a/doc_src/faq.hdr +++ b/doc_src/faq.hdr @@ -266,7 +266,7 @@ Next, do the following (assuming fish was installed to /usr/local): rm -Rf /usr/local/etc/fish /usr/local/share/fish ~/.config/fish rm /usr/local/share/man/man1/fish*.1 cd /usr/local/bin -rm -f fish mimedb fish_pager fishd fish_indent +rm -f fish mimedb fishd fish_indent */ diff --git a/doc_src/fish_pager.txt b/doc_src/fish_pager.txt deleted file mode 100644 index 9efa26b11..000000000 --- a/doc_src/fish_pager.txt +++ /dev/null @@ -1,7 +0,0 @@ -\section fish_pager fish_pager - internal command used by fish - -\subsection fish_pager-description Description - -\c fish_pager is used internally by fish. It should not be used by other -commands, as its interface is liable to change in the future. - diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index deb3a107d..d51f53e3b 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -948,7 +948,6 @@ "$(SRCROOT)/doc_src/fish.txt", "$(SRCROOT)/doc_src/fish_config.txt", "$(SRCROOT)/doc_src/fish_indent.txt", - "$(SRCROOT)/doc_src/fish_pager.txt", "$(SRCROOT)/doc_src/fish_prompt.txt", "$(SRCROOT)/doc_src/fish_right_prompt.txt", "$(SRCROOT)/doc_src/fish_update_completions.txt", @@ -1021,7 +1020,6 @@ "$(BUILT_PRODUCTS_DIR)/man/man1/fish.1", "$(BUILT_PRODUCTS_DIR)/man/man1/fish_config.1", "$(BUILT_PRODUCTS_DIR)/man/man1/fish_indent.1", - "$(BUILT_PRODUCTS_DIR)/man/man1/fish_pager.1", "$(BUILT_PRODUCTS_DIR)/man/man1/fish_prompt.1", "$(BUILT_PRODUCTS_DIR)/man/man1/fish_right_prompt.1", "$(BUILT_PRODUCTS_DIR)/man/man1/fish_update_completions.1", @@ -1065,7 +1063,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "cd \"${SRCROOT}\" ;\n# Run build_documentation.sh\n# Do this in a subshell so that we keep going even if it calls exit\n( . \"./build_tools/build_documentation.sh\" \"./Doxyfile.help\" \"./doc_src\" \"$BUILT_PRODUCTS_DIR\" )\n\n# Copy certain files into man1, destined for share/man/man1 (instead of share/fish/man/man1)\n# These copies will fail of the documentation did not build; that's OK\n# We want to create the directory even if the documentation did not build, so that the Xcode build can still succeed\nmanpathdir=\"${BUILT_PRODUCTS_DIR}/pages_for_manpath/man1\"\necho \"Copying pages destined for manpath into $manpathdir\"\nrm -Rf \"$manpathdir\"\nmkdir -p \"$manpathdir\"\nfor manpage in fish.1 set_color.1 fish_pager.1 fishd.1 fish_indent.1; do\n manpagepath=\"${BUILT_PRODUCTS_DIR}/man/man1/${manpage}\"\n test -f \"$manpagepath\" && cp \"$manpagepath\" \"${BUILT_PRODUCTS_DIR}/pages_for_manpath/man1/\"\ndone\n\n# Always succeed\ntrue\n"; + shellScript = "cd \"${SRCROOT}\" ;\n# Run build_documentation.sh\n# Do this in a subshell so that we keep going even if it calls exit\n( . \"./build_tools/build_documentation.sh\" \"./Doxyfile.help\" \"./doc_src\" \"$BUILT_PRODUCTS_DIR\" )\n\n# Copy certain files into man1, destined for share/man/man1 (instead of share/fish/man/man1)\n# These copies will fail of the documentation did not build; that's OK\n# We want to create the directory even if the documentation did not build, so that the Xcode build can still succeed\nmanpathdir=\"${BUILT_PRODUCTS_DIR}/pages_for_manpath/man1\"\necho \"Copying pages destined for manpath into $manpathdir\"\nrm -Rf \"$manpathdir\"\nmkdir -p \"$manpathdir\"\nfor manpage in fish.1 set_color.1 fishd.1 fish_indent.1; do\n manpagepath=\"${BUILT_PRODUCTS_DIR}/man/man1/${manpage}\"\n test -f \"$manpagepath\" && cp \"$manpagepath\" \"${BUILT_PRODUCTS_DIR}/pages_for_manpath/man1/\"\ndone\n\n# Always succeed\ntrue\n"; }; /* End PBXShellScriptBuildPhase section */ diff --git a/pager.cpp b/pager.cpp index b137bca2f..5037db66e 100644 --- a/pager.cpp +++ b/pager.cpp @@ -11,7 +11,7 @@ typedef pager_t::comp_t comp_t; typedef std::vector completion_list_t; typedef std::vector comp_info_list_t; -/** The minimum width (in characters) the terminal may have for fish_pager to not refuse showing the completions */ +/** The minimum width (in characters) the terminal must to show completions at all */ #define PAGER_MIN_WIDTH 16 /** The maximum number of columns of completion to attempt to fit onto the screen */ From 73c2846d64216b42064bc4a42f6e779831a8e9e6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 15 Mar 2014 19:49:55 -0700 Subject: [PATCH 118/145] Remove support for input IO_BUFFERs, which were only used by fish_pager --- exec.cpp | 6 +++--- fish_tests.cpp | 2 +- io.cpp | 9 +++------ io.h | 16 ++++++---------- reader.cpp | 9 --------- 5 files changed, 13 insertions(+), 29 deletions(-) diff --git a/exec.cpp b/exec.cpp index 832c88847..c08933a10 100644 --- a/exec.cpp +++ b/exec.cpp @@ -929,7 +929,7 @@ void exec_job(parser_t &parser, job_t *j) if (p->next) { // Be careful to handle failure, e.g. too many open fds - block_output_io_buffer.reset(io_buffer_t::create(false /* = not input */, STDOUT_FILENO)); + block_output_io_buffer.reset(io_buffer_t::create(STDOUT_FILENO)); if (block_output_io_buffer.get() == NULL) { exec_error = true; @@ -958,7 +958,7 @@ void exec_job(parser_t &parser, job_t *j) { if (p->next) { - block_output_io_buffer.reset(io_buffer_t::create(0)); + block_output_io_buffer.reset(io_buffer_t::create(STDOUT_FILENO)); if (block_output_io_buffer.get() == NULL) { /* We failed (e.g. no more fds could be created). */ @@ -1606,7 +1606,7 @@ static int exec_subshell_internal(const wcstring &cmd, wcstring_list_t *lst, boo int subcommand_status = -1; //assume the worst // IO buffer creation may fail (e.g. if we have too many open files to make a pipe), so this may be null - const shared_ptr io_buffer(io_buffer_t::create(0)); + const shared_ptr io_buffer(io_buffer_t::create(STDOUT_FILENO)); if (io_buffer.get() != NULL) { parser_t &parser = parser_t::principal_parser(); diff --git a/fish_tests.cpp b/fish_tests.cpp index 7e82193cf..5b7bcea6d 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -638,7 +638,7 @@ static int signal_main(test_cancellation_info_t *info) static void test_1_cancellation(const wchar_t *src) { - shared_ptr out_buff(io_buffer_t::create(false, STDOUT_FILENO)); + shared_ptr out_buff(io_buffer_t::create(STDOUT_FILENO)); const io_chain_t io_chain(out_buff); test_cancellation_info_t ctx = {pthread_self(), 0.25 /* seconds */ }; iothread_perform(signal_main, (void (*)(test_cancellation_info_t *, int))NULL, &ctx); diff --git a/io.cpp b/io.cpp index 3395942c2..61af4a9c0 100644 --- a/io.cpp +++ b/io.cpp @@ -123,14 +123,11 @@ void io_buffer_t::read() } -io_buffer_t *io_buffer_t::create(bool is_input, int fd) +io_buffer_t *io_buffer_t::create(int fd) { bool success = true; - if (fd == -1) - { - fd = is_input ? STDIN_FILENO : STDOUT_FILENO; - } - io_buffer_t *buffer_redirect = new io_buffer_t(fd, is_input); + assert(fd >= 0); + io_buffer_t *buffer_redirect = new io_buffer_t(fd); if (exec_pipe(buffer_redirect->pipe_fd) == -1) { diff --git a/io.h b/io.h index 17e2b3421..894e4c28c 100644 --- a/io.h +++ b/io.h @@ -131,8 +131,8 @@ private: /** buffer to save output in */ std::vector out_buffer; - io_buffer_t(int f, bool i): - io_pipe_t(IO_BUFFER, f, i), + io_buffer_t(int f): + io_pipe_t(IO_BUFFER, f, false /* not input */), out_buffer() { } @@ -172,16 +172,12 @@ public: /** Create a IO_BUFFER type io redirection, complete with a pipe and a - vector for output. The default file descriptor used is 1 for - output buffering and 0 for input buffering. + vector for output. The default file descriptor used is STDOUT_FILENO + for buffering - \param is_input set this parameter to zero if the buffer should be - used to buffer the output of a command, or non-zero to buffer the - input to a command. - - \param fd when -1, determined from is_input. + \param fd the fd that will be mapped in the child process, typically STDOUT_FILENO */ - static io_buffer_t *create(bool is_input, int fd = -1); + static io_buffer_t *create(int fd); }; class io_chain_t : public std::vector > diff --git a/reader.cpp b/reader.cpp index 6a81f3805..069771c17 100644 --- a/reader.cpp +++ b/reader.cpp @@ -586,15 +586,6 @@ static void reader_repaint() data->repaint_needed = false; } -static void reader_repaint_without_autosuggestion() -{ - // Swap in an empty autosuggestion, repaint, then swap it out - wcstring saved_autosuggestion; - data->autosuggestion.swap(saved_autosuggestion); - reader_repaint(); - data->autosuggestion.swap(saved_autosuggestion); -} - /** Internal helper function for handling killing parts of text. */ static void reader_kill(editable_line_t *el, size_t begin_idx, size_t length, int mode, int newv) { From 14f4e0e2718c32147a1f99416f3bec0221ce3dad Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Mar 2014 16:49:31 -0700 Subject: [PATCH 119/145] Fix for issue where pager contents may stay around if you executed a command with pager contents visible --- reader.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reader.cpp b/reader.cpp index 069771c17..7bbac43a9 100644 --- a/reader.cpp +++ b/reader.cpp @@ -3427,6 +3427,9 @@ const wchar_t *reader_readline(void) break; } + /* The user may have hit return with pager contents, but while not navigating them. Clear the pager in that event. */ + clear_pager(); + /* We only execute the command line */ editable_line_t *el = &data->command_line; From 5f118542868c7e627a1f45c925076d35e2e6c18b Mon Sep 17 00:00:00 2001 From: jer-gentoo Date: Mon, 3 Mar 2014 01:58:07 +0100 Subject: [PATCH 120/145] Check for libtinfo after libncurses See Gentoo bug 459768 (https://bugs.gentoo.org/show_bug.cgi?id=459768) Closes #1322 (https://github.com/fish-shell/fish-shell/pull/1322). --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 342495668..b5ba9f0ba 100644 --- a/configure.ac +++ b/configure.ac @@ -407,7 +407,7 @@ AC_DEFINE( 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( setupterm, [ncurses tinfo 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 From 8ec73b2dd40bf95d2b665cfb4cc22c26a2717cae Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Mar 2014 14:49:51 -0700 Subject: [PATCH 121/145] Removing some variables from parser_t that are no longer used in the new execution model --- parser.cpp | 40 ++++++++++++---------------------------- parser.h | 24 +----------------------- 2 files changed, 13 insertions(+), 51 deletions(-) diff --git a/parser.cpp b/parser.cpp index 8513d5300..9db079032 100644 --- a/parser.cpp +++ b/parser.cpp @@ -199,10 +199,7 @@ parser_t::parser_t(enum parser_type_t type, bool errors) : cancellation_requested(false), is_within_fish_initialization(false), current_tokenizer(NULL), - current_tokenizer_pos(0), - job_start_pos(0), - eval_level(-1), - block_io(shared_ptr()) + current_tokenizer_pos(0) { } @@ -497,7 +494,7 @@ void parser_t::print_errors(wcstring &target, const wchar_t *prefix) tmp = current_tokenizer_pos; current_tokenizer_pos = err_pos; - append_format(target, L"%ls", this->current_line()); + target.append(this->current_line()); current_tokenizer_pos=tmp; } @@ -516,11 +513,11 @@ void parser_t::print_errors_stderr() tmp = current_tokenizer_pos; current_tokenizer_pos = err_pos; - fwprintf(stderr, L"%ls", this->current_line()); + wcstring current_line = this->current_line(); + fwprintf(stderr, L"%ls", current_line.c_str()); current_tokenizer_pos=tmp; } - } void parser_t::eval_args(const wchar_t *line, std::vector &args) @@ -635,7 +632,7 @@ void parser_t::stack_trace(size_t block_idx, wcstring &buff) const return; } - if (b->type() == FUNCTION_CALL || b->type()==SOURCE || b->type()==SUBST) + if (b->type() == FUNCTION_CALL || b->type() == FUNCTION_CALL_NO_SHADOW || b->type()==SOURCE || b->type()==SUBST) { /* These types of blocks should be printed @@ -653,6 +650,7 @@ void parser_t::stack_trace(size_t block_idx, wcstring &buff) const break; } case FUNCTION_CALL: + case FUNCTION_CALL_NO_SHADOW: { const function_block_t *fb = static_cast(b); append_format(buff, _(L"in function '%ls'\n"), fb->name.c_str()); @@ -728,7 +726,7 @@ const wchar_t *parser_t::is_function() const for (size_t block_idx = 0; block_idx < this->block_count(); block_idx++) { const block_t *b = this->block_at_index(block_idx); - if (b->type() == FUNCTION_CALL) + if (b->type() == FUNCTION_CALL || b->type() == FUNCTION_CALL_NO_SHADOW) { const function_block_t *fb = static_cast(b); result = fb->name.c_str(); @@ -766,6 +764,7 @@ const wchar_t *parser_t::current_filename() const for (size_t i=0; i < this->block_count(); i++) { const block_t *b = this->block_at_index(i); + /* Note that we deliberately skip FUNCTION_CALL_NO_SHADOW here, because the only such functions in wide use are '.' and eval, and we don't want to report those */ if (b->type() == FUNCTION_CALL) { const function_block_t *fb = static_cast(b); @@ -809,8 +808,10 @@ static int printed_width(const wchar_t *str, int len) } -const wchar_t *parser_t::current_line() +wcstring parser_t::current_line() { + wcstring lineinfo; + int lineno=1; const wchar_t *file; @@ -836,8 +837,6 @@ const wchar_t *parser_t::current_line() return L""; - lineinfo.clear(); - /* Calculate line number, line offset, etc. */ @@ -923,24 +922,9 @@ const wchar_t *parser_t::current_line() free((void *)line); parser_t::stack_trace(0, lineinfo); - return lineinfo.c_str(); + return lineinfo; } -int parser_t::get_pos() const -{ - return tok_get_pos(current_tokenizer); -} - -int parser_t::get_job_pos() const -{ - return job_start_pos; -} - - -void parser_t::set_pos(int p) -{ - tok_set_pos(current_tokenizer, p); -} const wchar_t *parser_t::get_buffer() const { diff --git a/parser.h b/parser.h index 446c84ee8..4011b95da 100644 --- a/parser.h +++ b/parser.h @@ -260,31 +260,18 @@ private: /** Pointer to the current tokenizer */ tokenizer_t *current_tokenizer; - /** String for representing the current line */ - wcstring lineinfo; - /** This is the position of the beginning of the currently parsed command */ int current_tokenizer_pos; /** List of called functions, used to help prevent infinite recursion */ wcstring_list_t forbidden_function; - /** String index where the current job started. */ - int job_start_pos; - /** The jobs associated with this parser */ job_list_t my_job_list; /** The list of blocks, allocated with new. It's our responsibility to delete these */ std::vector block_stack; - /** - Keeps track of how many recursive eval calls have been made. Eval - doesn't call itself directly, recursion happens on blocks and on - command substitutions. - */ - int eval_level; - /* No copying allowed */ parser_t(const parser_t&); parser_t& operator=(const parser_t&); @@ -371,7 +358,7 @@ public: init.fish (line 127): ls|grep pancake */ - const wchar_t *current_line(); + wcstring current_line(); /** Returns the current line number */ int get_lineno() const; @@ -379,15 +366,6 @@ public: /** Returns the line number for the character at the given index */ int line_number_of_character_at_offset(size_t idx) const; - /** Returns the current position in the latest string of the tokenizer. */ - int get_pos() const; - - /** Returns the position where the current job started in the latest string of the tokenizer. */ - int get_job_pos() const; - - /** Set the current position in the latest string of the tokenizer. */ - void set_pos(int p); - /** Returns the block at the given index. 0 corresponds to the innermost block. Returns NULL when idx is at or equal to the number of blocks. */ const block_t *block_at_index(size_t idx) const; block_t *block_at_index(size_t idx); From 3cfdc6d1269df5c5e198dea88a851682e9d09133 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Mar 2014 16:45:00 -0700 Subject: [PATCH 122/145] Fix line number reporting in new parser --- builtin.cpp | 5 +- builtin.h | 2 +- common.cpp | 5 ++ common.h | 3 ++ exec.cpp | 3 +- function.cpp | 10 +--- function.h | 4 +- parse_execution.cpp | 27 +++++++--- parse_execution.h | 5 +- parser.cpp | 129 ++++++++++++++++++++++++++++++++++++++++++-- parser.h | 17 ++++-- 11 files changed, 177 insertions(+), 33 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index 85d60a29a..ac21f13b2 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -1729,7 +1729,7 @@ static int builtin_pwd(parser_t &parser, wchar_t **argv) } /** Adds a function to the function set. It calls into function.cpp to perform any heavy lifting. */ -int define_function(parser_t &parser, const wcstring_list_t &c_args, const wcstring &contents, wcstring *out_err) +int define_function(parser_t &parser, const wcstring_list_t &c_args, const wcstring &contents, int definition_line_offset, wcstring *out_err) { assert(out_err != NULL); @@ -2027,8 +2027,7 @@ int define_function(parser_t &parser, const wcstring_list_t &c_args, const wcstr d.definition = contents.c_str(); - // TODO: fix def_offset inside function_add - function_add(d, parser); + function_add(d, parser, definition_line_offset); } return res; diff --git a/builtin.h b/builtin.h index 7162de235..fb9a904d2 100644 --- a/builtin.h +++ b/builtin.h @@ -179,7 +179,7 @@ const wchar_t *builtin_complete_get_temporary_buffer(); wcstring builtin_help_get(parser_t &parser, const wchar_t *cmd); /** Defines a function, like builtin_function. Returns 0 on success. args should NOT contain 'function' as the first argument. */ -int define_function(parser_t &parser, const wcstring_list_t &args, const wcstring &contents, wcstring *out_err); +int define_function(parser_t &parser, const wcstring_list_t &args, const wcstring &contents, int definition_line_offset, wcstring *out_err); #endif diff --git a/common.cpp b/common.cpp index 9d62f489d..fa5d30649 100644 --- a/common.cpp +++ b/common.cpp @@ -713,6 +713,11 @@ void debug(int level, const char *msg, ...) errno = errno_old; } +void print_stderr(const wcstring &str) +{ + fprintf(stderr, "%ls\n", str.c_str()); +} + void debug_safe(int level, const char *msg, const char *param1, const char *param2, const char *param3, const char *param4, const char *param5, const char *param6, const char *param7, const char *param8, const char *param9, const char *param10, const char *param11, const char *param12) { diff --git a/common.h b/common.h index b0646e4d8..9b88e4943 100644 --- a/common.h +++ b/common.h @@ -732,6 +732,9 @@ ssize_t read_loop(int fd, void *buff, size_t count); void debug(int level, const char *msg, ...); void debug(int level, const wchar_t *msg, ...); +/** Writes a string to stderr, followed by a newline */ +void print_stderr(const wcstring &str); + /** Replace special characters with backslash escape sequences. Newline is replaced with \n, etc. diff --git a/exec.cpp b/exec.cpp index c08933a10..8d6cfe043 100644 --- a/exec.cpp +++ b/exec.cpp @@ -1430,8 +1430,7 @@ void exec_job(parser_t &parser, job_t *j) if (g_log_forks) { const wchar_t *file = reader_current_filename(); - const wchar_t *func = parser_t::principal_parser().is_function(); - printf("fork #%d: forking for '%s' in '%ls:%ls'\n", g_fork_count, actual_cmd, file ? file : L"", func ? func : L"?"); + printf("fork #%d: forking for '%s' in '%ls'\n", g_fork_count, actual_cmd, file ? file : L""); fprintf(stderr, "IO chain for %s:\n", actual_cmd); io_print(process_net_io_chain); diff --git a/function.cpp b/function.cpp index 8421a4daa..5fd376974 100644 --- a/function.cpp +++ b/function.cpp @@ -175,7 +175,7 @@ function_info_t::function_info_t(const function_info_t &data, const wchar_t *fil { } -void function_add(const function_data_t &data, const parser_t &parser) +void function_add(const function_data_t &data, const parser_t &parser, int definition_line_offset) { ASSERT_IS_MAIN_THREAD(); @@ -189,13 +189,7 @@ void function_add(const function_data_t &data, const parser_t &parser) /* Create and store a new function */ const wchar_t *filename = reader_current_filename(); - int def_offset = -1; - if (parser.current_block() != NULL) - { - def_offset = parser.line_number_of_character_at_offset(parser.current_block()->tok_pos); - } - - const function_map_t::value_type new_pair(data.name, function_info_t(data, filename, def_offset, is_autoload)); + const function_map_t::value_type new_pair(data.name, function_info_t(data, filename, definition_line_offset, is_autoload)); loaded_functions.insert(new_pair); /* Add event handlers */ diff --git a/function.h b/function.h index 847c818b0..efef275be 100644 --- a/function.h +++ b/function.h @@ -92,8 +92,8 @@ public: */ void function_init(); -/** Add a function. */ -void function_add(const function_data_t &data, const parser_t &parser); +/** Add a function. definition_line_offset is the line number of the function's definition within its source file */ +void function_add(const function_data_t &data, const parser_t &parser, int definition_line_offset = 0); /** Removes a function from our internal table, returning true if it was found and false if not */ bool function_remove_ignore_autoload(const wcstring &name); diff --git a/parse_execution.cpp b/parse_execution.cpp index 47a1d8579..0dfb85a0f 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -381,8 +381,9 @@ parse_execution_result_t parse_execution_context_t::run_function_statement(const if (result == parse_execution_success) { const wcstring contents_str = get_source(contents); + int definition_line_offset = this->line_offset_of_node_at_offset(this->get_offset(contents)); wcstring error_str; - int err = define_function(*parser, argument_list, contents_str, &error_str); + int err = define_function(*parser, argument_list, contents_str, definition_line_offset, &error_str); proc_set_last_status(err); if (! error_str.empty()) @@ -1523,29 +1524,29 @@ parse_execution_result_t parse_execution_context_t::eval_node_at_offset(node_off return status; } -int parse_execution_context_t::get_current_line_number() +int parse_execution_context_t::line_offset_of_node_at_offset(node_offset_t requested_index) { /* If we're not executing anything, return -1 */ - if (this->executing_node_idx == NODE_OFFSET_INVALID) + if (requested_index == NODE_OFFSET_INVALID) { return -1; } /* If for some reason we're executing a node without source, return -1 */ - const parse_node_t &node = tree.at(this->executing_node_idx); + const parse_node_t &node = tree.at(requested_index); if (! node.has_source()) { return -1; } /* Count the number of newlines, leveraging our cache */ - const size_t offset = tree.at(this->executing_node_idx).source_start; + const size_t offset = tree.at(requested_index).source_start; assert(offset <= src.size()); /* Easy hack to handle 0 */ if (offset == 0) { - return 1; + return 0; } /* We want to return (one plus) the number of newlines at offsets less than the given offset. cached_lineno_count is the number of newlines at indexes less than cached_lineno_offset. */ @@ -1575,5 +1576,17 @@ int parse_execution_context_t::get_current_line_number() } cached_lineno_offset = offset; } - return cached_lineno_count + 1; + return cached_lineno_count; +} + +int parse_execution_context_t::get_current_line_number() +{ + int line_number = -1; + int line_offset = this->line_offset_of_node_at_offset(this->executing_node_idx); + if (line_offset >= 0) + { + /* The offset is 0 based; the number is 1 based */ + line_number = line_offset + 1; + } + return line_number; } diff --git a/parse_execution.h b/parse_execution.h index 91c32c99b..be04c1b68 100644 --- a/parse_execution.h +++ b/parse_execution.h @@ -107,13 +107,16 @@ private: parse_execution_result_t run_job_list(const parse_node_t &job_list_node, const block_t *associated_block); parse_execution_result_t populate_job_from_job_node(job_t *j, const parse_node_t &job_node, const block_t *associated_block); + /* Returns the line number of the node at the given index, indexed from 0. Not const since it touches cached_lineno_offset */ + int line_offset_of_node_at_offset(node_offset_t idx); + public: parse_execution_context_t(const parse_node_tree_t &t, const wcstring &s, parser_t *p, int initial_eval_level); /* Returns the current eval level */ int current_eval_level() const { return eval_level; } - /* Returns the current line number. Not const since it touches cached_lineno_offset */ + /* Returns the current line number, indexed from 1. Not const since it touches cached_lineno_offset */ int get_current_line_number(); /* Start executing at the given node offset. Returns 0 if there was no error, 1 if there was an error */ diff --git a/parser.cpp b/parser.cpp index 9db079032..25f2619e9 100644 --- a/parser.cpp +++ b/parser.cpp @@ -242,7 +242,12 @@ void parser_t::push_block(block_t *new_current) { const enum block_type_t type = new_current->type(); new_current->src_lineno = parser_t::get_lineno(); - new_current->src_filename = parser_t::current_filename()?intern(parser_t::current_filename()):0; + + const wchar_t *filename = parser_t::current_filename(); + if (filename != NULL) + { + new_current->src_filename = intern(filename); + } const block_t *old_current = this->current_block(); if (old_current && old_current->skip) @@ -325,6 +330,27 @@ const wchar_t *parser_t::get_block_desc(int block) const return _(UNKNOWN_BLOCK); } +wcstring parser_t::block_stack_description() const +{ + wcstring result; + size_t idx = this->block_count(); + size_t spaces = 0; + while (idx--) + { + if (spaces > 0) + { + result.push_back(L'\n'); + } + for (size_t j=0; j < spaces; j++) + { + result.push_back(L' '); + } + result.append(this->block_at_index(idx)->description()); + spaces++; + } + return result; +} + const block_t *parser_t::block_at_index(size_t idx) const { /* 0 corresponds to the last element in our vector */ @@ -732,6 +758,11 @@ const wchar_t *parser_t::is_function() const result = fb->name.c_str(); break; } + else if (b->type() == SOURCE) + { + /* If a function sources a file, obviously that function's offset doesn't contribute */ + break; + } } return result; } @@ -743,6 +774,14 @@ int parser_t::get_lineno() const if (! execution_contexts.empty()) { lineno = execution_contexts.back()->get_current_line_number(); + + /* If we are executing a function, we have to add in its offset */ + const wchar_t *function_name = is_function(); + if (function_name != NULL) + { + lineno += function_get_definition_offset(function_name); + } + } return lineno; } @@ -764,12 +803,16 @@ const wchar_t *parser_t::current_filename() const for (size_t i=0; i < this->block_count(); i++) { const block_t *b = this->block_at_index(i); - /* Note that we deliberately skip FUNCTION_CALL_NO_SHADOW here, because the only such functions in wide use are '.' and eval, and we don't want to report those */ - if (b->type() == FUNCTION_CALL) + if (b->type() == FUNCTION_CALL || b->type() == FUNCTION_CALL_NO_SHADOW) { const function_block_t *fb = static_cast(b); return function_get_definition_file(fb->name); } + else if (b->type() == SOURCE) + { + const source_block_t *sb = static_cast(b); + return sb->source_file; + } } /* We query a global array for the current file name, but only do that if we are the principal parser */ @@ -1045,6 +1088,8 @@ int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum bl return 1; } + //print_stderr(block_stack_description()); + /* Determine the initial eval level. If this is the first context, it's -1; otherwise it's the eval level of the top context. This is sort of wonky because we're stitching together a global notion of eval level from these separate objects. A better approach would be some profile object that all contexts share, and that tracks the eval levels on its own. */ int exec_eval_level = (execution_contexts.empty() ? -1 : execution_contexts.back()->current_eval_level()); @@ -1395,7 +1440,6 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro block_t::block_t(block_type_t t) : block_type(t), skip(), - had_command(), tok_pos(), node_offset(NODE_OFFSET_INVALID), loop_status(), @@ -1411,6 +1455,83 @@ block_t::~block_t() { } +wcstring block_t::description() const +{ + wcstring result; + switch (this->type()) + { + case WHILE: + result.append(L"while"); + break; + + case FOR: + result.append(L"for"); + break; + + case IF: + result.append(L"if"); + break; + + case FUNCTION_DEF: + result.append(L"function_def"); + break; + + case FUNCTION_CALL: + result.append(L"function_call"); + break; + + case FUNCTION_CALL_NO_SHADOW: + result.append(L"function_call_no_shadow"); + break; + + case SWITCH: + result.append(L"switch"); + break; + + case FAKE: + result.append(L"fake"); + break; + + case SUBST: + result.append(L"substitution"); + break; + + case TOP: + result.append(L"top"); + break; + + case BEGIN: + result.append(L"begin"); + break; + + case SOURCE: + result.append(L"source"); + break; + + case EVENT: + result.append(L"event"); + break; + + case BREAKPOINT: + result.append(L"breakpoint"); + break; + + default: + append_format(result, L"unknown type %ld", (long)this->type()); + break; + } + + if (this->src_lineno >= 0) + { + append_format(result, L" (line %d)", this->src_lineno); + } + if (this->src_filename != NULL) + { + append_format(result, L" (file %ls)", this->src_filename); + } + return result; +} + /* Various block constructors */ if_block_t::if_block_t() : block_t(IF) diff --git a/parser.h b/parser.h index 4011b95da..675fe6afd 100644 --- a/parser.h +++ b/parser.h @@ -84,8 +84,10 @@ public: return this->block_type; } + /** Description of the block, for debugging */ + wcstring description() const; + bool skip; /**< Whether execution of the commands in this block should be skipped */ - bool had_command; /**< Set to non-zero once a command has been executed in this block */ int tok_pos; /**< The start index of the block */ node_offset_t node_offset; /* Offset of the node */ @@ -96,7 +98,7 @@ public: /** The job that is currently evaluated in the specified block. */ job_t *job; - /** Name of file that created this block */ + /** Name of file that created this block. This string is intern'd. */ const wchar_t *src_filename; /** Line number where this block was created */ @@ -272,6 +274,12 @@ private: /** The list of blocks, allocated with new. It's our responsibility to delete these */ std::vector block_stack; + /** Gets a description of the block stack, for debugging */ + wcstring block_stack_description() const; + + /** List of profile items, allocated with new */ + std::vector profile_items; + /* No copying allowed */ parser_t(const parser_t&); parser_t& operator=(const parser_t&); @@ -287,9 +295,6 @@ private: /** Adds a job to the beginning of the job list. */ void job_add(job_t *job); -public: - std::vector profile_items; - /** Returns the name of the currently evaluated function if we are currently evaluating a function, null otherwise. This is tested by @@ -298,6 +303,8 @@ public: */ const wchar_t *is_function() const; +public: + /** Get the "principal" parser, whatever that is */ static parser_t &principal_parser(); From 2c19ca0dbf8c4875f92f50359f3d15b0c7e5eeaf Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Mar 2014 16:49:31 -0700 Subject: [PATCH 123/145] Fix for issue where pager contents may stay around if you executed a command with pager contents visible --- reader.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reader.cpp b/reader.cpp index 069771c17..7bbac43a9 100644 --- a/reader.cpp +++ b/reader.cpp @@ -3427,6 +3427,9 @@ const wchar_t *reader_readline(void) break; } + /* The user may have hit return with pager contents, but while not navigating them. Clear the pager in that event. */ + clear_pager(); + /* We only execute the command line */ editable_line_t *el = &data->command_line; From 1305c02579a3b4976ddbd964cf174b71a36b8e41 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 16 Mar 2014 22:06:32 -0700 Subject: [PATCH 124/145] Rewrite parser_t::current_line() to respect new parser --- parse_execution.cpp | 14 ++++ parse_execution.h | 6 ++ parser.cpp | 151 +++++++++----------------------------------- 3 files changed, 50 insertions(+), 121 deletions(-) diff --git a/parse_execution.cpp b/parse_execution.cpp index 0dfb85a0f..127309a8b 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -1590,3 +1590,17 @@ int parse_execution_context_t::get_current_line_number() } return line_number; } + +int parse_execution_context_t::get_current_source_offset() const +{ + int result = -1; + if (executing_node_idx != NODE_OFFSET_INVALID) + { + const parse_node_t &node = tree.at(executing_node_idx); + if (node.has_source()) + { + result = static_cast(node.source_start); + } + } + return result; +} diff --git a/parse_execution.h b/parse_execution.h index be04c1b68..cb2ff65f9 100644 --- a/parse_execution.h +++ b/parse_execution.h @@ -119,6 +119,12 @@ public: /* Returns the current line number, indexed from 1. Not const since it touches cached_lineno_offset */ int get_current_line_number(); + /* Returns the source offset, or -1 */ + int get_current_source_offset() const; + + /* Returns the source string */ + const wcstring &get_source() const { return src; } + /* Start executing at the given node offset. Returns 0 if there was no error, 1 if there was an error */ parse_execution_result_t eval_node_at_offset(node_offset_t offset, const block_t *associated_block, const io_chain_t &io); diff --git a/parser.cpp b/parser.cpp index 25f2619e9..b361fe494 100644 --- a/parser.cpp +++ b/parser.cpp @@ -823,149 +823,58 @@ const wchar_t *parser_t::current_filename() const return NULL; } -/** - Calculates the on-screen width of the specified substring of the - specified string. This function takes into account the width and - alignment of the tab character, but other wise behaves like - repeatedly calling wcwidth. -*/ -static int printed_width(const wchar_t *str, int len) -{ - int res=0; - int i; - - CHECK(str, 0); - - for (i=0; str[i] && iget_current_source_offset(); + if (source_offset < 0) + { + return wcstring(); } - file = parser_t::current_filename(); - whole_str = tok_string(current_tokenizer); - line = whole_str; + const int lineno = this->get_lineno(); + const wchar_t *file = this->current_filename(); - if (!line) - return L""; + wcstring prefix; - - /* - Calculate line number, line offset, etc. - */ - for (i=0; i= 0); + parse_error_t empty_error = {}; + empty_error.source_start = source_offset; + + wcstring line_info = empty_error.describe_with_prefix(context->get_source(), prefix, skip_caret); + if (! line_info.empty()) { - offset=0; + line_info.push_back(L'\n'); } -// debug( 1, L"Current pos %d, line pos %d, file_length %d, is_interactive %d, offset %d\n", current_tokenizer_pos, current_line_pos, wcslen(whole_str), is_interactive, offset); - /* - Skip printing character position if we are in interactive mode - and the error was on the first character of the line. - */ - if (!get_is_interactive() || is_function() || (current_line_width!=0)) - { - // Workaround since it seems impossible to print 0 copies of a character using %*lc - if (offset+current_line_width) - { - append_format(lineinfo, - L"%ls\n%*lc^\n", - line, - offset+current_line_width, - L' '); - } - else - { - append_format(lineinfo, - L"%ls\n^\n", - line); - } - } - - free((void *)line); - parser_t::stack_trace(0, lineinfo); - - return lineinfo; + parser_t::stack_trace(0, line_info); + return line_info; } From 1c58b6d83e36f014189461a5d4a23fa590f66b45 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Mon, 17 Mar 2014 08:45:25 -0700 Subject: [PATCH 125/145] Rewrite parser_t::eval_args to use new AST parser --- complete.cpp | 2 +- fish_tests.cpp | 9 +++++ parser.cpp | 90 ++++++++++++++++---------------------------------- parser.h | 11 +++--- 4 files changed, 43 insertions(+), 69 deletions(-) diff --git a/complete.cpp b/complete.cpp index 9b8d5c0b1..648824ecf 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1249,7 +1249,7 @@ void completer_t::complete_from_args(const wcstring &str, if (! is_autosuggest) proc_push_interactive(0); - parser.eval_args(args.c_str(), possible_comp); + parser.eval_args(args, possible_comp); if (! is_autosuggest) proc_pop_interactive(); diff --git a/fish_tests.cpp b/fish_tests.cpp index 5b7bcea6d..35b1a7ff3 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -620,6 +620,15 @@ static void test_parser() /* This is disabled since it produces a long backtrace. We should find a way to either visually compress the backtrace, or disable error spewing */ parser_t::principal_parser().eval(L"function recursive1 ; recursive2 ; end ; function recursive2 ; recursive1 ; end ; recursive1; ", io_chain_t(), TOP); #endif + + say(L"Testing eval_args"); + completion_list_t comps; + parser_t::principal_parser().eval_args(L"alpha 'beta gamma' delta", comps); + do_test(comps.size() == 3); + do_test(comps.at(0).completion == L"alpha"); + do_test(comps.at(1).completion == L"beta gamma"); + do_test(comps.at(2).completion == L"delta"); + } /* Wait a while and then SIGINT the main thread */ diff --git a/parser.cpp b/parser.cpp index b361fe494..872f99fc4 100644 --- a/parser.cpp +++ b/parser.cpp @@ -546,7 +546,8 @@ void parser_t::print_errors_stderr() } } -void parser_t::eval_args(const wchar_t *line, std::vector &args) + +void parser_t::eval_args(const wcstring &arg_list_src, std::vector &output_arg_list) { expand_flags_t eflags = 0; if (! show_errors) @@ -554,77 +555,44 @@ void parser_t::eval_args(const wchar_t *line, std::vector &args) if (this->parser_type != PARSER_TYPE_GENERAL) eflags |= EXPAND_SKIP_CMDSUBST; - bool do_loop=1; - - if (! line) return; - - // PCA we need to suppress calling proc_push_interactive off of the main thread. + /* Suppress calling proc_push_interactive off of the main thread. */ if (this->parser_type == PARSER_TYPE_GENERAL) - proc_push_interactive(0); - - tokenizer_t tok(line, (show_errors ? 0 : TOK_SQUASH_ERRORS)); - - /* - eval_args may be called while evaulating another command, so we - save the previous tokenizer and restore it on exit - */ - scoped_push tokenizer_push(¤t_tokenizer, &tok); - scoped_push tokenizer_pos_push(¤t_tokenizer_pos, 0); - - error_code=0; - - for (; do_loop && tok_has_next(&tok) ; tok_next(&tok)) { - current_tokenizer_pos = tok_get_pos(&tok); - switch (tok_last_type(&tok)) + proc_push_interactive(0); + } + + /* Parse the string as an argument list */ + parse_node_tree_t tree; + if (! parse_tree_from_string(arg_list_src, parse_flag_none, &tree, NULL /* errors */, symbol_argument_list)) + { + /* Failed to parse. Here we expect to have reported any errors in test_args */ + return; + } + + /* Get the root argument list */ + assert(! tree.empty()); + const parse_node_t *arg_list = &tree.at(0); + assert(arg_list->type == symbol_argument_list); + + /* Extract arguments from it */ + while (arg_list != NULL) + { + const parse_node_t *arg_node = tree.next_node_in_node_list(*arg_list, symbol_argument, &arg_list); + if (arg_node != NULL) { - case TOK_STRING: + const wcstring arg_src = arg_node->get_source(arg_list_src); + if (expand_string(arg_src, output_arg_list, eflags) == EXPAND_ERROR) { - const wcstring tmp = tok_last(&tok); - if (expand_string(tmp, args, eflags) == EXPAND_ERROR) - { - err_pos=tok_get_pos(&tok); - do_loop=0; - } - break; - } - - case TOK_END: - { - break; - } - - case TOK_ERROR: - { - if (show_errors) - error(SYNTAX_ERROR, - tok_get_pos(&tok), - TOK_ERR_MSG, - tok_last(&tok)); - - do_loop=0; - break; - } - - default: - { - if (show_errors) - error(SYNTAX_ERROR, - tok_get_pos(&tok), - UNEXPECTED_TOKEN_ERR_MSG, - tok_get_desc(tok_last_type(&tok))); - - do_loop=0; + /* Failed to expand a string */ break; } } } - if (show_errors) - this->print_errors_stderr(); - if (this->parser_type == PARSER_TYPE_GENERAL) + { proc_pop_interactive(); + } } void parser_t::stack_trace(size_t block_idx, wcstring &buff) const diff --git a/parser.h b/parser.h index 675fe6afd..3e4a431f3 100644 --- a/parser.h +++ b/parser.h @@ -340,15 +340,12 @@ public: /** Evaluate line as a list of parameters, i.e. tokenize it and perform parameter expansion and cmdsubst execution on the tokens. The output is inserted into output. + Errors are ignored. - \param line Line to evaluate - \param output List to insert output to + \param arg_src String to evaluate as an argument list + \param output List to insert output into */ - /** - \param line Line to evaluate - \param output List to insert output to - */ - void eval_args(const wchar_t *line, std::vector &output); + void eval_args(const wcstring &arg_src, std::vector &output); /** Sets the current evaluation error. This function should only be used by libraries that are called by From d659e55646257128414af82866c913e14230b5b6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 18 Mar 2014 08:50:27 -0700 Subject: [PATCH 126/145] Correct the last keyword enum to reflect the actual last keyword --- parse_constants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse_constants.h b/parse_constants.h index 8ff96407f..1e7d0e0d1 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -92,7 +92,7 @@ enum parse_keyword_t parse_keyword_builtin, parse_keyword_exec, - LAST_KEYWORD = parse_keyword_builtin + LAST_KEYWORD = parse_keyword_exec }; /* Statement decorations. This matches the order of productions in decorated_statement */ From e780637cf42bc8d26e0e963f5ff84b11007459c5 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 18 Mar 2014 08:51:23 -0700 Subject: [PATCH 127/145] Add some tests for parse_util_detect_errors_in_argument --- fish_tests.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ parse_util.cpp | 2 ++ parse_util.h | 5 +++++ 3 files changed, 66 insertions(+) diff --git a/fish_tests.cpp b/fish_tests.cpp index 35b1a7ff3..8e7c09ebb 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -511,6 +511,20 @@ static void test_iothread(void) delete int_ptr; } +static parser_test_error_bits_t detect_argument_errors(const wcstring &src) +{ + parse_node_tree_t tree; + if (! parse_tree_from_string(src, parse_flag_none, &tree, NULL, symbol_argument_list)) + { + return PARSER_TEST_ERROR; + } + + assert(! tree.empty()); + const parse_node_t *first_arg = tree.next_node_in_node_list(tree.at(0), symbol_argument, NULL); + assert(first_arg != NULL); + return parse_util_detect_errors_in_argument(*first_arg, first_arg->get_source(src)); +} + /** Test the parser */ @@ -592,12 +606,57 @@ static void test_parser() err(L"'and' command in pipeline not reported as error"); } + if (! parse_util_detect_errors(L"cat | or cat")) + { + err(L"'or' command in pipeline not reported as error"); + } + if (! parse_util_detect_errors(L"cat | exec") || ! parse_util_detect_errors(L"exec | cat")) { err(L"'exec' command in pipeline not reported as error"); } + if (detect_argument_errors(L"foo")) + { + err(L"simple argument reported as error"); + } + if (detect_argument_errors(L"''")) + { + err(L"Empty string reported as error"); + } + + + if (! (detect_argument_errors(L"foo$$") & PARSER_TEST_ERROR)) + { + err(L"Bad variable expansion not reported as error"); + } + + if (! (detect_argument_errors(L"foo$@") & PARSER_TEST_ERROR)) + { + err(L"Bad variable expansion not reported as error"); + } + + /* Within command substitutions, we should be able to detect everything that parse_util_detect_errors can detect */ + if (! (detect_argument_errors(L"foo(cat | or cat)") & PARSER_TEST_ERROR)) + { + err(L"Bad command substitution not reported as error"); + } + + if (! (detect_argument_errors(L"foo\\xFF9") & PARSER_TEST_ERROR)) + { + err(L"Bad escape not reported as error"); + } + + if (! (detect_argument_errors(L"foo(echo \\xFF9)") & PARSER_TEST_ERROR)) + { + err(L"Bad escape in command substitution not reported as error"); + } + + if (! (detect_argument_errors(L"foo(echo (echo (echo \\xFF9)))") & PARSER_TEST_ERROR)) + { + err(L"Bad escape in nested command substitution not reported as error"); + } say(L"Testing basic evaluation"); diff --git a/parse_util.cpp b/parse_util.cpp index 2fcb24aa3..e7c1873de 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1091,6 +1091,8 @@ void parse_util_expand_variable_error(const parse_node_t &node, const wcstring & */ parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t &node, const wcstring &arg_src, parse_error_list_t *out_errors) { + assert(node.type == symbol_argument); + int err=0; wchar_t *paran_begin, *paran_end; diff --git a/parse_util.h b/parse_util.h index cf885e050..e6ba16536 100644 --- a/parse_util.h +++ b/parse_util.h @@ -171,6 +171,11 @@ std::vector parse_util_compute_indents(const wcstring &src); parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, parse_error_list_t *out_errors = NULL); +/** + Test if this argument contains any errors. Detected errors include syntax errors in command substitutions, improperly escaped characters and improper use of the variable expansion operator. + + This does NOT currently detect unterminated quotes. +*/ parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t &node, const wcstring &arg_src, parse_error_list_t *out_errors = NULL); #endif From e5ef45e4c04b6126ea74c4010b2d8fe1c0b06cca Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 18 Mar 2014 14:14:32 -0700 Subject: [PATCH 128/145] Rewrite parser_t::test_args and parser_t::eval_args to use new parser --- builtin_complete.cpp | 15 +++++-- complete.cpp | 2 +- fish_tests.cpp | 2 +- parse_tree.cpp | 6 +-- parse_tree.h | 2 +- parse_util.cpp | 23 ++++++++-- parser.cpp | 99 +++++++++++++++++++------------------------- parser.h | 9 ++-- 8 files changed, 81 insertions(+), 77 deletions(-) diff --git a/builtin_complete.cpp b/builtin_complete.cpp index 6e395f946..c2fb66376 100644 --- a/builtin_complete.cpp +++ b/builtin_complete.cpp @@ -467,15 +467,22 @@ static int builtin_complete(parser_t &parser, wchar_t **argv) { if (comp && wcslen(comp)) { - if (parser.test_args(comp, 0, 0)) + wcstring prefix; + if (argv[0]) + { + prefix.append(argv[0]); + prefix.append(L": "); + } + + wcstring err_text; + if (parser.detect_errors_in_argument_list(comp, &err_text, prefix.c_str())) { append_format(stderr_buffer, L"%ls: Completion '%ls' contained a syntax error\n", argv[0], comp); - - parser.test_args(comp, &stderr_buffer, argv[0]); - + stderr_buffer.append(err_text); + stderr_buffer.push_back(L'\n'); res = true; } } diff --git a/complete.cpp b/complete.cpp index 648824ecf..89655c76c 100644 --- a/complete.cpp +++ b/complete.cpp @@ -1249,7 +1249,7 @@ void completer_t::complete_from_args(const wcstring &str, if (! is_autosuggest) proc_push_interactive(0); - parser.eval_args(args, possible_comp); + parser.expand_argument_list(args, possible_comp); if (! is_autosuggest) proc_pop_interactive(); diff --git a/fish_tests.cpp b/fish_tests.cpp index 8e7c09ebb..7b2c37732 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -682,7 +682,7 @@ static void test_parser() say(L"Testing eval_args"); completion_list_t comps; - parser_t::principal_parser().eval_args(L"alpha 'beta gamma' delta", comps); + parser_t::principal_parser().expand_argument_list(L"alpha 'beta gamma' delta", comps); do_test(comps.size() == 3); do_test(comps.at(0).completion == L"alpha"); do_test(comps.at(1).completion == L"beta gamma"); diff --git a/parse_tree.cpp b/parse_tree.cpp index ae8e42d02..caba268a1 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -14,7 +14,7 @@ static bool production_is_empty(const production_t *production) } /** Returns a string description of this parse error */ -wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring &prefix, bool skip_caret) const +wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring &prefix, bool is_interactive, bool skip_caret) const { wcstring result = text; if (! skip_caret && source_start < src.size() && source_start + source_length <= src.size()) @@ -44,7 +44,7 @@ wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring assert(source_start >= line_start); // Don't include the caret and line if we're interactive this is the first line, because then it's obvious - bool skip_caret = (get_is_interactive() && source_start == 0); + bool skip_caret = (is_interactive && source_start == 0); if (! skip_caret) { @@ -91,7 +91,7 @@ wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring wcstring parse_error_t::describe(const wcstring &src) const { - return this->describe_with_prefix(src, wcstring(), false); + return this->describe_with_prefix(src, wcstring(), get_is_interactive(), false); } wcstring parse_errors_description(const parse_error_list_t &errors, const wcstring &src, const wchar_t *prefix) diff --git a/parse_tree.h b/parse_tree.h index f6406be4f..99c3bf299 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -37,7 +37,7 @@ struct parse_error_t wcstring describe(const wcstring &src) const; /** Return a string describing the error, suitable for presentation to the user, with the given prefix. If skip_caret is false, the offending line with a caret is printed as well */ - wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool skip_caret) const; + wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool is_interactive, bool skip_caret) const; }; typedef std::vector parse_error_list_t; diff --git a/parse_util.cpp b/parse_util.cpp index e7c1873de..dda4f6a75 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1135,12 +1135,19 @@ parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t tmp.push_back(INTERNAL_SEPARATOR); tmp.append(paran_end+1); - parse_error_list_t errors; - err |= parse_util_detect_errors(subst, &errors); + parse_error_list_t subst_errors; + err |= parse_util_detect_errors(subst, &subst_errors); + + /* Our command substitution produced error offsets relative to its source. Tweak the offsets of the errors in the command substitution to account for both its offset within the string, and the offset of the node */ + size_t error_offset = (paran_begin + 1 - arg_cpy) + node.source_start; + for (size_t i=0; i < subst_errors.size(); i++) + { + subst_errors.at(i).source_start += error_offset; + } + if (out_errors != NULL) { - /* Todo: have to tweak the offsets of the errors in the command substitution */ - out_errors->insert(out_errors->end(), errors.begin(), errors.end()); + out_errors->insert(out_errors->end(), subst_errors.begin(), subst_errors.end()); } free(arg_cpy); @@ -1239,6 +1246,7 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars // Verify 'or' and 'and' not used inside pipelines // Verify pipes via parser_is_pipe_forbidden // Verify return only within a function + // Verify no variable expansions if (! errored) { @@ -1286,6 +1294,13 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars errored = append_syntax_error(&parse_errors, node, ILLEGAL_CMD_ERR_MSG, command.c_str()); } + // Check that it doesn't contain a variable + // Note this check is clumsy (it doesn't allow for escaping) but it matches what we do in parse_execution + if (command.find(L'$') != wcstring::npos) + { + errored = append_syntax_error(&parse_errors, node, ILLEGAL_CMD_ERR_MSG, command.c_str()); + } + // Check that pipes are sound if (! errored && parser_is_pipe_forbidden(command) && is_in_pipeline) { diff --git a/parser.cpp b/parser.cpp index 872f99fc4..16dcd9710 100644 --- a/parser.cpp +++ b/parser.cpp @@ -547,7 +547,7 @@ void parser_t::print_errors_stderr() } -void parser_t::eval_args(const wcstring &arg_list_src, std::vector &output_arg_list) +void parser_t::expand_argument_list(const wcstring &arg_list_src, std::vector &output_arg_list) { expand_flags_t eflags = 0; if (! show_errors) @@ -828,14 +828,15 @@ wcstring parser_t::current_line() } } - bool skip_caret = get_is_interactive() && ! is_function(); + bool is_interactive = get_is_interactive(); + bool skip_caret = is_interactive && ! is_function(); /* Use an error with empty text */ assert(source_offset >= 0); parse_error_t empty_error = {}; empty_error.source_start = source_offset; - wcstring line_info = empty_error.describe_with_prefix(context->get_source(), prefix, skip_caret); + wcstring line_info = empty_error.describe_with_prefix(context->get_source(), prefix, is_interactive, skip_caret); if (! line_info.empty()) { line_info.push_back(L'\n'); @@ -1206,69 +1207,52 @@ int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wcha } -int parser_t::test_args(const wchar_t * buff, wcstring *out, const wchar_t *prefix) +bool parser_t::detect_errors_in_argument_list(const wcstring &arg_list_src, wcstring *out, const wchar_t *prefix) { - int do_loop = 1; - int err = 0; + bool errored = false; + parse_error_list_t errors; - CHECK(buff, 1); - - tokenizer_t tok(buff, 0); - scoped_push tokenizer_push(¤t_tokenizer, &tok); - scoped_push tokenizer_pos_push(¤t_tokenizer_pos); - - for (; do_loop && tok_has_next(&tok); tok_next(&tok)) + /* Use empty string for the prefix if it's NULL */ + if (prefix == NULL) { - current_tokenizer_pos = tok_get_pos(&tok); - switch (tok_last_type(&tok)) + prefix = L""; + } + + /* Parse the string as an argument list */ + parse_node_tree_t tree; + if (! parse_tree_from_string(arg_list_src, parse_flag_none, &tree, &errors, symbol_argument_list)) + { + /* Failed to parse. */ + errored = true; + } + + if (! errored) + { + /* Get the root argument list */ + assert(! tree.empty()); + const parse_node_t *arg_list = &tree.at(0); + assert(arg_list->type == symbol_argument_list); + + /* Extract arguments from it */ + while (arg_list != NULL && ! errored) { - - case TOK_STRING: + const parse_node_t *arg_node = tree.next_node_in_node_list(*arg_list, symbol_argument, &arg_list); + if (arg_node != NULL) { - err |= parser_test_argument(tok_last(&tok), out, prefix, tok_get_pos(&tok)); - break; - } - - case TOK_END: - { - break; - } - - case TOK_ERROR: - { - if (out) + const wcstring arg_src = arg_node->get_source(arg_list_src); + if (parse_util_detect_errors_in_argument(*arg_node, arg_src, &errors)) { - error(SYNTAX_ERROR, - tok_get_pos(&tok), - TOK_ERR_MSG, - tok_last(&tok)); - print_errors(*out, prefix); + errored = true; } - err=1; - do_loop=0; - break; - } - - default: - { - if (out) - { - error(SYNTAX_ERROR, - tok_get_pos(&tok), - UNEXPECTED_TOKEN_ERR_MSG, - tok_get_desc(tok_last_type(&tok))); - print_errors(*out, prefix); - } - err=1; - do_loop=0; - break; } } } - error_code=0; - - return err; + if (! errors.empty() && out != NULL) + { + out->assign(errors.at(0).describe_with_prefix(arg_list_src, prefix, false /* not interactive */, false /* don't skip caret */)); + } + return errored; } // helper type used in parser::test below @@ -1290,7 +1274,8 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro size_t which_line = 1 + std::count(src.begin(), src.begin() + err.source_start, L'\n'); // Don't include the caret if we're interactive, this is the first line of text, and our source is at its beginning, because then it's obvious - bool skip_caret = (get_is_interactive() && which_line == 1 && err.source_start == 0); + bool is_interactive = get_is_interactive(); + bool skip_caret = (is_interactive && which_line == 1 && err.source_start == 0); wcstring prefix; @@ -1304,7 +1289,7 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro prefix = L"fish: "; } - const wcstring description = err.describe_with_prefix(src, prefix, skip_caret); + const wcstring description = err.describe_with_prefix(src, prefix, is_interactive, skip_caret); if (! description.empty()) { output->append(description); diff --git a/parser.h b/parser.h index 3e4a431f3..15de1e98d 100644 --- a/parser.h +++ b/parser.h @@ -345,7 +345,7 @@ public: \param arg_src String to evaluate as an argument list \param output List to insert output into */ - void eval_args(const wcstring &arg_src, std::vector &output); + void expand_argument_list(const wcstring &arg_src, std::vector &output); /** Sets the current evaluation error. This function should only be used by libraries that are called by @@ -438,12 +438,9 @@ public: void get_backtrace(const wcstring &src, const parse_error_list_t &errors, wcstring *output) const; /** - Test if the specified string can be parsed as an argument list, - e.g. sent to eval_args. The result has the first bit set if the - string contains errors, and the second bit is set if the string - contains an unclosed block. + Detect errors in the specified string when parsed as an argument list. Returns true if an error occurred. */ - int test_args(const wchar_t * buff, wcstring *out, const wchar_t *prefix); + bool detect_errors_in_argument_list(const wcstring &arg_list_src, wcstring *out_err, const wchar_t *prefix); /** Tell the parser that the specified function may not be run if not From 4deb46290da1f89422cf1f269b516317d98822a6 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 18 Mar 2014 14:42:38 -0700 Subject: [PATCH 129/145] Remove additional dead code from old parser --- builtin.cpp | 2 +- parse_util.cpp | 14 +++++++++++- parse_util.h | 9 ++++++++ parser.cpp | 61 +------------------------------------------------- parser.h | 26 ++------------------- 5 files changed, 26 insertions(+), 86 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index ac21f13b2..4469868bb 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -3743,7 +3743,7 @@ int builtin_run(parser_t &parser, const wchar_t * const *argv, const io_chain_t if (argv[1] != 0 && !internal_help(argv[0])) { - if (argv[2] == 0 && (parser.is_help(argv[1], 0))) + if (argv[2] == 0 && (parse_util_argument_is_help(argv[1], 0))) { builtin_print_help(parser, argv[0], stdout_buffer); return STATUS_BUILTIN_OK; diff --git a/parse_util.cpp b/parse_util.cpp index dda4f6a75..f1182ac27 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -986,6 +986,18 @@ static int parser_is_pipe_forbidden(const wcstring &word) L"continue"); } +bool parse_util_argument_is_help(const wchar_t *s, int min_match) +{ + CHECK(s, 0); + + size_t len = wcslen(s); + + min_match = maxi(min_match, 3); + + return (wcscmp(L"-h", s) == 0) || + (len >= (size_t)min_match && (wcsncmp(L"--help", s, len) == 0)); +} + // Check if the first argument under the given node is --help static bool first_argument_is_help(const parse_node_tree_t &node_tree, const parse_node_t &node, const wcstring &src) { @@ -996,7 +1008,7 @@ static bool first_argument_is_help(const parse_node_tree_t &node_tree, const par // Check the first argument only const parse_node_t &arg = *arg_nodes.at(0); const wcstring first_arg_src = arg.get_source(src); - is_help = parser_t::is_help(first_arg_src.c_str(), 3); + is_help = parse_util_argument_is_help(first_arg_src.c_str(), 3); } return is_help; } diff --git a/parse_util.h b/parse_util.h index e6ba16536..c918b9b5d 100644 --- a/parse_util.h +++ b/parse_util.h @@ -150,6 +150,15 @@ void parse_util_set_argv(const wchar_t * const *argv, const wcstring_list_t &nam */ wchar_t *parse_util_unescape_wildcards(const wchar_t *in); +/** + Checks if the specified string is a help option. + + \param s the string to test + \param min_match is the minimum number of characters that must match in a long style option, i.e. the longest common prefix between --help and any other option. If less than 3, 3 will be assumed. +*/ +bool parse_util_argument_is_help(const wchar_t *s, int min_match); + + /** Calculates information on the parameter at the specified index. diff --git a/parser.cpp b/parser.cpp index 16dcd9710..cb3b913f5 100644 --- a/parser.cpp +++ b/parser.cpp @@ -381,10 +381,6 @@ void parser_t::forbid_function(const wcstring &function) void parser_t::allow_function() { - /* - if( al_peek( &forbidden_function) ) - debug( 2, L"Allow %ls\n", al_peek( &forbidden_function) ); - */ forbidden_function.pop_back(); } @@ -846,25 +842,6 @@ wcstring parser_t::current_line() return line_info; } - -const wchar_t *parser_t::get_buffer() const -{ - return tok_string(current_tokenizer); -} - - -int parser_t::is_help(const wchar_t *s, int min_match) -{ - CHECK(s, 0); - - size_t len = wcslen(s); - - min_match = maxi(min_match, 3); - - return (wcscmp(L"-h", s) == 0) || - (len >= (size_t)min_match && (wcsncmp(L"--help", s, len) == 0)); -} - void parser_t::job_add(job_t *job) { assert(job != NULL); @@ -948,7 +925,7 @@ profile_item_t *parser_t::create_profile_item() } -int parser_t::eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum block_type_t block_type) +int parser_t::eval(const wcstring &cmd, const io_chain_t &io, enum block_type_t block_type) { CHECK_BLOCK(1); @@ -1055,42 +1032,6 @@ int parser_t::eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum } -int parser_t::eval(const wcstring &cmd_str, const io_chain_t &io, enum block_type_t block_type) -{ - return this->eval_new_parser(cmd_str, io, block_type); -} - - -/** - \return the block type created by the specified builtin, or -1 on error. -*/ -block_type_t parser_get_block_type(const wcstring &cmd) -{ - for (size_t i=0; block_lookup[i].desc; i++) - { - if (block_lookup[i].name && cmd == block_lookup[i].name) - { - return block_lookup[i].type; - } - } - return (block_type_t)-1; -} - -/** - \return the block command that createa the specified block type, or null on error. -*/ -const wchar_t *parser_get_block_command(int type) -{ - for (size_t i=0; block_lookup[i].desc; i++) - { - if (block_lookup[i].type == type) - { - return block_lookup[i].name; - } - } - return NULL; -} - /** Test if this argument contains any errors. Detected errors include syntax errors in command substitutions, improperly escaped diff --git a/parser.h b/parser.h index 15de1e98d..93d8e8414 100644 --- a/parser.h +++ b/parser.h @@ -278,7 +278,7 @@ private: wcstring block_stack_description() const; /** List of profile items, allocated with new */ - std::vector profile_items; + std::vector profile_items; /* No copying allowed */ parser_t(const parser_t&); @@ -319,9 +319,6 @@ public: /** Global event blocks */ event_blockage_list_t global_event_blocks; - /** Current block level io redirections */ - io_chain_t block_io; - /** Evaluate the expressions contained in cmd. @@ -332,7 +329,6 @@ public: \return 0 on success, 1 otherwise */ int eval(const wcstring &cmd_str, const io_chain_t &io, enum block_type_t block_type); - int eval_new_parser(const wcstring &cmd, const io_chain_t &io, enum block_type_t block_type); /** Evaluates a block node at the given node offset in the topmost execution context */ int eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum block_type_t block_type); @@ -384,9 +380,6 @@ public: return block_stack.size(); } - /** Get the string currently parsed */ - const wchar_t *get_buffer() const; - /** Get the list of jobs */ job_list_t &job_list() { @@ -448,29 +441,17 @@ public: of infinite recursion. */ void forbid_function(const wcstring &function); + /** Undo last call to parser_forbid_function(). */ void allow_function(); - /** - Initialize static parser data - */ - void init(); - /** Output profiling data to the given filename */ void emit_profiling(const char *path) const; - /** - This function checks if the specified string is a help option. - - \param s the string to test - \param min_match is the minimum number of characters that must match in a long style option, i.e. the longest common prefix between --help and any other option. If less than 3, 3 will be assumed. - */ - static int is_help(const wchar_t *s, int min_match); - /** Returns the file currently evaluated by the parser. This can be different than reader_current_filename, e.g. if we are evaulating a @@ -482,9 +463,6 @@ public: Write a stack trace starting at the specified block to the specified wcstring */ void stack_trace(size_t block_idx, wcstring &buff) const; - - int get_block_type(const wchar_t *cmd) const; - const wchar_t *get_block_command(int type) const; }; /* Temporary */ From c71b1684020515f342f7dfd5e31324f84e2c6294 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Thu, 20 Mar 2014 21:31:47 -0700 Subject: [PATCH 130/145] Remove current_tokenizer and current_tokenizer_pos from old parser --- parser.cpp | 177 +---------------------------------------------------- parser.h | 14 ----- 2 files changed, 1 insertion(+), 190 deletions(-) diff --git a/parser.cpp b/parser.cpp index cb3b913f5..b66f5097c 100644 --- a/parser.cpp +++ b/parser.cpp @@ -197,9 +197,7 @@ parser_t::parser_t(enum parser_type_t type, bool errors) : error_code(0), err_pos(0), cancellation_requested(false), - is_within_fish_initialization(false), - current_tokenizer(NULL), - current_tokenizer_pos(0) + is_within_fish_initialization(false) { } @@ -497,52 +495,6 @@ void parser_t::emit_profiling(const char *path) const } } -/** - Print error message to string if an error has occured while parsing - - \param target the buffer to write to - \param prefix: The string token to prefix the each line with. Usually the name of the command trying to parse something. -*/ -void parser_t::print_errors(wcstring &target, const wchar_t *prefix) -{ - CHECK(prefix,); - - if (error_code && ! err_buff.empty()) - { - int tmp; - - append_format(target, L"%ls: %ls\n", prefix, err_buff.c_str()); - - tmp = current_tokenizer_pos; - current_tokenizer_pos = err_pos; - - target.append(this->current_line()); - - current_tokenizer_pos=tmp; - } -} - -/** - Print error message to stderr if an error has occured while parsing -*/ -void parser_t::print_errors_stderr() -{ - if (error_code && ! err_buff.empty()) - { - debug(0, L"%ls", err_buff.c_str()); - int tmp; - - tmp = current_tokenizer_pos; - current_tokenizer_pos = err_pos; - - wcstring current_line = this->current_line(); - fwprintf(stderr, L"%ls", current_line.c_str()); - - current_tokenizer_pos=tmp; - } -} - - void parser_t::expand_argument_list(const wcstring &arg_list_src, std::vector &output_arg_list) { expand_flags_t eflags = 0; @@ -750,16 +702,6 @@ int parser_t::get_lineno() const return lineno; } -int parser_t::line_number_of_character_at_offset(size_t idx) const -{ - if (! current_tokenizer) - return -1; - - int result = current_tokenizer->line_number_of_character_at_offset(idx); - //assert(result == parse_util_lineno(tok_string( current_tokenizer ), idx)); - return result; -} - const wchar_t *parser_t::current_filename() const { ASSERT_IS_MAIN_THREAD(); @@ -1029,123 +971,6 @@ int parser_t::eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum job_reap(0); return result; - -} - -/** - Test if this argument contains any errors. Detected errors include - syntax errors in command substitutions, improperly escaped - characters and improper use of the variable expansion operator. -*/ -int parser_t::parser_test_argument(const wchar_t *arg, wcstring *out, const wchar_t *prefix, int offset) -{ - int err=0; - - wchar_t *paran_begin, *paran_end; - wchar_t *arg_cpy; - int do_loop = 1; - - CHECK(arg, 1); - - arg_cpy = wcsdup(arg); - - while (do_loop) - { - switch (parse_util_locate_cmdsubst(arg_cpy, - ¶n_begin, - ¶n_end, - false)) - { - case -1: - err=1; - if (out) - { - error(SYNTAX_ERROR, - offset, - L"Mismatched parenthesis"); - this->print_errors(*out, prefix); - } - free(arg_cpy); - return err; - - case 0: - do_loop = 0; - break; - - case 1: - { - - const wcstring subst(paran_begin + 1, paran_end); - wcstring tmp; - - tmp.append(arg_cpy, paran_begin - arg_cpy); - tmp.push_back(INTERNAL_SEPARATOR); - tmp.append(paran_end+1); - -// debug( 1, L"%ls -> %ls %ls", arg_cpy, subst, tmp.buff ); - - parse_error_list_t errors; - err |= parse_util_detect_errors(subst, &errors); - if (out && ! errors.empty()) - { - out->append(parse_errors_description(errors, subst, prefix)); - } - - free(arg_cpy); - arg_cpy = wcsdup(tmp.c_str()); - - break; - } - } - } - - wcstring unesc; - if (! unescape_string(arg_cpy, &unesc, UNESCAPE_SPECIAL)) - { - if (out) - { - error(SYNTAX_ERROR, - offset, - L"Invalid token '%ls'", arg_cpy); - print_errors(*out, prefix); - } - return 1; - } - else - { - /* Check for invalid variable expansions */ - const size_t unesc_size = unesc.size(); - for (size_t idx = 0; idx < unesc_size; idx++) - { - switch (unesc.at(idx)) - { - case VARIABLE_EXPAND: - case VARIABLE_EXPAND_SINGLE: - { - wchar_t next_char = (idx + 1 < unesc_size ? unesc.at(idx + 1) : L'\0'); - - if (next_char != VARIABLE_EXPAND && - next_char != VARIABLE_EXPAND_SINGLE && - ! wcsvarchr(next_char)) - { - err=1; - if (out) - { - expand_variable_error(*this, unesc, idx, offset); - print_errors(*out, prefix); - } - } - - break; - } - } - } - } - - free(arg_cpy); - - return err; - } bool parser_t::detect_errors_in_argument_list(const wcstring &arg_list_src, wcstring *out, const wchar_t *prefix) diff --git a/parser.h b/parser.h index 93d8e8414..bd9108125 100644 --- a/parser.h +++ b/parser.h @@ -259,12 +259,6 @@ private: /** Description of last error */ wcstring err_buff; - /** Pointer to the current tokenizer */ - tokenizer_t *current_tokenizer; - - /** This is the position of the beginning of the currently parsed command */ - int current_tokenizer_pos; - /** List of called functions, used to help prevent infinite recursion */ wcstring_list_t forbidden_function; @@ -284,11 +278,6 @@ private: parser_t(const parser_t&); parser_t& operator=(const parser_t&); - void skipped_exec(job_t * j); - int parser_test_argument(const wchar_t *arg, wcstring *out, const wchar_t *prefix, int offset); - void print_errors(wcstring &target, const wchar_t *prefix); - void print_errors_stderr(); - /** Create a job */ job_t *job_create(const io_chain_t &io); @@ -363,9 +352,6 @@ public: /** Returns the current line number */ int get_lineno() const; - /** Returns the line number for the character at the given index */ - int line_number_of_character_at_offset(size_t idx) const; - /** Returns the block at the given index. 0 corresponds to the innermost block. Returns NULL when idx is at or equal to the number of blocks. */ const block_t *block_at_index(size_t idx) const; block_t *block_at_index(size_t idx); From ad6367018b5d04bdba99f10ec3afcb3398fe880e Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 21 Mar 2014 17:13:33 -0700 Subject: [PATCH 131/145] Excise use of parser_t's error() functionality. Thread a parse_error_list_t through all of the expand functions, enabling them to report errors more directly. Improve aspects of error reporting for expansion failures. --- complete.cpp | 8 +-- expand.cpp | 150 +++++++++++++++++++++++++++++--------------- expand.h | 7 ++- fish_tests.cpp | 2 +- parse_constants.h | 25 ++++++++ parse_execution.cpp | 59 ++++++++++------- parse_execution.h | 4 +- parse_tree.cpp | 19 +++++- parse_tree.h | 20 ------ parse_util.cpp | 8 +-- parser.cpp | 54 ++++++++-------- parser.h | 17 +---- 12 files changed, 221 insertions(+), 152 deletions(-) diff --git a/complete.cpp b/complete.cpp index 89655c76c..7d7d7981b 100644 --- a/complete.cpp +++ b/complete.cpp @@ -967,7 +967,7 @@ void completer_t::complete_strings(const wcstring &wc_escaped, complete_flags_t flags) { wcstring tmp = wc_escaped; - if (! expand_one(tmp, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_WILDCARDS | this->expand_flags())) + if (! expand_one(tmp, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_WILDCARDS | this->expand_flags(), NULL)) return; const wchar_t *wc = parse_util_unescape_wildcards(tmp.c_str()); @@ -1146,7 +1146,7 @@ void completer_t::complete_cmd(const wcstring &str_cmd, bool use_function, bool if (use_command) { - if (expand_string(str_cmd, this->completions, ACCEPT_INCOMPLETE | EXECUTABLES_ONLY | this->expand_flags()) != EXPAND_ERROR) + if (expand_string(str_cmd, this->completions, ACCEPT_INCOMPLETE | EXECUTABLES_ONLY | this->expand_flags(), NULL) != EXPAND_ERROR) { if (this->wants_descriptions()) { @@ -1179,7 +1179,7 @@ void completer_t::complete_cmd(const wcstring &str_cmd, bool use_function, bool size_t prev_count = this->completions.size(); if (expand_string(nxt_completion, this->completions, - ACCEPT_INCOMPLETE | EXECUTABLES_ONLY | this->expand_flags()) != EXPAND_ERROR) + ACCEPT_INCOMPLETE | EXECUTABLES_ONLY | this->expand_flags(), NULL) != EXPAND_ERROR) { /* For all new completions, if COMPLETE_NO_CASE is set, then use only the last path component */ for (size_t i=prev_count; i< this->completions.size(); i++) @@ -1641,7 +1641,7 @@ void completer_t::complete_param_expand(const wcstring &sstr, bool do_file) if (expand_string(comp_str, this->completions, - flags) == EXPAND_ERROR) + flags, NULL) == EXPAND_ERROR) { debug(3, L"Error while expanding string '%ls'", comp_str); } diff --git a/expand.cpp b/expand.cpp index 1bd7e0247..bae7bde13 100644 --- a/expand.cpp +++ b/expand.cpp @@ -131,6 +131,46 @@ int expand_is_clean(const wchar_t *in) return 1; } + +/* Append a syntax error to the given error list */ +static void append_syntax_error(parse_error_list_t *errors, size_t source_start, const wchar_t *fmt, ...) +{ + if (errors != NULL) + { + parse_error_t error; + error.source_start = source_start; + error.source_length = 0; + error.code = parse_error_syntax; + + va_list va; + va_start(va, fmt); + error.text = vformat_string(fmt, va); + va_end(va); + + errors->push_back(error); + } +} + +/* Append a cmdsub error to the given error list */ +static void append_cmdsub_error(parse_error_list_t *errors, size_t source_start, const wchar_t *fmt, ...) +{ + if (errors != NULL) + { + parse_error_t error; + error.source_start = source_start; + error.source_length = 0; + error.code = parse_error_cmdsubst; + + va_list va; + va_start(va, fmt); + error.text = vformat_string(fmt, va); + va_end(va); + + errors->push_back(error); + } +} + + /** Return the environment variable value for the string starting at \c in. */ @@ -834,7 +874,7 @@ static int expand_pid(const wcstring &instr_with_sep, } -void expand_variable_error(parser_t &parser, const wcstring &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, parse_error_list_t *errors) { size_t stop_pos = token_pos+1; @@ -861,7 +901,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token if (is_var) { - parser.error(SYNTAX_ERROR, + append_syntax_error(errors, error_pos, COMPLETE_VAR_BRACKET_DESC, cpy, @@ -870,7 +910,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token } else { - parser.error(SYNTAX_ERROR, + append_syntax_error(errors, error_pos, COMPLETE_VAR_BRACKET_DESC, L"", @@ -884,7 +924,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token case INTERNAL_SEPARATOR: { - parser.error(SYNTAX_ERROR, + append_syntax_error(errors, error_pos, COMPLETE_VAR_PARAN_DESC); break; @@ -892,7 +932,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token case 0: { - parser.error(SYNTAX_ERROR, + append_syntax_error(errors, error_pos, COMPLETE_VAR_NULL_DESC); break; @@ -907,7 +947,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token else if (token_stop_char == ANY_STRING || token_stop_char == ANY_STRING_RECURSIVE) token_stop_char = L'*'; - parser.error(SYNTAX_ERROR, + append_syntax_error(errors, error_pos, (token_stop_char == L'?' ? COMPLETE_YOU_WANT_STATUS : COMPLETE_VAR_DESC), token_stop_char); @@ -919,7 +959,7 @@ void expand_variable_error(parser_t &parser, const wcstring &token, size_t token /** Parse an array slicing specification */ -static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector &idx, size_t array_size) +static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector &idx, std::vector &source_positions, size_t array_size) { wchar_t *end; @@ -942,6 +982,7 @@ static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector & } errno=0; + const size_t i1_src_pos = pos; tmp = wcstol(&in[pos], &end, 10); if ((errno) || (end == &in[pos])) { @@ -958,6 +999,8 @@ static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector & pos+=2; while (in[pos]==INTERNAL_SEPARATOR) pos++; + + const size_t number_start = pos; long tmp1 = wcstol(&in[pos], &end, 10); if ((errno) || (end == &in[pos])) { @@ -973,12 +1016,14 @@ static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector & { // debug(0, L"Expand range [subst]: %i\n", jjj); idx.push_back(jjj); + source_positions.push_back(number_start); } continue; } // debug( 0, L"Push idx %d", tmp ); idx.push_back(i1); + source_positions.push_back(i1_src_pos); } if (end_ptr) @@ -993,7 +1038,6 @@ static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector & } - /** Expand all environment variables in the string *ptr. @@ -1008,23 +1052,28 @@ static int parse_slice(const wchar_t *in, wchar_t **end_ptr, std::vector & happens, don't edit it unless you know exactly what you are doing, and do proper testing afterwards. */ -static int expand_variables_internal(parser_t &parser, wchar_t * const in, std::vector &out, long last_idx); +static int expand_variables_internal(parser_t &parser, wchar_t * const in, std::vector &out, long last_idx, parse_error_list_t *errors); -static int expand_variables2(parser_t &parser, const wcstring &instr, std::vector &out, long last_idx) +static int expand_variables2(parser_t &parser, const wcstring &instr, std::vector &out, long last_idx, parse_error_list_t *errors) { wchar_t *in = wcsdup(instr.c_str()); - int result = expand_variables_internal(parser, in, out, last_idx); + int result = expand_variables_internal(parser, in, out, last_idx, errors); free(in); return result; } -static int expand_variables_internal(parser_t &parser, wchar_t * const in, std::vector &out, long last_idx) +static int expand_variables_internal(parser_t &parser, wchar_t * const in, std::vector &out, long last_idx, parse_error_list_t *errors) { int is_ok= 1; int empty=0; wcstring var_tmp; + + // list of indexes std::vector var_idx_list; + + // parallel array of source positions of each index in the variable list + std::vector var_pos_list; // CHECK( out, 0 ); @@ -1057,7 +1106,7 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: if (var_len == 0) { - expand_variable_error(parser, in, stop_pos-1, -1); + expand_variable_error(parser, in, stop_pos-1, -1, errors); is_ok = 0; break; @@ -1074,16 +1123,17 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: if (is_ok) { tokenize_variable_array(var_val.c_str(), var_item_list); - - if (in[stop_pos] == L'[') + + const size_t slice_start = stop_pos; + if (in[slice_start] == L'[') { wchar_t *slice_end; all_vars=0; - if (parse_slice(in + stop_pos, &slice_end, var_idx_list, var_item_list.size())) + if (parse_slice(in + slice_start, &slice_end, var_idx_list, var_pos_list, var_item_list.size())) { - parser.error(SYNTAX_ERROR, - -1, + append_syntax_error(errors, + stop_pos, L"Invalid index value"); is_ok = 0; break; @@ -1094,19 +1144,16 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: if (!all_vars) { wcstring_list_t string_values(var_idx_list.size()); - for (size_t j=0; j var_item_list.size()) { - parser.error(SYNTAX_ERROR, - -1, + /* The slice was parsed starting at stop_pos, so we have to add that to the error position */ + append_syntax_error(errors, + slice_start + var_src_pos, ARRAY_BOUNDS_ERR); is_ok=0; var_idx_list.resize(j); @@ -1145,7 +1192,7 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: } } res.append(in + stop_pos); - is_ok &= expand_variables2(parser, res, out, i); + is_ok &= expand_variables2(parser, res, out, i, errors); } else { @@ -1173,7 +1220,7 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: } new_in.append(next); new_in.append(in + stop_pos); - is_ok &= expand_variables2(parser, new_in, out, i); + is_ok &= expand_variables2(parser, new_in, out, i, errors); } } @@ -1205,7 +1252,7 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: res.append(in); res.append(in + stop_pos); - is_ok &= expand_variables2(parser, res, out, i); + is_ok &= expand_variables2(parser, res, out, i, errors); return is_ok; } } @@ -1225,7 +1272,7 @@ static int expand_variables_internal(parser_t &parser, wchar_t * const in, std:: /** Perform bracket expansion */ -static int expand_brackets(parser_t &parser, const wcstring &instr, int flags, std::vector &out) +static int expand_brackets(parser_t &parser, const wcstring &instr, int flags, std::vector &out, parse_error_list_t *errors) { bool syntax_error = false; int bracket_count=0; @@ -1295,14 +1342,14 @@ static int expand_brackets(parser_t &parser, const wcstring &instr, int flags, s mod.push_back(BRACKET_END); } - return expand_brackets(parser, mod, 1, out); + return expand_brackets(parser, mod, 1, out, errors); } } if (syntax_error) { - parser.error(SYNTAX_ERROR, - -1, + append_syntax_error(errors, + SOURCE_LOCATION_UNKNOWN, _(L"Mismatched brackets")); return 0; } @@ -1331,7 +1378,7 @@ static int expand_brackets(parser_t &parser, const wcstring &instr, int flags, s whole_item.append(in, length_preceding_brackets); whole_item.append(item_begin, item_len); whole_item.append(bracket_end + 1); - expand_brackets(parser, whole_item, flags, out); + expand_brackets(parser, whole_item, flags, out, errors); item_begin = pos+1; if (pos == bracket_end) @@ -1355,7 +1402,7 @@ static int expand_brackets(parser_t &parser, const wcstring &instr, int flags, s /** Perform cmdsubst expansion */ -static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector &out_list) +static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector &out_list, parse_error_list_t *errors) { wchar_t *paran_begin=0, *paran_end=0; std::vector sub_res; @@ -1368,8 +1415,8 @@ static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector< switch (parse_ret = parse_util_locate_cmdsubst(in, ¶n_begin, ¶n_end, false)) { case -1: - parser.error(SYNTAX_ERROR, - -1, + append_syntax_error(errors, + SOURCE_LOCATION_UNKNOWN, L"Mismatched parenthesis"); return 0; case 0: @@ -1384,7 +1431,7 @@ static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector< if (exec_subshell(subcmd, sub_res, true /* do apply exit status */) == -1) { - parser.error(CMDSUBST_ERROR, -1, L"Unknown error while evaulating command substitution"); + append_cmdsub_error(errors, SOURCE_LOCATION_UNKNOWN, L"Unknown error while evaulating command substitution"); return 0; } @@ -1392,24 +1439,25 @@ static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector< if (*tail_begin == L'[') { std::vector slice_idx; + std::vector slice_source_positions; wchar_t *slice_end; - if (parse_slice(tail_begin, &slice_end, slice_idx, sub_res.size())) + if (parse_slice(tail_begin, &slice_end, slice_idx, slice_source_positions, sub_res.size())) { - parser.error(SYNTAX_ERROR, -1, L"Invalid index value"); + append_syntax_error(errors, SOURCE_LOCATION_UNKNOWN, L"Invalid index value"); return 0; } else { - std::vector sub_res2; + wcstring_list_t sub_res2; tail_begin = slice_end; for (i=0; i < slice_idx.size(); i++) { long idx = slice_idx.at(i); if (idx < 1 || (size_t)idx > sub_res.size()) { - parser.error(SYNTAX_ERROR, - -1, + append_syntax_error(errors, + SOURCE_LOCATION_UNKNOWN, ARRAY_BOUNDS_ERR); return 0; } @@ -1430,7 +1478,7 @@ static int expand_cmdsubst(parser_t &parser, const wcstring &input, std::vector< of the string is inserted into the tail_expand array list */ std::vector tail_expand; - expand_cmdsubst(parser, tail_begin, tail_expand); + expand_cmdsubst(parser, tail_begin, tail_expand, errors /* TODO: offset error locations */); /* Combine the result of the current command substitution with the @@ -1639,7 +1687,7 @@ static void remove_internal_separator(wcstring &str, bool conv) } -int expand_string(const wcstring &input, std::vector &output, expand_flags_t flags) +int expand_string(const wcstring &input, std::vector &output, expand_flags_t flags, parse_error_list_t *errors) { parser_t parser(PARSER_TYPE_ERRORS_ONLY, true /* show errors */); @@ -1661,14 +1709,14 @@ int expand_string(const wcstring &input, std::vector &output, expa if (parse_util_locate_cmdsubst(input.c_str(), &begin, &end, true) != 0) { - parser.error(CMDSUBST_ERROR, -1, L"Command substitutions not allowed"); + append_cmdsub_error(errors, SOURCE_LOCATION_UNKNOWN, L"Command substitutions not allowed"); return EXPAND_ERROR; } append_completion(*in, input); } else { - int cmdsubst_ok = expand_cmdsubst(parser, input, *in); + int cmdsubst_ok = expand_cmdsubst(parser, input, *in, errors); if (! cmdsubst_ok) return EXPAND_ERROR; } @@ -1696,7 +1744,7 @@ int expand_string(const wcstring &input, std::vector &output, expa } else { - if (!expand_variables2(parser, next, *out, next.size() - 1)) + if (!expand_variables2(parser, next, *out, next.size() - 1, errors)) { return EXPAND_ERROR; } @@ -1710,7 +1758,7 @@ int expand_string(const wcstring &input, std::vector &output, expa { const wcstring &next = in->at(i).completion; - if (!expand_brackets(parser, next, flags, *out)) + if (!expand_brackets(parser, next, flags, *out, errors)) { return EXPAND_ERROR; } @@ -1840,7 +1888,7 @@ int expand_string(const wcstring &input, std::vector &output, expa return res; } -bool expand_one(wcstring &string, expand_flags_t flags) +bool expand_one(wcstring &string, expand_flags_t flags, parse_error_list_t *errors) { std::vector completions; bool result = false; @@ -1850,7 +1898,7 @@ bool expand_one(wcstring &string, expand_flags_t flags) return true; } - if (expand_string(string, completions, flags | EXPAND_NO_DESCRIPTIONS)) + if (expand_string(string, completions, flags | EXPAND_NO_DESCRIPTIONS, errors)) { if (completions.size() == 1) { diff --git a/expand.h b/expand.h index 803513c2a..3956b1f16 100644 --- a/expand.h +++ b/expand.h @@ -19,6 +19,7 @@ #include "util.h" #include "common.h" +#include "parse_constants.h" #include enum @@ -146,9 +147,10 @@ class parser_t; \param input The parameter to expand \param output The list to which the result will be appended. \param flag Specifies if any expansion pass should be skipped. Legal values are any combination of EXPAND_SKIP_CMDSUBST EXPAND_SKIP_VARIABLES and EXPAND_SKIP_WILDCARDS + \param errors Resulting errors, or NULL to ignore \return One of EXPAND_OK, EXPAND_ERROR, EXPAND_WILDCARD_MATCH and EXPAND_WILDCARD_NO_MATCH. EXPAND_WILDCARD_NO_MATCH and EXPAND_WILDCARD_MATCH are normal exit conditions used only on strings containing wildcards to tell if the wildcard produced any matches. */ -__warn_unused int expand_string(const wcstring &input, std::vector &output, expand_flags_t flags); +__warn_unused int expand_string(const wcstring &input, std::vector &output, expand_flags_t flags, parse_error_list_t *errors); /** @@ -158,9 +160,10 @@ __warn_unused int expand_string(const wcstring &input, std::vector \param inout_str The parameter to expand in-place \param flag Specifies if any expansion pass should be skipped. Legal values are any combination of EXPAND_SKIP_CMDSUBST EXPAND_SKIP_VARIABLES and EXPAND_SKIP_WILDCARDS + \param errors Resulting errors, or NULL to ignore \return Whether expansion succeded */ -bool expand_one(wcstring &inout_str, expand_flags_t flags); +bool expand_one(wcstring &inout_str, expand_flags_t flags, parse_error_list_t *errors = NULL); /** Convert the variable value to a human readable form, i.e. escape things, handle arrays, etc. Suitable for pretty-printing. The result must be free'd! diff --git a/fish_tests.cpp b/fish_tests.cpp index 7b2c37732..605b21ed8 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -997,7 +997,7 @@ static int expand_test(const wchar_t *in, int flags, ...) int res=1; wchar_t *arg; - if (expand_string(in, output, flags)) + if (expand_string(in, output, flags, NULL)) { } diff --git a/parse_constants.h b/parse_constants.h index 1e7d0e0d1..d464e3961 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -137,6 +137,31 @@ enum }; typedef unsigned int parser_test_error_bits_t; +struct parse_error_t +{ + /** Text of the error */ + wcstring text; + + /** Code for the error */ + enum parse_error_code_t code; + + /** Offset and length of the token in the source code that triggered this error */ + size_t source_start; + size_t source_length; + + /** Return a string describing the error, suitable for presentation to the user. If skip_caret is false, the offending line with a caret is printed as well */ + wcstring describe(const wcstring &src) const; + + /** Return a string describing the error, suitable for presentation to the user, with the given prefix. If skip_caret is false, the offending line with a caret is printed as well */ + wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool is_interactive, bool skip_caret) const; +}; +typedef std::vector parse_error_list_t; + +/* Special source_start value that means unknown */ +#define SOURCE_LOCATION_UNKNOWN (static_cast(-1)) + +/* Helper function to offset error positions by the given amount. This is used when determining errors in a substring of a larger source buffer. */ +void parse_error_offset_source_start(parse_error_list_t *errors, size_t amt); /** Maximum number of function calls. */ #define FISH_MAX_STACK_DEPTH 128 diff --git a/parse_execution.cpp b/parse_execution.cpp index 127309a8b..6453ba373 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -135,7 +135,7 @@ const parse_node_t *parse_execution_context_t::infinite_recursive_statement_in_j /* Ok, this is an undecorated plain statement. Get and expand its command */ wcstring cmd; tree.command_for_plain_statement(plain_statement, src, &cmd); - expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES); + expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES, NULL); if (cmd == forbidden_function_name) { @@ -440,7 +440,7 @@ parse_execution_result_t parse_execution_context_t::run_for_statement(const pars /* Get the variable name: `for var_name in ...`. We expand the variable name. It better result in just one. */ const parse_node_t &var_name_node = *get_child(header, 1, parse_token_type_string); wcstring for_var_name = get_source(var_name_node); - if (! expand_one(for_var_name, 0)) + if (! expand_one(for_var_name, 0, NULL)) { report_error(var_name_node, FAILED_EXPANSION_VARIABLE_NAME_ERR_MSG, for_var_name.c_str()); return parse_execution_errored; @@ -511,16 +511,17 @@ parse_execution_result_t parse_execution_context_t::run_switch_statement(const p const parse_node_t &switch_value_node = *get_child(statement, 1, parse_token_type_string); const wcstring switch_value = get_source(switch_value_node); - /* Expand it */ + /* Expand it. We need to offset any errors by the position of the string */ std::vector switch_values_expanded; - int expand_ret = expand_string(switch_value, switch_values_expanded, EXPAND_NO_DESCRIPTIONS); + parse_error_list_t errors; + int expand_ret = expand_string(switch_value, switch_values_expanded, EXPAND_NO_DESCRIPTIONS, &errors); + parse_error_offset_source_start(&errors, switch_value_node.source_start); + switch (expand_ret) { case EXPAND_ERROR: { - result = report_error(switch_value_node, - _(L"Could not expand string '%ls'"), - switch_value.c_str()); + result = report_errors(errors); break; } @@ -671,29 +672,43 @@ parse_execution_result_t parse_execution_context_t::run_while_statement(const pa } /* Reports an error. Always returns parse_execution_errored, so you can assign the result to an 'errored' variable */ -parse_execution_result_t parse_execution_context_t::report_error(const parse_node_t &node, const wchar_t *fmt, ...) +parse_execution_result_t parse_execution_context_t::report_error(const parse_node_t &node, const wchar_t *fmt, ...) const { if (parser->show_errors) { /* Create an error */ - parse_error_t error; - error.source_start = node.source_start; - error.source_length = node.source_length; - error.code = parse_error_syntax; //hackish + parse_error_list_t error_list = parse_error_list_t(1); + parse_error_t *error = &error_list.at(0); + error->source_start = node.source_start; + error->source_length = node.source_length; + error->code = parse_error_syntax; //hackish va_list va; va_start(va, fmt); - error.text = vformat_string(fmt, va); + error->text = vformat_string(fmt, va); va_end(va); + + this->report_errors(error_list); + } + return parse_execution_errored; +} +parse_execution_result_t parse_execution_context_t::report_errors(const parse_error_list_t &error_list) const +{ + if (parser->show_errors) + { + if (error_list.empty()) + { + fprintf(stderr, "Bug: Error reported but no error text found."); + } + /* Get a backtrace */ wcstring backtrace_and_desc; - const parse_error_list_t error_list = parse_error_list_t(1, error); parser->get_backtrace(src, error_list, &backtrace_and_desc); - + + /* Print it */ fprintf(stderr, "%ls", backtrace_and_desc.c_str()); } - return parse_execution_errored; } @@ -829,7 +844,7 @@ parse_execution_result_t parse_execution_context_t::populate_plain_process(job_t assert(got_cmd); /* Expand it as a command. Return an error on failure. */ - bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES); + bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES, NULL); if (! expanded) { report_error(statement, ILLEGAL_CMD_ERR_MSG, cmd.c_str()); @@ -947,14 +962,14 @@ wcstring_list_t parse_execution_context_t::determine_arguments(const parse_node_ /* Expand this string */ std::vector arg_expanded; - int expand_ret = expand_string(arg_str, arg_expanded, EXPAND_NO_DESCRIPTIONS); + parse_error_list_t errors; + int expand_ret = expand_string(arg_str, arg_expanded, EXPAND_NO_DESCRIPTIONS, &errors); + parse_error_offset_source_start(&errors, arg_node.source_start); switch (expand_ret) { case EXPAND_ERROR: { - this->report_error(arg_node, - _(L"Could not expand string '%ls'"), - arg_str.c_str()); + this->report_errors(errors); break; } @@ -1016,7 +1031,7 @@ bool parse_execution_context_t::determine_io_chain(const parse_node_t &statement enum token_type redirect_type = tree.type_for_redirection(redirect_node, src, &source_fd, &target); /* PCA: I can't justify this EXPAND_SKIP_VARIABLES flag. It was like this when I got here. */ - bool target_expanded = expand_one(target, no_exec ? EXPAND_SKIP_VARIABLES : 0); + bool target_expanded = expand_one(target, no_exec ? EXPAND_SKIP_VARIABLES : 0, NULL); if (! target_expanded || target.empty()) { /* Should improve this error message */ diff --git a/parse_execution.h b/parse_execution.h index cb2ff65f9..fb46f10a3 100644 --- a/parse_execution.h +++ b/parse_execution.h @@ -65,7 +65,9 @@ private: execution_cancellation_reason_t cancellation_reason(const block_t *block) const; /* Report an error. Always returns true. */ - parse_execution_result_t report_error(const parse_node_t &node, const wchar_t *fmt, ...); + parse_execution_result_t report_error(const parse_node_t &node, const wchar_t *fmt, ...) const; + parse_execution_result_t report_errors(const parse_error_list_t &errors) const; + /* Wildcard error helper */ parse_execution_result_t report_unmatched_wildcard_error(const parse_node_t &unmatched_wildcard); diff --git a/parse_tree.cpp b/parse_tree.cpp index caba268a1..47fc68c5f 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -113,6 +113,24 @@ wcstring parse_errors_description(const parse_error_list_t &errors, const wcstri return target; } +void parse_error_offset_source_start(parse_error_list_t *errors, size_t amt) +{ + assert(errors != NULL); + if (amt > 0) + { + size_t i, max = errors->size(); + for (i=0; i < max; i++) + { + parse_error_t *error = &errors->at(i); + /* preserve the special meaning of -1 as 'unknown' */ + if (error->source_start != SOURCE_LOCATION_UNKNOWN) + { + error->source_start += amt; + } + } + } +} + /** Returns a string description of the given token type */ wcstring token_type_description(parse_token_type_t type) { @@ -487,7 +505,6 @@ class parse_ll_t void parse_error(parse_token_t token, parse_error_code_t code, const wchar_t *format, ...); void parse_error_failed_production(struct parse_stack_element_t &elem, parse_token_t token); void parse_error_unbalancing_token(parse_token_t token); - void append_error_callout(wcstring &error_message, parse_token_t token); void dump_stack(void) const; diff --git a/parse_tree.h b/parse_tree.h index 99c3bf299..706ee9c59 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -21,26 +21,6 @@ class parse_node_tree_t; typedef size_t node_offset_t; #define NODE_OFFSET_INVALID (static_cast(-1)) -struct parse_error_t -{ - /** Text of the error */ - wcstring text; - - /** Code for the error */ - enum parse_error_code_t code; - - /** Offset and length of the token in the source code that triggered this error */ - size_t source_start; - size_t source_length; - - /** Return a string describing the error, suitable for presentation to the user. If skip_caret is false, the offending line with a caret is printed as well */ - wcstring describe(const wcstring &src) const; - - /** Return a string describing the error, suitable for presentation to the user, with the given prefix. If skip_caret is false, the offending line with a caret is printed as well */ - wcstring describe_with_prefix(const wcstring &src, const wcstring &prefix, bool is_interactive, bool skip_caret) const; -}; -typedef std::vector parse_error_list_t; - /* Returns a description of a list of parse errors */ wcstring parse_errors_description(const parse_error_list_t &errors, const wcstring &src, const wchar_t *prefix = NULL); diff --git a/parse_util.cpp b/parse_util.cpp index f1182ac27..d1f7a4824 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -1152,10 +1152,7 @@ parser_test_error_bits_t parse_util_detect_errors_in_argument(const parse_node_t /* Our command substitution produced error offsets relative to its source. Tweak the offsets of the errors in the command substitution to account for both its offset within the string, and the offset of the node */ size_t error_offset = (paran_begin + 1 - arg_cpy) + node.source_start; - for (size_t i=0; i < subst_errors.size(); i++) - { - subst_errors.at(i).source_start += error_offset; - } + parse_error_offset_source_start(&subst_errors, error_offset); if (out_errors != NULL) { @@ -1301,8 +1298,9 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars if (node_tree.command_for_plain_statement(node, buff_src, &command)) { // Check that we can expand the command - if (! expand_one(command, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS)) + if (! expand_one(command, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS, NULL)) { + // TODO: leverage the resulting errors errored = append_syntax_error(&parse_errors, node, ILLEGAL_CMD_ERR_MSG, command.c_str()); } diff --git a/parser.cpp b/parser.cpp index b66f5097c..4a7ee602d 100644 --- a/parser.cpp +++ b/parser.cpp @@ -194,8 +194,6 @@ static wcstring user_presentable_path(const wcstring &path) parser_t::parser_t(enum parser_type_t type, bool errors) : parser_type(type), show_errors(errors), - error_code(0), - err_pos(0), cancellation_requested(false), is_within_fish_initialization(false) { @@ -382,22 +380,6 @@ void parser_t::allow_function() forbidden_function.pop_back(); } -void parser_t::error(int ec, size_t p, const wchar_t *str, ...) -{ - va_list va; - - CHECK(str,); - - error_code = ec; - - // note : p may be -1 - err_pos = static_cast(p); - - va_start(va, str); - err_buff = vformat_string(str, va); - va_end(va); -} - /** Print profiling information to the specified stream */ @@ -529,7 +511,7 @@ void parser_t::expand_argument_list(const wcstring &arg_list_src, std::vectorget_source(arg_list_src); - if (expand_string(arg_src, output_arg_list, eflags) == EXPAND_ERROR) + if (expand_string(arg_src, output_arg_list, eflags, NULL) == EXPAND_ERROR) { /* Failed to expand a string */ break; @@ -1034,21 +1016,35 @@ void parser_t::get_backtrace(const wcstring &src, const parse_error_list_t &erro if (! errors.empty()) { const parse_error_t &err = errors.at(0); - - // Determine which line we're on - assert(err.source_start <= src.size()); - size_t which_line = 1 + std::count(src.begin(), src.begin() + err.source_start, L'\n'); - - // Don't include the caret if we're interactive, this is the first line of text, and our source is at its beginning, because then it's obvious - bool is_interactive = get_is_interactive(); - bool skip_caret = (is_interactive && which_line == 1 && err.source_start == 0); + + const bool is_interactive = get_is_interactive(); + + // Determine if we want to try to print a caret to point at the source error + // The err.source_start <= src.size() check is due to the nasty way that slices work, + // which is by rewriting the source (!) + size_t which_line = 0; + bool skip_caret = true; + if (err.source_start != SOURCE_LOCATION_UNKNOWN && err.source_start <= src.size()) + { + // Determine which line we're on + which_line = 1 + std::count(src.begin(), src.begin() + err.source_start, L'\n'); + + // Don't include the caret if we're interactive, this is the first line of text, and our source is at its beginning, because then it's obvious + skip_caret = (is_interactive && which_line == 1 && err.source_start == 0); + } wcstring prefix; - const wchar_t *filename = this->current_filename(); if (filename) { - prefix = format_string(_(L"%ls (line %lu): "), user_presentable_path(filename).c_str(), which_line); + if (which_line > 0) + { + prefix = format_string(_(L"%ls (line %lu): "), user_presentable_path(filename).c_str(), which_line); + } + else + { + prefix = format_string(_(L"%ls: "), user_presentable_path(filename).c_str()); + } } else { diff --git a/parser.h b/parser.h index bd9108125..e9570c98a 100644 --- a/parser.h +++ b/parser.h @@ -241,12 +241,6 @@ private: /** Whether or not we output errors */ const bool show_errors; - /** Last error code */ - int error_code; - - /** Position of last error */ - int err_pos; - /** Indication that we should skip all blocks */ bool cancellation_requested; @@ -317,7 +311,7 @@ public: \return 0 on success, 1 otherwise */ - int eval(const wcstring &cmd_str, const io_chain_t &io, enum block_type_t block_type); + int eval(const wcstring &cmd, const io_chain_t &io, enum block_type_t block_type); /** Evaluates a block node at the given node offset in the topmost execution context */ int eval_block_node(node_offset_t node_idx, const io_chain_t &io, enum block_type_t block_type); @@ -332,15 +326,6 @@ public: */ void expand_argument_list(const wcstring &arg_src, std::vector &output); - /** - Sets the current evaluation error. This function should only be used by libraries that are called by - - \param ec The new error code - \param p The character offset at which the error occured - \param str The printf-style error message filter - */ - void error(int ec, size_t p, const wchar_t *str, ...); - /** Returns a string describing the current parser pisition in the format 'FILENAME (line LINE_NUMBER): LINE'. Example: From 12025e30503f68ffbd4dac0d318e253c71c97bca Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 22 Mar 2014 01:04:49 -0700 Subject: [PATCH 132/145] Remove unused err_buff variable from parser_t --- parser.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/parser.h b/parser.h index e9570c98a..6f104302d 100644 --- a/parser.h +++ b/parser.h @@ -250,9 +250,6 @@ private: /** Stack of execution contexts. We own these pointers and must delete them */ std::vector execution_contexts; - /** Description of last error */ - wcstring err_buff; - /** List of called functions, used to help prevent infinite recursion */ wcstring_list_t forbidden_function; From 06eb271bda3a0ef832d9a1aa1d3e84b2d39e5dfa Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 22 Mar 2014 14:46:23 -0700 Subject: [PATCH 133/145] Changes full_escape to not generate \x escapes for non-ASCII characters. Partially reverts 51de269 . Fixes #1225 --- env_universal_common.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/env_universal_common.cpp b/env_universal_common.cpp index dbf79c1a6..c175b4a14 100644 --- a/env_universal_common.cpp +++ b/env_universal_common.cpp @@ -756,8 +756,9 @@ static wcstring full_escape(const wchar_t *in) { out.push_back(c); } - else if (c < 256) + else if (c <= ASCII_MAX) { + // See #1225 for discussion of use of ASCII_MAX here append_format(out, L"\\x%.2x", c); } else if (c < 65536) From aabed8279e4a086cf953006023bc14ec1d1d83b8 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 22 Mar 2014 23:46:58 -0700 Subject: [PATCH 134/145] Incorporate a modified UTF8 <-> wchar_t implementation from Alexey Vatchenko (http://www.bsdua.org/libbsdua.html) in preparation for eliminating our dependency on iconv --- Makefile.in | 4 +- doc_src/license.hdr | 16 + fish.xcodeproj/project.pbxproj | 8 + fish_tests.cpp | 307 ++++++++++++++++++-- utf8.cpp | 514 +++++++++++++++++++++++++++++++++ utf8.h | 39 +++ 6 files changed, 861 insertions(+), 27 deletions(-) create mode 100644 utf8.cpp create mode 100644 utf8.h diff --git a/Makefile.in b/Makefile.in index 8d18ce1d7..3063438c2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -91,7 +91,7 @@ FISH_OBJS := function.o builtin.o complete.o env.o exec.o expand.o \ signal.o io.o parse_util.o common.o screen.o path.o autoload.o \ parser_keywords.o iothread.o color.o postfork.o \ builtin_test.o parse_tree.o parse_productions.o parse_execution.cpp \ - pager.cpp + pager.cpp utf8.o FISH_INDENT_OBJS := fish_indent.o print_help.o common.o \ parser_keywords.o wutil.o tokenizer.o @@ -117,7 +117,7 @@ FISH_TESTS_OBJS := $(FISH_OBJS) fish_tests.o # FISHD_OBJS := fishd.o env_universal_common.o wutil.o print_help.o \ - common.o + common.o utf8.o # diff --git a/doc_src/license.hdr b/doc_src/license.hdr index c07a94ad2..7f14383a7 100644 --- a/doc_src/license.hdr +++ b/doc_src/license.hdr @@ -1402,4 +1402,20 @@ POSSIBILITY OF SUCH DAMAGES. */ +

License for UTF8

+ +

Copyright (c) 2007 Alexey Vatchenko + +

Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + \htmlonly

\endhtmlonly diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index d51f53e3b..47d04c4cc 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -117,6 +117,8 @@ D0A564FE168D23D800AF6161 /* man in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; }; D0A56501168D258300AF6161 /* man in Copy Files */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; }; D0C52F371765284C00BFAB82 /* parse_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0C52F351765284C00BFAB82 /* parse_tree.cpp */; }; + D0C9733818DE5449002D7C81 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0C9733718DE5449002D7C81 /* utf8.cpp */; }; + D0C9733918DE5449002D7C81 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0C9733718DE5449002D7C81 /* utf8.cpp */; }; D0CBD587159EF0E10024809C /* launch_fish.scpt in Resources */ = {isa = PBXBuildFile; fileRef = D0CBD586159EF0E10024809C /* launch_fish.scpt */; }; D0D02A67159837AD008E62BD /* complete.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853713B3ACEE0099B651 /* complete.cpp */; }; D0D02A69159837B2008E62BD /* env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853A13B3ACEE0099B651 /* env.cpp */; }; @@ -475,6 +477,8 @@ D0C6FCC914CFA4B0004CE8AD /* autoload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = autoload.cpp; sourceTree = ""; }; D0C6FCCB14CFA4B7004CE8AD /* autoload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autoload.h; sourceTree = ""; }; D0C861EA16CC7054003B5A04 /* builtin_set_color.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = builtin_set_color.cpp; sourceTree = ""; }; + D0C9733718DE5449002D7C81 /* utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utf8.cpp; sourceTree = ""; }; + D0C9733A18DE5451002D7C81 /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; D0CA63F316FC275F00093BD4 /* builtin_printf.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = builtin_printf.cpp; sourceTree = ""; }; D0CBD580159EE48F0024809C /* config.fish */ = {isa = PBXFileReference; lastKnownFileType = text; name = config.fish; path = share/config.fish; sourceTree = ""; }; D0CBD583159EEE010024809C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -686,6 +690,8 @@ D0A0855C13B3ACEE0099B651 /* signal.cpp */, D0A0852513B3ACEE0099B651 /* tokenizer.h */, D0A0855D13B3ACEE0099B651 /* tokenizer.cpp */, + D0C9733A18DE5451002D7C81 /* utf8.h */, + D0C9733718DE5449002D7C81 /* utf8.cpp */, D0A0852613B3ACEE0099B651 /* util.h */, D0A0855E13B3ACEE0099B651 /* util.cpp */, D0A0852713B3ACEE0099B651 /* wgetopt.h */, @@ -1120,6 +1126,7 @@ files = ( D0D02AC215985F3F008E62BD /* fishd.cpp in Sources */, D0D02AC315985F43008E62BD /* env_universal_common.cpp in Sources */, + D0C9733918DE5449002D7C81 /* utf8.cpp in Sources */, D0D02AC415985F4D008E62BD /* wutil.cpp in Sources */, D0D02AC515985F5B008E62BD /* print_help.cpp in Sources */, D0D02AC615985F65008E62BD /* common.cpp in Sources */, @@ -1157,6 +1164,7 @@ D0D02A86159839D5008E62BD /* postfork.cpp in Sources */, D0D02A87159839D5008E62BD /* screen.cpp in Sources */, D0D02A88159839D5008E62BD /* signal.cpp in Sources */, + D0C9733818DE5449002D7C81 /* utf8.cpp in Sources */, D0D2694A15983779005D9B9C /* builtin.cpp in Sources */, D0D2694915983772005D9B9C /* function.cpp in Sources */, D0D02A67159837AD008E62BD /* complete.cpp in Sources */, diff --git a/fish_tests.cpp b/fish_tests.cpp index 5b7bcea6d..f07b568c6 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -62,6 +62,7 @@ #include "parse_util.h" #include "pager.h" #include "input.h" +#include "utf8.h" static const char * const * s_arguments; static int s_test_run_count = 0; @@ -140,17 +141,17 @@ static void err(const wchar_t *blah, ...) va_list va; va_start(va, blah); err_count++; - + // show errors in red fputs("\x1b[31m", stdout); wprintf(L"Error: "); vwprintf(blah, va); va_end(va); - + // return to normal color fputs("\x1b[0m", stdout); - + wprintf(L"\n"); } @@ -857,6 +858,260 @@ static void test_utils() if (begin != a + wcslen(L"echo (echo (")) err(L"parse_util_cmdsubst_extent failed on line %ld", (long)__LINE__); } +/* UTF8 tests taken from Alexey Vatchenko's utf8 library. See http://www.bsdua.org/libbsdua.html */ + +static void test_utf82wchar(const char *src, size_t slen, const wchar_t *dst, size_t dlen, + int flags, size_t res, const char *descr) +{ + size_t size; + wchar_t *mem = NULL; + + /* Hack: if wchar is only UCS-2, and the UTF-8 input string contains astral characters, then tweak the expected size to 0 */ + if (src != NULL && is_wchar_ucs2()) + { + /* A UTF-8 code unit may represent an astral code point if it has 4 or more leading 1s */ + const unsigned char astral_mask = 0xF0; + for (size_t i=0; i < slen; i++) + { + if ((src[i] & astral_mask) == astral_mask) + { + /* Astral char. We expect this conversion to just fail. */ + res = 0; + break; + } + } + } + + if (dst != NULL) + { + mem = (wchar_t *)malloc(dlen * sizeof(*mem)); + if (mem == NULL) + { + err(L"u2w: %s: MALLOC FAILED\n", descr); + return; + } + } + + do + { + size = utf8_to_wchar(src, slen, mem, dlen, flags); + if (res != size) + { + err(L"u2w: %s: FAILED (rv: %lu, must be %lu)", descr, size, res); + break; + } + + if (mem == NULL) + break; /* OK */ + + if (memcmp(mem, dst, size * sizeof(*mem)) != 0) + { + err(L"u2w: %s: BROKEN", descr); + break; + } + + } + while (0); + + free(mem); +} + +static void test_wchar2utf8(const wchar_t *src, size_t slen, const char *dst, size_t dlen, + int flags, size_t res, const char *descr) +{ + size_t size; + char *mem = NULL; + + /* Hack: if wchar is simulating UCS-2, and the wchar_t input string contains astral characters, then tweak the expected size to 0 */ + if (src != NULL && is_wchar_ucs2()) + { + const uint32_t astral_mask = 0xFFFF0000U; + for (size_t i=0; i < slen; i++) + { + if ((src[i] & astral_mask) != 0) + { + /* astral char */ + res = 0; + break; + } + } + } + + if (dst != NULL) + { + mem = (char *)malloc(dlen); + if (mem == NULL) + { + err(L"w2u: %s: MALLOC FAILED", descr); + return; + } + } + + do + { + size = wchar_to_utf8(src, slen, mem, dlen, flags); + if (res != size) + { + err(L"w2u: %s: FAILED (rv: %lu, must be %lu)", descr, size, res); + break; + } + + if (mem == NULL) + break; /* OK */ + + if (memcmp(mem, dst, size) != 0) + { + err(L"w2u: %s: BROKEN", descr); + break; + } + + } + while (0); + + if (mem != NULL); + free(mem); +} + +static void test_utf8() +{ + wchar_t w1[] = {0x54, 0x65, 0x73, 0x74}; + wchar_t w2[] = {0x0422, 0x0435, 0x0441, 0x0442}; + wchar_t w3[] = {0x800, 0x1e80, 0x98c4, 0x9910, 0xff00}; + wchar_t w4[] = {0x15555, 0xf7777, 0xa}; + wchar_t w5[] = {0x255555, 0x1fa04ff, 0xddfd04, 0xa}; + wchar_t w6[] = {0xf255555, 0x1dfa04ff, 0x7fddfd04, 0xa}; + wchar_t wb[] = {-2, 0xa, 0xffffffff, 0x0441}; + wchar_t wm[] = {0x41, 0x0441, 0x3042, 0xff67, 0x9b0d, 0x2e05da67}; + wchar_t wb1[] = {0xa, 0x0422}; + wchar_t wb2[] = {0xd800, 0xda00, 0x41, 0xdfff, 0xa}; + wchar_t wbom[] = {0xfeff, 0x41, 0xa}; + wchar_t wbom2[] = {0x41, 0xa}; + wchar_t wbom22[] = {0xfeff, 0x41, 0xa}; + char u1[] = {0x54, 0x65, 0x73, 0x74}; + char u2[] = {0xd0, 0xa2, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82}; + char u3[] = {0xe0, 0xa0, 0x80, 0xe1, 0xba, 0x80, 0xe9, 0xa3, 0x84, + 0xe9, 0xa4, 0x90, 0xef, 0xbc, 0x80 + }; + char u4[] = {0xf0, 0x95, 0x95, 0x95, 0xf3, 0xb7, 0x9d, 0xb7, 0xa}; + char u5[] = {0xf8, 0x89, 0x95, 0x95, 0x95, 0xf9, 0xbe, 0xa0, 0x93, + 0xbf, 0xf8, 0xb7, 0x9f, 0xb4, 0x84, 0x0a + }; + char u6[] = {0xfc, 0x8f, 0x89, 0x95, 0x95, 0x95, 0xfc, 0x9d, 0xbe, + 0xa0, 0x93, 0xbf, 0xfd, 0xbf, 0xb7, 0x9f, 0xb4, 0x84, 0x0a + }; + char ub[] = {0xa, 0xd1, 0x81}; + char um[] = {0x41, 0xd1, 0x81, 0xe3, 0x81, 0x82, 0xef, 0xbd, 0xa7, + 0xe9, 0xac, 0x8d, 0xfc, 0xae, 0x81, 0x9d, 0xa9, 0xa7 + }; + char ub1[] = {0xa, 0xff, 0xd0, 0xa2, 0xfe, 0x8f, 0xe0, 0x80}; + char uc080[] = {0xc0, 0x80}; + char ub2[] = {0xed, 0xa1, 0x8c, 0xed, 0xbe, 0xb4, 0xa}; + char ubom[] = {0x41, 0xa}; + char ubom2[] = {0xef, 0xbb, 0xbf, 0x41, 0xa}; + + /* + * UTF-8 -> UCS-4 string. + */ + test_utf82wchar(ubom2, sizeof(ubom2), wbom2, + sizeof(wbom2) / sizeof(*wbom2), UTF8_SKIP_BOM, + sizeof(wbom2) / sizeof(*wbom2), "skip BOM"); + test_utf82wchar(ubom2, sizeof(ubom2), wbom22, + sizeof(wbom22) / sizeof(*wbom22), 0, + sizeof(wbom22) / sizeof(*wbom22), "BOM"); + test_utf82wchar(uc080, sizeof(uc080), NULL, 0, 0, 0, + "c0 80 - forbitten by rfc3629"); + test_utf82wchar(ub2, sizeof(ub2), NULL, 0, 0, is_wchar_ucs2() ? 0 : 3, + "resulted in forbitten wchars (len)"); + test_utf82wchar(ub2, sizeof(ub2), wb2, sizeof(wb2) / sizeof(*wb2), 0, 0, + "resulted in forbitten wchars"); + test_utf82wchar(ub2, sizeof(ub2), L"\x0a", 1, UTF8_IGNORE_ERROR, + 1, "resulted in ignored forbitten wchars"); + test_utf82wchar(u1, sizeof(u1), w1, sizeof(w1) / sizeof(*w1), 0, + sizeof(w1) / sizeof(*w1), "1 octet chars"); + test_utf82wchar(u2, sizeof(u2), w2, sizeof(w2) / sizeof(*w2), 0, + sizeof(w2) / sizeof(*w2), "2 octets chars"); + test_utf82wchar(u3, sizeof(u3), w3, sizeof(w3) / sizeof(*w3), 0, + sizeof(w3) / sizeof(*w3), "3 octets chars"); + test_utf82wchar(u4, sizeof(u4), w4, sizeof(w4) / sizeof(*w4), 0, + sizeof(w4) / sizeof(*w4), "4 octets chars"); + test_utf82wchar(u5, sizeof(u5), w5, sizeof(w5) / sizeof(*w5), 0, + sizeof(w5) / sizeof(*w5), "5 octets chars"); + test_utf82wchar(u6, sizeof(u6), w6, sizeof(w6) / sizeof(*w6), 0, + sizeof(w6) / sizeof(*w6), "6 octets chars"); + test_utf82wchar("\xff", 1, NULL, 0, 0, 0, "broken utf-8 0xff symbol"); + test_utf82wchar("\xfe", 1, NULL, 0, 0, 0, "broken utf-8 0xfe symbol"); + test_utf82wchar("\x8f", 1, NULL, 0, 0, 0, + "broken utf-8, start from 10 higher bits"); + if (! is_wchar_ucs2()) test_utf82wchar(ub1, sizeof(ub1), wb1, sizeof(wb1) / sizeof(*wb1), + UTF8_IGNORE_ERROR, sizeof(wb1) / sizeof(*wb1), "ignore bad chars"); + test_utf82wchar(um, sizeof(um), wm, sizeof(wm) / sizeof(*wm), 0, + sizeof(wm) / sizeof(*wm), "mixed languages"); + test_utf82wchar(um, sizeof(um), wm, sizeof(wm) / sizeof(*wm) - 1, 0, + 0, "boundaries -1"); + test_utf82wchar(um, sizeof(um), wm, sizeof(wm) / sizeof(*wm) + 1, 0, + sizeof(wm) / sizeof(*wm), "boundaries +1"); + test_utf82wchar(um, sizeof(um), NULL, 0, 0, + sizeof(wm) / sizeof(*wm), "calculate length"); + test_utf82wchar(ub1, sizeof(ub1), NULL, 0, 0, + 0, "calculate length of bad chars"); + test_utf82wchar(ub1, sizeof(ub1), NULL, 0, + UTF8_IGNORE_ERROR, sizeof(wb1) / sizeof(*wb1), + "calculate length, ignore bad chars"); + test_utf82wchar(NULL, 0, NULL, 0, 0, 0, "invalid params, all 0"); + test_utf82wchar(u1, 0, NULL, 0, 0, 0, + "invalid params, src buf not NULL"); + test_utf82wchar(NULL, 10, NULL, 0, 0, 0, + "invalid params, src length is not 0"); + test_utf82wchar(u1, sizeof(u1), w1, 0, 0, 0, + "invalid params, dst is not NULL"); + + /* + * UCS-4 -> UTF-8 string. + */ + test_wchar2utf8(wbom, sizeof(wbom) / sizeof(*wbom), ubom, sizeof(ubom), + UTF8_SKIP_BOM, sizeof(ubom), "BOM"); + test_wchar2utf8(wb2, sizeof(wb2) / sizeof(*wb2), NULL, 0, 0, + 0, "prohibited wchars"); + test_wchar2utf8(wb2, sizeof(wb2) / sizeof(*wb2), NULL, 0, + UTF8_IGNORE_ERROR, 2, "ignore prohibited wchars"); + test_wchar2utf8(w1, sizeof(w1) / sizeof(*w1), u1, sizeof(u1), 0, + sizeof(u1), "1 octet chars"); + test_wchar2utf8(w2, sizeof(w2) / sizeof(*w2), u2, sizeof(u2), 0, + sizeof(u2), "2 octets chars"); + test_wchar2utf8(w3, sizeof(w3) / sizeof(*w3), u3, sizeof(u3), 0, + sizeof(u3), "3 octets chars"); + test_wchar2utf8(w4, sizeof(w4) / sizeof(*w4), u4, sizeof(u4), 0, + sizeof(u4), "4 octets chars"); + test_wchar2utf8(w5, sizeof(w5) / sizeof(*w5), u5, sizeof(u5), 0, + sizeof(u5), "5 octets chars"); + test_wchar2utf8(w6, sizeof(w6) / sizeof(*w6), u6, sizeof(u6), 0, + sizeof(u6), "6 octets chars"); + test_wchar2utf8(wb, sizeof(wb) / sizeof(*wb), ub, sizeof(ub), 0, + 0, "bad chars"); + test_wchar2utf8(wb, sizeof(wb) / sizeof(*wb), ub, sizeof(ub), + UTF8_IGNORE_ERROR, sizeof(ub), "ignore bad chars"); + test_wchar2utf8(wm, sizeof(wm) / sizeof(*wm), um, sizeof(um), 0, + sizeof(um), "mixed languages"); + test_wchar2utf8(wm, sizeof(wm) / sizeof(*wm), um, sizeof(um) - 1, 0, + 0, "boundaries -1"); + test_wchar2utf8(wm, sizeof(wm) / sizeof(*wm), um, sizeof(um) + 1, 0, + sizeof(um), "boundaries +1"); + test_wchar2utf8(wm, sizeof(wm) / sizeof(*wm), NULL, 0, 0, + sizeof(um), "calculate length"); + test_wchar2utf8(wb, sizeof(wb) / sizeof(*wb), NULL, 0, 0, + 0, "calculate length of bad chars"); + test_wchar2utf8(wb, sizeof(wb) / sizeof(*wb), NULL, 0, + UTF8_IGNORE_ERROR, sizeof(ub), + "calculate length, ignore bad chars"); + test_wchar2utf8(NULL, 0, NULL, 0, 0, 0, "invalid params, all 0"); + test_wchar2utf8(w1, 0, NULL, 0, 0, 0, + "invalid params, src buf not NULL"); + test_wchar2utf8(NULL, 10, NULL, 0, 0, 0, + "invalid params, src length is not 0"); + test_wchar2utf8(w1, sizeof(w1) / sizeof(*w1), u1, 0, 0, 0, + "invalid params, dst is not NULL"); +} + static void test_escape_sequences(void) { say(L"Testing escape codes"); @@ -1110,9 +1365,9 @@ static void test_path() static void test_pager_navigation() { say(L"Testing pager navigation"); - + /* Generate 19 strings of width 10. There's 2 spaces between completions, and our term size is 80; these can therefore fit into 6 columns (6 * 12 - 2 = 70) or 5 columns (58) but not 7 columns (7 * 12 - 2 = 82). - + You can simulate this test by creating 19 files named "file00.txt" through "file_18.txt". */ completion_list_t completions; @@ -1120,31 +1375,31 @@ static void test_pager_navigation() { append_completion(completions, L"abcdefghij"); } - + pager_t pager; pager.set_completions(completions); pager.set_term_size(80, 24); page_rendering_t render = pager.render(); - + if (render.term_width != 80) err(L"Wrong term width"); if (render.term_height != 24) err(L"Wrong term height"); - + size_t rows = 4, cols = 5; - + /* We have 19 completions. We can fit into 6 columns with 4 rows or 5 columns with 4 rows; the second one is better and so is what we ought to have picked. */ if (render.rows != rows) err(L"Wrong row count"); if (render.cols != cols) err(L"Wrong column count"); - + /* Initially expect to have no completion index */ if (render.selected_completion_idx != (size_t)(-1)) { err(L"Wrong initial selection"); } - + /* Here are navigation directions and where we expect the selection to be */ const struct { @@ -1155,31 +1410,31 @@ static void test_pager_navigation() { /* Tab completion to get into the list */ {direction_next, 0}, - + /* Westward motion in upper left wraps along the top row */ {direction_west, 16}, {direction_east, 1}, - + /* "Next" motion goes down the column */ {direction_next, 2}, {direction_next, 3}, - + {direction_west, 18}, {direction_east, 3}, {direction_east, 7}, {direction_east, 11}, {direction_east, 15}, {direction_east, 3}, - + {direction_west, 18}, {direction_east, 3}, - + /* Eastward motion wraps along the bottom, westward goes to the prior column */ {direction_east, 7}, {direction_east, 11}, {direction_east, 15}, {direction_east, 3}, - + /* Column memory */ {direction_west, 18}, {direction_south, 15}, @@ -1197,7 +1452,7 @@ static void test_pager_navigation() err(L"For command %lu, expected selection %lu, but found instead %lu\n", i, cmds[i].sel, render.selected_completion_idx); } } - + } enum word_motion_t @@ -1536,14 +1791,14 @@ static void test_complete(void) completions.clear(); complete(L"echo (builtin scuttlebut", completions, COMPLETION_REQUEST_DEFAULT); do_test(completions.size() == 0); - + /* Trailing spaces (#1261) */ complete_add(L"foobarbaz", false, 0, NULL, 0, NO_FILES, NULL, L"qux", NULL, COMPLETE_AUTO_SPACE); completions.clear(); complete(L"foobarbaz ", completions, COMPLETION_REQUEST_DEFAULT); do_test(completions.size() == 1); do_test(completions.at(0).completion == L"qux"); - + /* Don't complete variable names in single quotes (#1023) */ completions.clear(); complete(L"echo '$Foo", completions, COMPLETION_REQUEST_DEFAULT); @@ -1814,14 +2069,14 @@ static void test_input() wcstring desired_binding = prefix_binding + L'a'; input_mapping_add(prefix_binding.c_str(), L"up-line"); input_mapping_add(desired_binding.c_str(), L"down-line"); - + /* Push the desired binding on the stack (backwards!) */ size_t idx = desired_binding.size(); while (idx--) { input_unreadch(desired_binding.at(idx)); } - + /* Now test */ wint_t c = input_readch(); if (c != R_DOWN_LINE) @@ -2748,7 +3003,7 @@ static void test_highlighting(void) {L"'single_quote", highlight_spec_error}, {NULL, -1} }; - + const highlight_component_t components11[] = { {L"echo", highlight_spec_command}, @@ -2761,7 +3016,7 @@ static void test_highlighting(void) {L"]", highlight_spec_operator}, {NULL, -1} }; - + const highlight_component_t components12[] = { {L"for", highlight_spec_command}, @@ -2867,6 +3122,7 @@ int main(int argc, char **argv) if (should_test_function("cancellation")) test_cancellation(); if (should_test_function("indents")) test_indents(); if (should_test_function("utils")) test_utils(); + if (should_test_function("utf8")) test_utf8(); if (should_test_function("escape_sequences")) test_escape_sequences(); if (should_test_function("lru")) test_lru(); if (should_test_function("expand")) test_expand(); @@ -2906,7 +3162,8 @@ int main(int argc, char **argv) event_destroy(); proc_destroy(); - if(err_count != 0) { + if (err_count != 0) + { return(1); } } diff --git a/utf8.cpp b/utf8.cpp new file mode 100644 index 000000000..60d83d33d --- /dev/null +++ b/utf8.cpp @@ -0,0 +1,514 @@ +/* + * Copyright (c) 2007 Alexey Vatchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include + +#include + +#include "utf8.h" + +#include +#include +#include + + +#define _NXT 0x80 +#define _SEQ2 0xc0 +#define _SEQ3 0xe0 +#define _SEQ4 0xf0 +#define _SEQ5 0xf8 +#define _SEQ6 0xfc + +#define _BOM 0xfeff + +/* We can tweak the following typedef to allow us to simulate Windows-style 16 bit wchar's on Unix */ +typedef wchar_t utf8_wchar_t; +#define UTF8_WCHAR_MAX ((size_t)std::numeric_limits::max()) + +bool is_wchar_ucs2() +{ + return UTF8_WCHAR_MAX <= 0xFFFF; +} + +static size_t utf8_to_wchar_internal(const char *in, size_t insize, utf8_wchar_t *out, size_t outsize, int flags); +static size_t wchar_to_utf8_internal(const utf8_wchar_t *in, size_t insize, char *out, size_t outsize, int flags); + +static bool safe_copy_wchar_to_utf8_wchar(const wchar_t *in, utf8_wchar_t *out, size_t count) +{ + bool result = true; + for (size_t i=0; i < count; i++) + { + wchar_t c = in[i]; + if (c > UTF8_WCHAR_MAX) + { + result = false; + break; + } + out[i] = c; + } + return result; +} + +bool utf8_to_wchar_string(const std::string &str, std::wstring *result) +{ + result->clear(); + const size_t inlen = str.size(); + if (inlen == 0) + { + return true; + } + + bool success = false; + const char *input = str.c_str(); + size_t outlen = utf8_to_wchar(input, inlen, NULL, 0, 0); + if (outlen > 0) + { + wchar_t *tmp = new wchar_t[outlen]; + size_t outlen2 = utf8_to_wchar(input, inlen, tmp, outlen, 0); + if (outlen2 > 0) + { + result->assign(tmp, outlen2); + success = true; + } + delete[] tmp; + } + return success; +} + +bool wchar_to_utf8_string(const std::wstring &str, std::string *result) +{ + result->clear(); + const size_t inlen = str.size(); + if (inlen == 0) + { + return true; + } + + bool success = false; + const wchar_t *input = str.c_str(); + size_t outlen = wchar_to_utf8(input, inlen, NULL, 0, 0); + if (outlen > 0) + { + char *tmp = new char[outlen]; + size_t outlen2 = wchar_to_utf8(input, inlen, tmp, outlen, 0); + if (outlen2 > 0) + { + result->assign(tmp, outlen2); + success = true; + } + delete[] tmp; + } + return success; +} + +size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize, int flags) +{ + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + { + return 0; + } + + size_t result; + if (sizeof(wchar_t) == sizeof(utf8_wchar_t)) + { + result = utf8_to_wchar_internal(in, insize, reinterpret_cast(out), outsize, flags); + } + else + { + // Allocate a temporary buffer to hold the output + // note: outsize may be 0 + utf8_wchar_t *tmp_output = new utf8_wchar_t[outsize]; + + // Invoke the conversion with the temporary + result = utf8_to_wchar_internal(in, insize, tmp_output, outsize, flags); + + // Copy back from tmp to the function's output, then clean it up + size_t amount_to_copy = std::min(result, outsize); + std::copy(tmp_output, tmp_output + amount_to_copy, out); + delete[] tmp_output; + } + return result; +} + +size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize, int flags) +{ + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + { + return 0; + } + + size_t result; + if (sizeof(wchar_t) == sizeof(utf8_wchar_t)) + { + result = wchar_to_utf8_internal(reinterpret_cast(in), insize, out, outsize, flags); + } + else + { + // Allocate a temporary buffer to hold the input + // the std::copy performs the size conversion + // note: insize may be 0 + utf8_wchar_t *tmp_input = new utf8_wchar_t[insize]; + if (! safe_copy_wchar_to_utf8_wchar(in, tmp_input, insize)) + { + // our utf8_wchar_t is UCS-16 and there was an astral character + result = 0; + } + else + { + // Invoke the conversion with the temporary, then clean up the input + result = wchar_to_utf8_internal(tmp_input, insize, out, outsize, flags); + } + delete[] tmp_input; + } + return result; +} + + +static int __wchar_forbitten(utf8_wchar_t sym); +static int __utf8_forbitten(unsigned char octet); + +static int +__wchar_forbitten(utf8_wchar_t sym) +{ + + /* Surrogate pairs */ + if (sym >= 0xd800 && sym <= 0xdfff) + return (-1); + + return (0); +} + +static int +__utf8_forbitten(unsigned char octet) +{ + + switch (octet) + { + case 0xc0: + case 0xc1: + case 0xf5: + case 0xff: + return (-1); + } + + return (0); +} + +/* + * DESCRIPTION + * This function translates UTF-8 string into UCS-2 or UCS-4 string (all symbols + * will be in local machine byte order). + * + * It takes the following arguments: + * in - input UTF-8 string. It can be null-terminated. + * insize - size of input string in bytes. + * out - result buffer for UCS-2/4 string. If out is NULL, + * function returns size of result buffer. + * outsize - size of out buffer in wide characters. + * + * RETURN VALUES + * The function returns size of result buffer (in wide characters). + * Zero is returned in case of error. + * + * CAVEATS + * 1. If UTF-8 string contains zero symbols, they will be translated + * as regular symbols. + * 2. If UTF8_IGNORE_ERROR or UTF8_SKIP_BOM flag is set, sizes may vary + * when `out' is NULL and not NULL. It's because of special UTF-8 + * sequences which may result in forbitten (by RFC3629) UNICODE + * characters. So, the caller must check return value every time and + * not prepare buffer in advance (\0 terminate) but after calling this + * function. + */ +static size_t utf8_to_wchar_internal(const char *in, size_t insize, utf8_wchar_t *out, size_t outsize, int flags) +{ + unsigned char *p, *lim; + utf8_wchar_t *wlim, high; + size_t n, total, i, n_bits; + + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + return (0); + + total = 0; + p = (unsigned char *)in; + lim = p + insize; + wlim = out + outsize; + + for (; p < lim; p += n) + { + if (__utf8_forbitten(*p) != 0 && + (flags & UTF8_IGNORE_ERROR) == 0) + return (0); + + /* + * Get number of bytes for one wide character. + */ + n = 1; /* default: 1 byte. Used when skipping bytes. */ + if ((*p & 0x80) == 0) + high = (utf8_wchar_t)*p; + else if ((*p & 0xe0) == _SEQ2) + { + n = 2; + high = (utf8_wchar_t)(*p & 0x1f); + } + else if ((*p & 0xf0) == _SEQ3) + { + n = 3; + high = (utf8_wchar_t)(*p & 0x0f); + } + else if ((*p & 0xf8) == _SEQ4) + { + n = 4; + high = (utf8_wchar_t)(*p & 0x07); + } + else if ((*p & 0xfc) == _SEQ5) + { + n = 5; + high = (utf8_wchar_t)(*p & 0x03); + } + else if ((*p & 0xfe) == _SEQ6) + { + n = 6; + high = (utf8_wchar_t)(*p & 0x01); + } + else + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + continue; + } + + /* does the sequence header tell us truth about length? */ + if (lim - p <= n - 1) + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + n = 1; + continue; /* skip */ + } + + /* + * Validate sequence. + * All symbols must have higher bits set to 10xxxxxx + */ + if (n > 1) + { + for (i = 1; i < n; i++) + { + if ((p[i] & 0xc0) != _NXT) + break; + } + if (i != n) + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + n = 1; + continue; /* skip */ + } + } + + total++; + + if (out == NULL) + continue; + + if (out >= wlim) + return (0); /* no space left */ + + uint32_t out_val = 0; + *out = 0; + n_bits = 0; + for (i = 1; i < n; i++) + { + out_val |= (utf8_wchar_t)(p[n - i] & 0x3f) << n_bits; + n_bits += 6; /* 6 low bits in every byte */ + } + out_val |= high << n_bits; + + bool skip = false; + if (__wchar_forbitten(out_val) != 0) + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + { + return 0; /* forbitten character */ + } + else + { + skip = true; + } + } + else if (out_val == _BOM && (flags & UTF8_SKIP_BOM) != 0) + { + skip = true; + } + + if (skip) + { + total--; + } + else if (out_val > UTF8_WCHAR_MAX) + { + // wchar_t is UCS-2, but the UTF-8 specified an astral character + return 0; + } + else + { + *out++ = out_val; + } + } + + return (total); +} + +/* + * DESCRIPTION + * This function translates UCS-2/4 symbols (given in local machine + * byte order) into UTF-8 string. + * + * It takes the following arguments: + * in - input unicode string. It can be null-terminated. + * insize - size of input string in wide characters. + * out - result buffer for utf8 string. If out is NULL, + * function returns size of result buffer. + * outsize - size of result buffer. + * + * RETURN VALUES + * The function returns size of result buffer (in bytes). Zero is returned + * in case of error. + * + * CAVEATS + * If UCS-4 string contains zero symbols, they will be translated + * as regular symbols. + */ +static size_t wchar_to_utf8_internal(const utf8_wchar_t *in, size_t insize, char *out, size_t outsize, int flags) +{ + const utf8_wchar_t *w, *wlim; + unsigned char *p, *lim; + size_t total, n; + + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + return (0); + + w = in; + wlim = w + insize; + p = (unsigned char *)out; + lim = p + outsize; + total = 0; + for (; w < wlim; w++) + { + if (__wchar_forbitten(*w) != 0) + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + else + continue; + } + + if (*w == _BOM && (flags & UTF8_SKIP_BOM) != 0) + continue; + + const int32_t w_wide = *w; + if (w_wide < 0) + { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + continue; + } + else if (w_wide <= 0x0000007f) + n = 1; + else if (w_wide <= 0x000007ff) + n = 2; + else if (w_wide <= 0x0000ffff) + n = 3; + else if (w_wide <= 0x001fffff) + n = 4; + else if (w_wide <= 0x03ffffff) + n = 5; + else /* if (w_wide <= 0x7fffffff) */ + n = 6; + + total += n; + + if (out == NULL) + continue; + + if (lim - p <= n - 1) + return (0); /* no space left */ + + /* extract the wchar_t as big-endian. If wchar_t is UCS-16, the first two bytes will be 0 */ + unsigned char oc[4]; + uint32_t w_tmp = *w; + oc[3] = w_tmp & 0xFF; + w_tmp >>= 8; + oc[2] = w_tmp & 0xFF; + w_tmp >>= 8; + oc[1] = w_tmp & 0xFF; + w_tmp >>= 8; + oc[0] = w_tmp & 0xFF; + + switch (n) + { + case 1: + p[0] = oc[3]; + break; + + case 2: + p[1] = _NXT | (oc[3] & 0x3f); + p[0] = _SEQ2 | (oc[3] >> 6) | ((oc[2] & 0x07) << 2); + break; + + case 3: + p[2] = _NXT | (oc[3] & 0x3f); + p[1] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[0] = _SEQ3 | ((oc[2] & 0xf0) >> 4); + break; + + case 4: + p[3] = _NXT | (oc[3] & 0x3f); + p[2] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[1] = _NXT | ((oc[2] & 0xf0) >> 4) | + ((oc[1] & 0x03) << 4); + p[0] = _SEQ4 | ((oc[1] & 0x1f) >> 2); + break; + + case 5: + p[4] = _NXT | (oc[3] & 0x3f); + p[3] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[2] = _NXT | ((oc[2] & 0xf0) >> 4) | + ((oc[1] & 0x03) << 4); + p[1] = _NXT | (oc[1] >> 2); + p[0] = _SEQ5 | (oc[0] & 0x03); + break; + + case 6: + p[5] = _NXT | (oc[3] & 0x3f); + p[4] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[3] = _NXT | (oc[2] >> 4) | ((oc[1] & 0x03) << 4); + p[2] = _NXT | (oc[1] >> 2); + p[1] = _NXT | (oc[0] & 0x3f); + p[0] = _SEQ6 | ((oc[0] & 0x40) >> 6); + break; + } + + /* + * NOTE: do not check here for forbitten UTF-8 characters. + * They cannot appear here because we do proper convertion. + */ + + p += n; + } + + return (total); +} diff --git a/utf8.h b/utf8.h new file mode 100644 index 000000000..18aa52658 --- /dev/null +++ b/utf8.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2007 Alexey Vatchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * utf8: implementation of UTF-8 charset encoding (RFC3629). + */ +#ifndef _UTF8_H_ +#define _UTF8_H_ + +#include + +#include +#include + +#define UTF8_IGNORE_ERROR 0x01 +#define UTF8_SKIP_BOM 0x02 + +bool utf8_to_wchar_string(const std::string &input, std::wstring *result); +bool wchar_to_utf8_string(const std::wstring &input, std::string *result); + +size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize, int flags); +size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize, int flags); + +bool is_wchar_ucs2(); + +#endif /* !_UTF8_H_ */ From a67dd9fbdd475ce386f9d87f83e7a1c628777eff Mon Sep 17 00:00:00 2001 From: Siteshwar Vashisht Date: Sun, 23 Mar 2014 15:09:43 +0530 Subject: [PATCH 135/145] Included missing stdint.h header in utf8.cpp --- utf8.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utf8.cpp b/utf8.cpp index 60d83d33d..196b52681 100644 --- a/utf8.cpp +++ b/utf8.cpp @@ -13,8 +13,9 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include +#include +#include #include #include "utf8.h" @@ -23,7 +24,6 @@ #include #include - #define _NXT 0x80 #define _SEQ2 0xc0 #define _SEQ3 0xe0 From 9718e70260fd44ede9409711d7d0a8efcf131c20 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 23 Mar 2014 13:06:24 -0700 Subject: [PATCH 136/145] Naive reimplementation of utf2wcs and wcs2utf in env_universal_common.cpp. These use the new utf8 functions exposed in utf8.h. This will allow us to drop the iconv dependency. --- env_universal_common.cpp | 305 ++------------------------------------- utf8.h | 2 + 2 files changed, 17 insertions(+), 290 deletions(-) diff --git a/env_universal_common.cpp b/env_universal_common.cpp index c175b4a14..048396afa 100644 --- a/env_universal_common.cpp +++ b/env_universal_common.cpp @@ -21,7 +21,6 @@ #include #include #include -#include #include #include @@ -39,6 +38,7 @@ #include "common.h" #include "wutil.h" +#include "utf8.h" #include "env_universal_common.h" /** @@ -116,304 +116,29 @@ static void (*callback)(fish_message_type_t type, const wchar_t *key, const wchar_t *val); -/** - List of names for the UTF-8 character set. - */ -static const char *iconv_utf8_names[]= +/* UTF <-> wchar conversions. These return a string allocated with malloc. These call sites could be cleaned up substantially to eliminate the dependence on malloc. */ +static wchar_t *utf2wcs(const char *input) { - "utf-8", "UTF-8", - "utf8", "UTF8", - 0 -} -; - -/** - List of wide character names, undefined byte length. - */ -static const char *iconv_wide_names_unknown[]= -{ - "wchar_t", "WCHAR_T", - "wchar", "WCHAR", - 0 -} -; - -/** - List of wide character names, 4 bytes long. - */ -static const char *iconv_wide_names_4[]= -{ - "wchar_t", "WCHAR_T", - "wchar", "WCHAR", - "ucs-4", "UCS-4", - "ucs4", "UCS4", - "utf-32", "UTF-32", - "utf32", "UTF32", - 0 -} -; - -/** - List of wide character names, 2 bytes long. - */ -static const char *iconv_wide_names_2[]= -{ - "wchar_t", "WCHAR_T", - "wchar", "WCHAR", - "ucs-2", "UCS-2", - "ucs2", "UCS2", - "utf-16", "UTF-16", - "utf16", "UTF16", - 0 -} -; - -template -class sloppy {}; - -static size_t hack_iconv(iconv_t cd, const char * const* inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) -{ - /* FreeBSD has this prototype: size_t iconv (iconv_t, const char **...) - OS X and Linux this one: size_t iconv (iconv_t, char **...) - AFAIK there's no single type that can be passed as both char ** and const char **. - Therefore, we let C++ figure it out, by providing a struct with an implicit conversion to both char** and const char **. - */ - struct sloppy_char + wchar_t *result = NULL; + wcstring converted; + if (utf8_to_wchar_string(input, &converted)) { - const char * const * t; - operator char** () const - { - return (char **)t; - } - operator const char** () const - { - return (const char**)t; - } - } slop_inbuf = {inbuf}; - - return iconv(cd, slop_inbuf, inbytesleft, outbuf, outbytesleft); + result = wcsdup(converted.c_str()); + } + return result; } -/** - Convert utf-8 string to wide string - */ -static wchar_t *utf2wcs(const char *in) +static char *wcs2utf(const wchar_t *input) { - iconv_t cd=(iconv_t) -1; - int i,j; - - wchar_t *out; - - /* - Try to convert to wchar_t. If that is not a valid character set, - try various names for ucs-4. We can't be sure that ucs-4 is - really the character set used by wchar_t, but it is the best - assumption we can make. - */ - const char **to_name=0; - - switch (sizeof(wchar_t)) + char *result = NULL; + std::string converted; + if (wchar_to_utf8_string(input, &converted)) { - - case 2: - to_name = iconv_wide_names_2; - break; - - case 4: - to_name = iconv_wide_names_4; - break; - - default: - to_name = iconv_wide_names_unknown; - break; + result = strdup(converted.c_str()); } - - - /* - The line protocol fish uses is always utf-8. - */ - const char **from_name = iconv_utf8_names; - - size_t in_len = strlen(in); - size_t out_len = sizeof(wchar_t)*(in_len+2); - size_t nconv; - char *nout; - - out = (wchar_t *)malloc(out_len); - nout = (char *)out; - - if (!out) - return 0; - - for (i=0; to_name[i]; i++) - { - for (j=0; from_name[j]; j++) - { - cd = iconv_open(to_name[i], from_name[j]); - - if (cd != (iconv_t) -1) - { - goto start_conversion; - - } - } - } - -start_conversion: - - if (cd == (iconv_t) -1) - { - /* Something went wrong. */ - debug(0, L"Could not perform utf-8 conversion"); - if (errno != EINVAL) - wperror(L"iconv_open"); - - /* Terminate the output string. */ - free(out); - return 0; - } - - /* FreeBSD has this prototype: size_t iconv (iconv_t, const char **...) - OS X and Linux this one: size_t iconv (iconv_t, char **...) - AFAIK there's no single type that can be passed as both char ** and const char **. - Hence this hack. - */ - nconv = hack_iconv(cd, &in, &in_len, &nout, &out_len); - - if (nconv == (size_t) -1) - { - debug(0, L"Error while converting from utf string"); - return 0; - } - - *((wchar_t *) nout) = L'\0'; - - /* - Check for silly iconv behaviour inserting an bytemark in the output - string. - */ - if (*out == L'\xfeff' || *out == L'\xffef' || *out == L'\xefbbbf') - { - wchar_t *out_old = out; - out = wcsdup(out+1); - if (! out) - { - debug(0, L"FNORD!!!!"); - free(out_old); - return 0; - } - free(out_old); - } - - - if (iconv_close(cd) != 0) - wperror(L"iconv_close"); - - return out; + return result; } - - -/** - Convert wide string to utf-8 - */ -static char *wcs2utf(const wchar_t *in) -{ - iconv_t cd=(iconv_t) -1; - int i,j; - - char *char_in = (char *)in; - char *out; - - /* - Try to convert to wchar_t. If that is not a valid character set, - try various names for ucs-4. We can't be sure that ucs-4 is - really the character set used by wchar_t, but it is the best - assumption we can make. - */ - const char **from_name=0; - - switch (sizeof(wchar_t)) - { - - case 2: - from_name = iconv_wide_names_2; - break; - - case 4: - from_name = iconv_wide_names_4; - break; - - default: - from_name = iconv_wide_names_unknown; - break; - } - - const char **to_name = iconv_utf8_names; - - size_t in_len = wcslen(in); - size_t out_len = sizeof(char)*((MAX_UTF8_BYTES*in_len)+1); - size_t nconv; - char *nout; - - out = (char *)malloc(out_len); - nout = (char *)out; - in_len *= sizeof(wchar_t); - - if (!out) - return 0; - - for (i=0; to_name[i]; i++) - { - for (j=0; from_name[j]; j++) - { - cd = iconv_open(to_name[i], from_name[j]); - - if (cd != (iconv_t) -1) - { - goto start_conversion; - - } - } - } - -start_conversion: - - if (cd == (iconv_t) -1) - { - /* Something went wrong. */ - debug(0, L"Could not perform utf-8 conversion"); - if (errno != EINVAL) - wperror(L"iconv_open"); - - /* Terminate the output string. */ - free(out); - return 0; - } - - nconv = hack_iconv(cd, &char_in, &in_len, &nout, &out_len); - - - if (nconv == (size_t) -1) - { - 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; - } - - *nout = '\0'; - - if (iconv_close(cd) != 0) - wperror(L"iconv_close"); - - return out; -} - - - void env_universal_common_init(void (*cb)(fish_message_type_t type, const wchar_t *key, const wchar_t *val)) { callback = cb; diff --git a/utf8.h b/utf8.h index 18aa52658..a1f501545 100644 --- a/utf8.h +++ b/utf8.h @@ -28,9 +28,11 @@ #define UTF8_IGNORE_ERROR 0x01 #define UTF8_SKIP_BOM 0x02 +/* Convert a string between UTF8 and UCS-2/4 (depending on size of wchar_t). Returns true if successful, storing the result of the conversion in *result */ bool utf8_to_wchar_string(const std::string &input, std::wstring *result); bool wchar_to_utf8_string(const std::wstring &input, std::string *result); +/* Variants exposed for testing */ size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize, int flags); size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize, int flags); From 0d64bbed46f07f78a24449139d11e7fafe968e4e Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sun, 23 Mar 2014 13:29:57 -0700 Subject: [PATCH 137/145] Stop linking iconv, now that we have our own utf8 conversion routines --- configure.ac | 7 ------- fish.xcodeproj/project.pbxproj | 10 ---------- 2 files changed, 17 deletions(-) diff --git a/configure.ac b/configure.ac index b5ba9f0ba..f30187fbb 100644 --- a/configure.ac +++ b/configure.ac @@ -105,8 +105,6 @@ echo "CXXFLAGS: $CXXFLAGS" # # This mostly helps OS X users, since fink usually installs out of # tree and doesn't update CXXFLAGS. -# -# It also helps FreeBSD which puts libiconv in /usr/local/lib for i in /usr/pkg /sw /opt /opt/local /usr/local; do @@ -421,10 +419,6 @@ LIBS_SHARED=$LIBS # LIBS="$LIBS_SHARED" -# 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 # @@ -439,7 +433,6 @@ LIBS_FISH_INDENT=$LIBS # LIBS="$LIBS_SHARED" -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 # diff --git a/fish.xcodeproj/project.pbxproj b/fish.xcodeproj/project.pbxproj index 47d04c4cc..c7a6abaed 100644 --- a/fish.xcodeproj/project.pbxproj +++ b/fish.xcodeproj/project.pbxproj @@ -113,7 +113,6 @@ D08A32B917B446B100F3A533 /* parse_productions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0FE8EE7179FB75F008C9F21 /* parse_productions.cpp */; }; D08A32BA17B446B100F3A533 /* parse_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0C52F351765284C00BFAB82 /* parse_tree.cpp */; }; D08A32BC17B4473B00F3A533 /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; - D08A32BD17B4474000F3A533 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; D0A564FE168D23D800AF6161 /* man in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; }; D0A56501168D258300AF6161 /* man in Copy Files */ = {isa = PBXBuildFile; fileRef = D0A564F1168D0BAB00AF6161 /* man */; }; D0C52F371765284C00BFAB82 /* parse_tree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0C52F351765284C00BFAB82 /* parse_tree.cpp */; }; @@ -154,7 +153,6 @@ D0D02A87159839D5008E62BD /* screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855A13B3ACEE0099B651 /* screen.cpp */; }; D0D02A88159839D5008E62BD /* signal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855C13B3ACEE0099B651 /* signal.cpp */; }; D0D02A89159839DF008E62BD /* fish.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854213B3ACEE0099B651 /* fish.cpp */; }; - D0D02A8B15983CDF008E62BD /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; D0D02A8D15983CFA008E62BD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; D0D02A8F15983D8F008E62BD /* parser_keywords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855313B3ACEE0099B651 /* parser_keywords.cpp */; }; D0D02AC215985F3F008E62BD /* fishd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854313B3ACEE0099B651 /* fishd.cpp */; }; @@ -163,7 +161,6 @@ D0D02AC515985F5B008E62BD /* print_help.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855613B3ACEE0099B651 /* print_help.cpp */; }; D0D02AC615985F65008E62BD /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853613B3ACEE0099B651 /* common.cpp */; }; D0D02AC715985F9D008E62BD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; - D0D02AC815985F9F008E62BD /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; D0D02AD615986492008E62BD /* fish_indent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853F13B3ACEE0099B651 /* fish_indent.cpp */; }; D0D02AD715986498008E62BD /* print_help.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855613B3ACEE0099B651 /* print_help.cpp */; }; D0D02AD81598649E008E62BD /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853613B3ACEE0099B651 /* common.cpp */; }; @@ -171,7 +168,6 @@ D0D02ADA159864AB008E62BD /* wutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0856113B3ACEE0099B651 /* wutil.cpp */; }; D0D02ADB159864C2008E62BD /* tokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0855D13B3ACEE0099B651 /* tokenizer.cpp */; }; D0D02ADC159864D5008E62BD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8C15983CFA008E62BD /* libncurses.dylib */; }; - D0D02ADD159864D7008E62BD /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D02A8A15983CDF008E62BD /* libiconv.dylib */; }; D0D2694915983772005D9B9C /* function.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0854413B3ACEE0099B651 /* function.cpp */; }; D0D2694A15983779005D9B9C /* builtin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D0A0853513B3ACEE0099B651 /* builtin.cpp */; }; D0F019F115A977140034B3B1 /* fish in CopyFiles */ = {isa = PBXBuildFile; fileRef = D0D2693C159835CA005D9B9C /* fish */; }; @@ -483,7 +479,6 @@ D0CBD580159EE48F0024809C /* config.fish */ = {isa = PBXFileReference; lastKnownFileType = text; name = config.fish; path = share/config.fish; sourceTree = ""; }; D0CBD583159EEE010024809C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; D0CBD586159EF0E10024809C /* launch_fish.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = launch_fish.scpt; path = osx/launch_fish.scpt; sourceTree = ""; }; - D0D02A8A15983CDF008E62BD /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; D0D02A8C15983CFA008E62BD /* libncurses.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libncurses.dylib; path = usr/lib/libncurses.dylib; sourceTree = SDKROOT; }; D0D02A9A15985A75008E62BD /* fish.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fish.app; sourceTree = BUILT_PRODUCTS_DIR; }; D0D02AA915985C0C008E62BD /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = osx/Info.plist; sourceTree = ""; }; @@ -503,7 +498,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D08A32BD17B4474000F3A533 /* libiconv.dylib in Frameworks */, D08A32BC17B4473B00F3A533 /* libncurses.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -513,7 +507,6 @@ buildActionMask = 2147483647; files = ( D0D02AC715985F9D008E62BD /* libncurses.dylib in Frameworks */, - D0D02AC815985F9F008E62BD /* libiconv.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -522,7 +515,6 @@ buildActionMask = 2147483647; files = ( D0D02ADC159864D5008E62BD /* libncurses.dylib in Frameworks */, - D0D02ADD159864D7008E62BD /* libiconv.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -531,7 +523,6 @@ buildActionMask = 2147483647; files = ( D0D02A8D15983CFA008E62BD /* libncurses.dylib in Frameworks */, - D0D02A8B15983CDF008E62BD /* libiconv.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -587,7 +578,6 @@ isa = PBXGroup; children = ( D0D02A8C15983CFA008E62BD /* libncurses.dylib */, - D0D02A8A15983CDF008E62BD /* libiconv.dylib */, D0CBD583159EEE010024809C /* Foundation.framework */, ); name = Libraries; From a4cafaad2e2eabcf3262ae503d616d767c9d0f4d Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 25 Mar 2014 00:34:22 -0700 Subject: [PATCH 138/145] Turn on the new "ast" parser by default for execution. This change replaces fish's execution model, and obviates much of parser_t. Instead of parsing fish code into a sequence of commands-arguments, this reifies syntactic constructs into a grammar, builds a parse tree, and executes that. This provides a big simplification and (sometimes) performance boost. fish while loops become C++ while loops, etc. There are some known regressions in error reporting, which ought to be fixed in the soon-to-be-merged parser_cleanup branch. There's also legitimate changes in edge cases. For example, `command builtin ...` now executes a command called "builtin" instead of doing something else weird. The most significant change is that syntactic elements must be unexpected: for example, single quoting 'command' will now cause it to not be recognized. This should be fixed soon. Please open issues for any regressions you find! --- parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parser.cpp b/parser.cpp index d512f77ef..077d78747 100644 --- a/parser.cpp +++ b/parser.cpp @@ -3145,7 +3145,7 @@ bool parser_use_ast(void) env_var_t var = env_get_string(L"fish_new_parser"); if (var.missing_or_empty()) { - return 0; + return 1; } else { From b520a03c57a510b978ac5ee3382b446b72107669 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 25 Mar 2014 12:44:21 -0700 Subject: [PATCH 139/145] Prefer swap() member function to std::swap. We were hitting the inefficient generic std::swap for some derived types. --- builtin_set_color.cpp | 5 ++--- highlight.cpp | 2 +- parse_execution.cpp | 2 +- parse_tree.cpp | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/builtin_set_color.cpp b/builtin_set_color.cpp index 6e8f55b0a..0fdc1ac0b 100644 --- a/builtin_set_color.cpp +++ b/builtin_set_color.cpp @@ -235,9 +235,8 @@ static int builtin_set_color(parser_t &parser, wchar_t **argv) output_set_writer(saved_writer_func); /* Output the collected string */ - std::string local_output; - std::swap(builtin_set_color_output, local_output); - stdout_buffer.append(str2wcstring(local_output)); + stdout_buffer.append(str2wcstring(builtin_set_color_output)); + builtin_set_color_output.clear(); return STATUS_BUILTIN_OK; } diff --git a/highlight.cpp b/highlight.cpp index eaaec750a..87985ae6b 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -350,7 +350,7 @@ bool plain_statement_get_expanded_command(const wcstring &src, const parse_node_ if (expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS)) { /* Success, return the expanded string by reference */ - std::swap(cmd, *out_cmd); + out_cmd->swap(cmd); result = true; } } diff --git a/parse_execution.cpp b/parse_execution.cpp index 15c7de5f2..9267fb79b 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -1090,7 +1090,7 @@ bool parse_execution_context_t::determine_io_chain(const parse_node_t &statement if (out_chain && ! errored) { - std::swap(*out_chain, result); + out_chain->swap(result); } return ! errored; } diff --git a/parse_tree.cpp b/parse_tree.cpp index ae8e42d02..a1de4f966 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -687,13 +687,13 @@ void parse_ll_t::acquire_output(parse_node_tree_t *output, parse_error_list_t *e { if (output != NULL) { - std::swap(*output, this->nodes); + output->swap(this->nodes); } this->nodes.clear(); if (errors != NULL) { - std::swap(*errors, this->errors); + errors->swap(this->errors); } this->errors.clear(); this->symbol_stack.clear(); From 9fece3fdf17ae642260ab8f8b85cb97a65bd14f7 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 25 Mar 2014 20:06:34 -0700 Subject: [PATCH 140/145] Space and time optimizations for parse_node_t. Reduced size from 48 bytes to 20 bytes. --- osx/config.h | 2 ++ parse_constants.h | 4 +-- parse_execution.cpp | 3 +- parse_tree.cpp | 69 ++++++++++++++++++++++++--------------------- parse_tree.h | 33 +++++++++++++--------- 5 files changed, 63 insertions(+), 48 deletions(-) diff --git a/osx/config.h b/osx/config.h index 4968a78b2..99f837427 100644 --- a/osx/config.h +++ b/osx/config.h @@ -218,7 +218,9 @@ #if __GNUC__ >= 3 #define __warn_unused __attribute__ ((warn_unused_result)) #define __sentinel __attribute__ ((sentinel)) +#define __packed __attribute__ ((packed)) #else #define __warn_unused #define __sentinel +#define __packed #endif diff --git a/parse_constants.h b/parse_constants.h index 8ff96407f..10818ffd0 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -70,7 +70,7 @@ enum parse_token_type_t LAST_TOKEN_OR_SYMBOL = parse_token_type_terminate, FIRST_PARSE_TOKEN_TYPE = parse_token_type_string -}; +} __packed; enum parse_keyword_t { @@ -93,7 +93,7 @@ enum parse_keyword_t parse_keyword_exec, LAST_KEYWORD = parse_keyword_builtin -}; +} __packed; /* Statement decorations. This matches the order of productions in decorated_statement */ enum parse_statement_decoration_t diff --git a/parse_execution.cpp b/parse_execution.cpp index 9267fb79b..484d8741e 100644 --- a/parse_execution.cpp +++ b/parse_execution.cpp @@ -72,7 +72,8 @@ node_offset_t parse_execution_context_t::get_offset(const parse_node_t &node) co const parse_node_t *addr = &node; const parse_node_t *base = &this->tree.at(0); assert(addr >= base); - node_offset_t offset = addr - base; + assert(addr - base < SOURCE_OFFSET_INVALID); + node_offset_t offset = static_cast(addr - base); assert(offset < this->tree.size()); assert(&tree.at(offset) == &node); return offset; diff --git a/parse_tree.cpp b/parse_tree.cpp index a1de4f966..7ea8481a9 100644 --- a/parse_tree.cpp +++ b/parse_tree.cpp @@ -13,6 +13,13 @@ static bool production_is_empty(const production_t *production) return (*production)[0] == token_type_invalid; } +void swap2(parse_node_tree_t &a, parse_node_tree_t &b) +{ + fprintf(stderr, "Swapping!\n"); + // This uses the base vector implementation + a.swap(b); +} + /** Returns a string description of this parse error */ wcstring parse_error_t::describe_with_prefix(const wcstring &src, const wcstring &prefix, bool skip_caret) const { @@ -404,7 +411,7 @@ static void dump_tree_recursive(const parse_node_tree_t &nodes, const wcstring & result->push_back(L'\n'); ++*line; - for (size_t child_idx = node.child_start; child_idx < node.child_start + node.child_count; child_idx++) + for (node_offset_t child_idx = node.child_start; child_idx < node.child_start + node.child_count; child_idx++) { dump_tree_recursive(nodes, src, child_idx, indent + 1, result, line, inout_first_node_not_dumped); } @@ -529,28 +536,31 @@ class parse_ll_t } // Get the parent index. But we can't get the parent parse node yet, since it may be made invalid by adding children - const size_t parent_node_idx = symbol_stack.back().node_idx; + const node_offset_t parent_node_idx = symbol_stack.back().node_idx; // Add the children. Confusingly, we want our nodes to be in forwards order (last token last, so dumps look nice), but the symbols should be reverse order (last token first, so it's lowest on the stack) - const size_t child_start = nodes.size(); - size_t child_count = 0; + const size_t child_start_big = nodes.size(); + assert(child_start_big < NODE_OFFSET_INVALID); + node_offset_t child_start = static_cast(child_start_big); + + // To avoid constructing multiple nodes, we push_back a single one that we modify + parse_node_t representative_child(token_type_invalid); + representative_child.parent = parent_node_idx; + + node_offset_t child_count = 0; for (size_t i=0; i < MAX_SYMBOLS_PER_PRODUCTION; i++) { production_element_t elem = (*production)[i]; - if (!production_element_is_valid(elem)) + if (! production_element_is_valid(elem)) { // All done, bail out break; } - else - { - // Generate the parse node. - parse_token_type_t child_type = production_element_type(elem); - parse_node_t child = parse_node_t(child_type); - child.parent = parent_node_idx; - nodes.push_back(child); - child_count++; - } + + // Append the parse node. + representative_child.type = production_element_type(elem); + nodes.push_back(representative_child); + child_count++; } // Update the parent @@ -566,7 +576,7 @@ class parse_ll_t // Replace the top of the stack with new stack elements corresponding to our new nodes. Note that these go in reverse order. symbol_stack.pop_back(); symbol_stack.reserve(symbol_stack.size() + child_count); - size_t idx = child_count; + node_offset_t idx = child_count; while (idx--) { production_element_t elem = (*production)[idx]; @@ -652,18 +662,17 @@ void parse_ll_t::dump_stack(void) const // Since children always appear after their parents, we can implement this very simply by walking backwards void parse_ll_t::determine_node_ranges(void) { - const size_t source_start_invalid = -1; size_t idx = nodes.size(); while (idx--) { - parse_node_t *parent = &nodes.at(idx); + parse_node_t *parent = &nodes[idx]; // Skip nodes that already have a source range. These are terminal nodes. - if (parent->source_start != source_start_invalid) + if (parent->source_start != SOURCE_OFFSET_INVALID) continue; // Ok, this node needs a source range. Get all of its children, and then set its range. - size_t min_start = source_start_invalid, max_end = 0; //note source_start_invalid is huge + source_offset_t min_start = SOURCE_OFFSET_INVALID, max_end = 0; //note SOURCE_OFFSET_INVALID is huge for (node_offset_t i=0; i < parent->child_count; i++) { const parse_node_t &child = nodes.at(parent->child_offset(i)); @@ -674,7 +683,7 @@ void parse_ll_t::determine_node_ranges(void) } } - if (min_start != source_start_invalid) + if (min_start != SOURCE_OFFSET_INVALID) { assert(max_end >= min_start); parent->source_start = min_start; @@ -831,7 +840,7 @@ void parse_ll_t::parse_error(const wchar_t *expected, parse_token_t token) void parse_ll_t::reset_symbols(enum parse_token_type_t goal) { /* Add a new goal node, and then reset our symbol list to point at it */ - node_offset_t where = nodes.size(); + node_offset_t where = static_cast(nodes.size()); nodes.push_back(parse_node_t(goal)); symbol_stack.clear(); @@ -1047,14 +1056,10 @@ static parse_keyword_t keyword_for_token(token_type tok, const wchar_t *tok_txt) } /* Placeholder invalid token */ -static const parse_token_t kInvalidToken = {token_type_invalid, -parse_keyword_none, false, false, static_cast(-1), - static_cast(-1)}; +static const parse_token_t kInvalidToken = {token_type_invalid, parse_keyword_none, false, false, SOURCE_OFFSET_INVALID, 0}; /* Terminal token */ -static const parse_token_t kTerminalToken = {parse_token_type_terminate, -parse_keyword_none, false, false, static_cast(-1), - static_cast(-1)}; +static const parse_token_t kTerminalToken = {parse_token_type_terminate, parse_keyword_none, false, false, SOURCE_OFFSET_INVALID, 0}; static inline bool is_help_argument(const wchar_t *txt) { @@ -1082,8 +1087,8 @@ static inline parse_token_t next_parse_token(tokenizer_t *tok) result.keyword = keyword_for_token(tok_type, tok_txt); result.has_dash_prefix = (tok_txt[0] == L'-'); result.is_help_argument = result.has_dash_prefix && is_help_argument(tok_txt); - result.source_start = (size_t)tok_start; - result.source_length = tok_extent; + result.source_start = (source_offset_t)tok_start; + result.source_length = (source_offset_t)tok_extent; tok_next(tok); return result; @@ -1195,7 +1200,7 @@ const parse_node_t *parse_node_tree_t::get_child(const parse_node_t &parent, nod const parse_node_t &parse_node_tree_t::find_child(const parse_node_t &parent, parse_token_type_t type) const { - for (size_t i=0; i < parent.child_count; i++) + for (node_offset_t i=0; i < parent.child_count; i++) { const parse_node_t *child = this->get_child(parent, i); if (child->type == type) @@ -1241,7 +1246,7 @@ static void find_nodes_recursive(const parse_node_tree_t &tree, const parse_node if (result->size() < max_count) { if (parent.type == type) result->push_back(&parent); - for (size_t i=0; i < parent.child_count; i++) + for (node_offset_t i=0; i < parent.child_count; i++) { const parse_node_t *child = tree.get_child(parent, i); assert(child != NULL); @@ -1478,7 +1483,7 @@ const parse_node_t *parse_node_tree_t::next_node_in_node_list(const parse_node_t const parse_node_t *next_cursor = NULL; /* Walk through the children */ - for (size_t i=0; i < list_cursor->child_count; i++) + for (node_offset_t i=0; i < list_cursor->child_count; i++) { const parse_node_t *child = this->get_child(*list_cursor, i); if (child->type == entry_type) diff --git a/parse_tree.h b/parse_tree.h index f6406be4f..2f0beb293 100644 --- a/parse_tree.h +++ b/parse_tree.h @@ -18,9 +18,15 @@ class parse_node_t; class parse_node_tree_t; -typedef size_t node_offset_t; + +typedef uint32_t node_offset_t; + #define NODE_OFFSET_INVALID (static_cast(-1)) +typedef uint32_t source_offset_t; + +#define SOURCE_OFFSET_INVALID (static_cast(-1)) + struct parse_error_t { /** Text of the error */ @@ -51,8 +57,8 @@ struct parse_token_t enum parse_keyword_t keyword; // Any keyword represented by this token bool has_dash_prefix; // Hackish: whether the source contains a dash prefix bool is_help_argument; // Hackish: whether the source looks like '-h' or '--help' - size_t source_start; - size_t source_length; + source_offset_t source_start; + source_offset_t source_length; wcstring describe() const; wcstring user_presentable_description() const; @@ -83,35 +89,36 @@ wcstring parse_dump_tree(const parse_node_tree_t &tree, const wcstring &src); wcstring token_type_description(parse_token_type_t type); wcstring keyword_description(parse_keyword_t type); -/** Class for nodes of a parse tree */ +/** Class for nodes of a parse tree. Since there's a lot of these, the size and order of the fields is important. */ class parse_node_t { public: - - /* Type of the node */ - enum parse_token_type_t type; - /* Start in the source code */ - size_t source_start; + source_offset_t source_start; /* Length of our range in the source code */ - size_t source_length; + source_offset_t source_length; /* Parent */ node_offset_t parent; /* Children */ node_offset_t child_start; + + /* Number of children */ uint8_t child_count; /* Which production was used */ uint8_t production_idx; + + /* Type of the node */ + enum parse_token_type_t type; /* Description */ wcstring describe(void) const; /* Constructor */ - explicit parse_node_t(parse_token_type_t ty) : type(ty), source_start(-1), source_length(0), parent(NODE_OFFSET_INVALID), child_start(0), child_count(0), production_idx(-1) + explicit parse_node_t(parse_token_type_t ty) : source_start(SOURCE_OFFSET_INVALID), source_length(0), parent(NODE_OFFSET_INVALID), child_start(0), child_count(0), production_idx(-1), type(ty) { } @@ -124,7 +131,7 @@ public: /* Indicate if this node has a range of source code associated with it */ bool has_source() const { - return source_start != (size_t)(-1); + return source_start != SOURCE_OFFSET_INVALID; } /* Gets source for the node, or the empty string if it has no source */ @@ -143,7 +150,6 @@ public: } }; - /* The parse tree itself */ class parse_node_tree_t : public std::vector { @@ -200,6 +206,7 @@ public: parse_node_list_t specific_statements_for_job(const parse_node_t &job) const; }; + /* The big entry point. Parse a string, attempting to produce a tree for the given goal type */ bool parse_tree_from_string(const wcstring &str, parse_tree_flags_t flags, parse_node_tree_t *output, parse_error_list_t *errors, parse_token_type_t goal = symbol_job_list); From 2db013a5fa379dae477e4bebc436ea387b674f93 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 25 Mar 2014 20:13:33 -0700 Subject: [PATCH 141/145] Hopeful fix for the build --- parse_constants.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/parse_constants.h b/parse_constants.h index 10818ffd0..7b664383c 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -6,10 +6,11 @@ #ifndef fish_parse_constants_h #define fish_parse_constants_h +#include "config.h" + #define PARSE_ASSERT(a) assert(a) #define PARSER_DIE() do { fprintf(stderr, "Parser dying!\n"); exit_without_destructors(-1); } while (0) - enum parse_token_type_t { token_type_invalid, From d533c1b1c8288b738e4fbab2a0d58964d4c66d81 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Tue, 25 Mar 2014 20:23:58 -0700 Subject: [PATCH 142/145] Second attempt to fix the build. config.h.in changes need to go in configure.ac. --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac index f30187fbb..91f4f88cb 100644 --- a/configure.ac +++ b/configure.ac @@ -149,9 +149,11 @@ AC_CONFIG_HEADERS(config.h) AH_BOTTOM([#if __GNUC__ >= 3 #define __warn_unused __attribute__ ((warn_unused_result)) #define __sentinel __attribute__ ((sentinel)) +#define __packed __attribute__ ((packed)) #else #define __warn_unused #define __sentinel +#define __packed #endif]) From 7a7fb423b306d3de62ef62ff4c8cbded2cdd0f10 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 26 Mar 2014 10:00:32 -0700 Subject: [PATCH 143/145] Remove some unused function declarations --- highlight.cpp | 2 -- highlight.h | 5 ----- 2 files changed, 7 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index 87985ae6b..d6db4c462 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -44,8 +44,6 @@ */ #define VAR_COUNT ( sizeof(highlight_var)/sizeof(wchar_t *) ) -static void highlight_universal_internal(const wcstring &buff, std::vector &color, size_t pos); - /** The environment variables used to specify the color of different tokens. This matches the order in highlight_spec_t */ static const wchar_t * const highlight_var[] = { diff --git a/highlight.h b/highlight.h index 6ef411f94..d411ae369 100644 --- a/highlight.h +++ b/highlight.h @@ -75,7 +75,6 @@ struct file_detection_context_t; \param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated. */ void highlight_shell(const wcstring &buffstr, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); -void highlight_shell_new_parser(const wcstring &buffstr, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); /** Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are highlighted. The result is @@ -125,9 +124,5 @@ enum typedef unsigned int path_flags_t; bool is_potential_path(const wcstring &const_path, const wcstring_list_t &directories, path_flags_t flags, wcstring *out_path = NULL); -/* For testing */ -void highlight_shell_classic(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); -void highlight_shell_new_parser(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); - #endif From 0325c1ba659a2ecd18c5765437b37077cf40ad5c Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 26 Mar 2014 18:20:38 -0700 Subject: [PATCH 144/145] Teach parse_util_detect_errors to report invalid builtins, as found in issue #1252 --- builtin.cpp | 2 +- parse_constants.h | 3 +++ parse_util.cpp | 13 ++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/builtin.cpp b/builtin.cpp index 4469868bb..e5ecc8422 100644 --- a/builtin.cpp +++ b/builtin.cpp @@ -3760,7 +3760,7 @@ int builtin_run(parser_t &parser, const wchar_t * const *argv, const io_chain_t } else { - debug(0, _(L"Unknown builtin '%ls'"), argv[0]); + debug(0, UNKNOWN_BUILTIN_ERR_MSG, argv[0]); } return STATUS_BUILTIN_ERROR; } diff --git a/parse_constants.h b/parse_constants.h index 31f07f60b..8ed37acdf 100644 --- a/parse_constants.h +++ b/parse_constants.h @@ -183,6 +183,9 @@ void parse_error_offset_source_start(parse_error_list_t *errors, size_t amt); /** Error message when encountering an illegal command name */ #define ILLEGAL_CMD_ERR_MSG _( L"Illegal command name '%ls'") +/** Error message when encountering an unknown builtin name */ +#define UNKNOWN_BUILTIN_ERR_MSG _( L"Unknown builtin '%ls'") + /** Error message when encountering a failed expansion, e.g. for the variable name in for loops */ #define FAILED_EXPANSION_VARIABLE_NAME_ERR_MSG _( L"Unable to expand variable name '%ls'") diff --git a/parse_util.cpp b/parse_util.cpp index d1f7a4824..0d6261612 100644 --- a/parse_util.cpp +++ b/parse_util.cpp @@ -40,6 +40,7 @@ #include "wildcard.h" #include "parse_tree.h" #include "parser.h" +#include "builtin.h" /** Error message for improper use of the exec builtin @@ -1288,8 +1289,11 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars // In a few places below, we want to know if we are in a pipeline const bool is_in_pipeline = node_tree.statement_is_in_pipeline(node, true /* count first */); + // We need to know the decoration + const enum parse_statement_decoration_t decoration = node_tree.decoration_for_plain_statement(node); + // Check that we don't try to pipe through exec - if (is_in_pipeline && node_tree.decoration_for_plain_statement(node) == parse_statement_decoration_exec) + if (is_in_pipeline && decoration == parse_statement_decoration_exec) { errored = append_syntax_error(&parse_errors, node, EXEC_ERR_MSG, L"exec"); } @@ -1380,6 +1384,13 @@ parser_test_error_bits_t parse_util_detect_errors(const wcstring &buff_src, pars errored = append_syntax_error(&parse_errors, node, (command == L"break" ? INVALID_BREAK_ERR_MSG : INVALID_CONTINUE_ERR_MSG)); } } + + // Check that we don't do an invalid builtin (#1252) + if (! errored && decoration == parse_statement_decoration_builtin && ! builtin_exists(command)) + { + errored = append_syntax_error(&parse_errors, node, UNKNOWN_BUILTIN_ERR_MSG, command.c_str()); + } + } } } From 31bf50b2d495222925371556169f61c1c5a81ed7 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Wed, 26 Mar 2014 18:49:09 -0700 Subject: [PATCH 145/145] Equip syntax highlighting with a variant that does no disk I/O. Invoke it after expanding an abbreviation, so that the expanded abbreviation appears with (some) syntax highlighting. --- highlight.cpp | 76 +++++++++++++++++++++++++++++++++++++-------------- highlight.h | 5 ++++ reader.cpp | 34 +++++++++++++++++------ 3 files changed, 86 insertions(+), 29 deletions(-) diff --git a/highlight.cpp b/highlight.cpp index d6db4c462..c1c24dd89 100644 --- a/highlight.cpp +++ b/highlight.cpp @@ -911,6 +911,9 @@ class highlighter_t /* Environment variables. Again, a reference member variable! */ const env_vars_snapshot_t &vars; + + /* Whether it's OK to do I/O */ + const bool io_ok; /* Working directory */ const wcstring working_directory; @@ -943,7 +946,7 @@ class highlighter_t public: /* Constructor */ - highlighter_t(const wcstring &str, size_t pos, const env_vars_snapshot_t &ev, const wcstring &wd) : buff(str), cursor_pos(pos), vars(ev), working_directory(wd), color_array(str.size()) + highlighter_t(const wcstring &str, size_t pos, const env_vars_snapshot_t &ev, const wcstring &wd, bool can_do_io) : buff(str), cursor_pos(pos), vars(ev), io_ok(can_do_io), working_directory(wd), color_array(str.size()) { /* Parse the tree */ this->parse_tree.clear(); @@ -1010,7 +1013,7 @@ void highlighter_t::color_argument(const parse_node_t &node) } /* Highlight it recursively. */ - highlighter_t cmdsub_highlighter(cmdsub_contents, cursor_subpos, this->vars, this->working_directory); + highlighter_t cmdsub_highlighter(cmdsub_contents, cursor_subpos, this->vars, this->working_directory, this->io_ok); const color_array_t &subcolors = cmdsub_highlighter.highlight(); /* Copy out the subcolors back into our array */ @@ -1046,13 +1049,16 @@ void highlighter_t::color_arguments(const parse_node_t &list_node) { /* Hack: determine whether the parent is the cd command, so we can show errors for non-directories */ bool cmd_is_cd = false; - const parse_node_t *parent = this->parse_tree.get_parent(list_node, symbol_plain_statement); - if (parent != NULL) + if (this->io_ok) { - wcstring cmd_str; - if (plain_statement_get_expanded_command(this->buff, this->parse_tree, *parent, &cmd_str)) + const parse_node_t *parent = this->parse_tree.get_parent(list_node, symbol_plain_statement); + if (parent != NULL) { - cmd_is_cd = (cmd_str == L"cd"); + wcstring cmd_str; + if (plain_statement_get_expanded_command(this->buff, this->parse_tree, *parent, &cmd_str)) + { + cmd_is_cd = (cmd_str == L"cd"); + } } } @@ -1072,7 +1078,7 @@ void highlighter_t::color_arguments(const parse_node_t &list_node) if (expand_one(param, EXPAND_SKIP_CMDSUBST)) { bool is_help = string_prefixes_string(param, L"--help") || string_prefixes_string(param, L"-h"); - if (!is_help && ! is_potential_cd_path(param, working_directory, PATH_EXPAND_TILDE, NULL)) + if (! is_help && this->io_ok && ! is_potential_cd_path(param, working_directory, PATH_EXPAND_TILDE, NULL)) { this->color_node(*child, highlight_spec_error); } @@ -1102,14 +1108,21 @@ void highlighter_t::color_redirection(const parse_node_t &redirection_node) if (parse_util_locate_cmdsubst(target.c_str(), NULL, NULL, true) != 0) { if (redirection_target != NULL) + { this->color_argument(*redirection_target); + } } else { /* No command substitution, so we can highlight the target file or fd. For example, disallow redirections into a non-existent directory */ bool target_is_valid = true; - if (! expand_one(target, EXPAND_SKIP_CMDSUBST)) + if (! this->io_ok) + { + /* I/O is disallowed, so we don't have much hope of catching anything but gross errors. Assume it's valid. */ + target_is_valid = true; + } + else if (! expand_one(target, EXPAND_SKIP_CMDSUBST)) { /* Could not be expanded */ target_is_valid = false; @@ -1280,7 +1293,11 @@ static bool command_is_valid(const wcstring &cmd, enum parse_statement_decoratio const highlighter_t::color_array_t & highlighter_t::highlight() { - ASSERT_IS_BACKGROUND_THREAD(); + // If we are doing I/O, we must be in a background thread + if (io_ok) + { + ASSERT_IS_BACKGROUND_THREAD(); + } const size_t length = buff.size(); assert(this->buff.size() == this->color_array.size()); @@ -1307,7 +1324,7 @@ const highlighter_t::color_array_t & highlighter_t::highlight() switch (node.type) { - // Color direct string descendants, e.g. 'for' and 'in'. + // Color direct string descendants, e.g. 'for' and 'in'. case symbol_while_header: case symbol_begin_header: case symbol_function_header: @@ -1346,7 +1363,7 @@ const highlighter_t::color_array_t & highlighter_t::highlight() case symbol_plain_statement: { - // Get the decoration from the parent + /* Get the decoration from the parent */ enum parse_statement_decoration_t decoration = parse_tree.decoration_for_plain_statement(node); /* Color the command */ @@ -1354,13 +1371,22 @@ const highlighter_t::color_array_t & highlighter_t::highlight() if (cmd_node != NULL && cmd_node->has_source()) { bool is_valid_cmd = false; - wcstring cmd(buff, cmd_node->source_start, cmd_node->source_length); - - /* Try expanding it. If we cannot, it's an error. */ - bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS); - if (expanded && ! has_expand_reserved(cmd)) + if (! this->io_ok) { - is_valid_cmd = command_is_valid(cmd, decoration, working_directory, vars); + /* We cannot check if the command is invalid, so just assume it's valid */ + is_valid_cmd = true; + } + else + { + /* Check to see if the command is valid */ + wcstring cmd(buff, cmd_node->source_start, cmd_node->source_length); + + /* Try expanding it. If we cannot, it's an error. */ + bool expanded = expand_one(cmd, EXPAND_SKIP_CMDSUBST | EXPAND_SKIP_VARIABLES | EXPAND_SKIP_JOBS); + if (expanded && ! has_expand_reserved(cmd)) + { + is_valid_cmd = command_is_valid(cmd, decoration, working_directory, vars); + } } this->color_node(*cmd_node, is_valid_cmd ? highlight_spec_command : highlight_spec_error); } @@ -1398,7 +1424,7 @@ const highlighter_t::color_array_t & highlighter_t::highlight() } } - if (this->cursor_pos <= this->buff.size()) + if (this->io_ok && this->cursor_pos <= this->buff.size()) { /* If the cursor is over an argument, and that argument is a valid path, underline it */ for (parse_node_tree_t::const_iterator iter = parse_tree.begin(); iter != parse_tree.end(); ++iter) @@ -1438,7 +1464,17 @@ void highlight_shell(const wcstring &buff, std::vector &color, const wcstring working_directory = env_get_pwd_slash(); /* Highlight it! */ - highlighter_t highlighter(buff, pos, vars, working_directory); + highlighter_t highlighter(buff, pos, vars, working_directory, true /* can do IO */); + color = highlighter.highlight(); +} + +void highlight_shell_no_io(const wcstring &buff, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars) +{ + /* Do something sucky and get the current working directory on this background thread. This should really be passed in. */ + const wcstring working_directory = env_get_pwd_slash(); + + /* Highlight it! */ + highlighter_t highlighter(buff, pos, vars, working_directory, false /* no IO allowed */); color = highlighter.highlight(); } diff --git a/highlight.h b/highlight.h index d411ae369..b8211a81a 100644 --- a/highlight.h +++ b/highlight.h @@ -76,6 +76,11 @@ struct file_detection_context_t; */ void highlight_shell(const wcstring &buffstr, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); +/** + Perform a non-blocking shell highlighting. The function will not do any I/O that may block. As a result, invalid commands may not be detected, etc. +*/ +void highlight_shell_no_io(const wcstring &buffstr, std::vector &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars); + /** Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are highlighted. The result is stored in the color array as a color_code from the HIGHLIGHT_ enum diff --git a/reader.cpp b/reader.cpp index 7bbac43a9..3bf970800 100644 --- a/reader.cpp +++ b/reader.cpp @@ -429,7 +429,7 @@ static struct termios terminal_mode_on_startup; static struct termios terminal_mode_for_executing_programs; -static void reader_super_highlight_me_plenty(int highlight_pos_adjust = 0); +static void reader_super_highlight_me_plenty(int highlight_pos_adjust = 0, bool no_io = false); /** Variable to keep track of forced exits - see \c reader_exit_forced(); @@ -781,7 +781,7 @@ bool reader_expand_abbreviation_in_command(const wcstring &cmdline, size_t curso return result; } -/* Expand abbreviations at the current cursor position, minus the given cursor backtrack. This may change the command line but does NOT repaint it. This is to allow the caller to coalesce repaints. */ +/* Expand abbreviations at the current cursor position, minus the given cursor backtrack. This may change the command line but does NOT repaint it. This is to allow the caller to coalesce repaints. */ bool reader_data_t::expand_abbreviation_as_necessary(size_t cursor_backtrack) { bool result = false; @@ -2654,7 +2654,7 @@ public: { } - int threaded_highlight() + int perform_highlight() { if (generation_count != s_generation_count) { @@ -2710,7 +2710,7 @@ static void highlight_complete(background_highlight_context_t *ctx, int result) static int threaded_highlight(background_highlight_context_t *ctx) { - return ctx->threaded_highlight(); + return ctx->perform_highlight(); } @@ -2722,17 +2722,30 @@ static int threaded_highlight(background_highlight_context_t *ctx) \param match_highlight_pos_adjust the adjustment to the position to use for bracket matching. This is added to the current cursor position and may be negative. \param error if non-null, any possible errors in the buffer are further descibed by the strings inserted into the specified arraylist + \param no_io if true, do a highlight that does not perform I/O, synchronously. If false, perform an asynchronous highlight in the background, which may perform disk I/O. */ -static void reader_super_highlight_me_plenty(int match_highlight_pos_adjust) +static void reader_super_highlight_me_plenty(int match_highlight_pos_adjust, bool no_io) { const editable_line_t *el = &data->command_line; long match_highlight_pos = (long)el->position + match_highlight_pos_adjust; assert(match_highlight_pos >= 0); reader_sanity_check(); - - background_highlight_context_t *ctx = new background_highlight_context_t(el->text, match_highlight_pos, data->highlight_function); - iothread_perform(threaded_highlight, highlight_complete, ctx); + + highlight_function_t highlight_func = no_io ? highlight_shell_no_io : data->highlight_function; + background_highlight_context_t *ctx = new background_highlight_context_t(el->text, match_highlight_pos, highlight_func); + if (no_io) + { + // Highlighting without IO, we just do it + // Note that highlight_complete deletes ctx. + int result = ctx->perform_highlight(); + highlight_complete(ctx, result); + } + else + { + // Highlighting including I/O proceeds in the background + iothread_perform(threaded_highlight, highlight_complete, ctx); + } highlight_search(); /* Here's a hack. Check to see if our autosuggestion still applies; if so, don't recompute it. Since the autosuggestion computation is asynchronous, this avoids "flashing" as you type into the autosuggestion. */ @@ -3452,8 +3465,11 @@ const wchar_t *reader_readline(void) if (abbreviation_expanded) { /* It's our reponsibility to rehighlight and repaint. But everything we do below triggers a repaint. */ - reader_super_highlight_me_plenty(); command_test_result = data->test_func(el->text.c_str()); + + /* If the command is OK, then we're going to execute it. We still want to do syntax highlighting, but a synchronous variant that performs no I/O, so as not to block the user */ + bool skip_io = (command_test_result == 0); + reader_super_highlight_me_plenty(0, skip_io); } }