Compare commits

..

34 Commits

Author SHA1 Message Date
Nahor
f3f675b4cc Standardized error messages: constant names
Part of #12556
2026-04-05 13:15:47 +08:00
Nahor
434610494f argparse: fix error status code
To homogenize error reporting format, use a new Error struct. Currently this
is used for builtins and ensuring a common cmd/subcmd prefix.

Part of #12556
2026-04-05 13:15:47 +08:00
Dennis Yildirim
3cce1f3f4c Added completions for git verify-commit and verify-tag
Closes #12607
2026-04-05 13:14:31 +08:00
Johannes Altmanninger
a5bde7954e Update changelog 2026-04-05 13:07:29 +08:00
Nahor
99d63c21f1 Add tests to exercise all builtin error messages
With a few exceptions, only one test is added for a given message, even
when there are multiple ways to trigger the same message (e.g. different
invalid option combinations, or triggered in shared functions such as
`builtin_unknown_option`)

Includes a few very minor fixes, such as missing a newline, or using the
wrong var name.

Closes #12603
2026-04-05 00:22:42 +08:00
Nahor
c3e3658157 ulimit: remove unreachable error message
When there is no limit value, ulimit will have printed the current one
and exited

Part of #12603
2026-04-05 00:22:41 +08:00
Nahor
8d92016e72 string: error messages fixes
- fix wrong pattern used in `string replace` error message
- replace unreachable error with `unreachable!` in `string`
- fix cmd being used in place of subcmd 

Part of #12603
2026-04-05 00:22:41 +08:00
Nahor
f6a72b4e19 status: replace unreachable code with an assert!
Part of #12603
2026-04-05 00:22:40 +08:00
Nahor
2f9c2df10d set: report an error when called with -a,-p and no NAME
Previously executing `set -a` or `set -p` would just list all the
variables, which does not make sense since the user specifically ask
for an action (append/prepend).

Update the help page synopsis

Part of #12603
2026-04-05 00:22:40 +08:00
Johannes Altmanninger
0367aaea7d Disable relocatable tree logic when DATADIR or SYSCONFDIR are non-default
If all of

	$PREFIX/bin/fish
	$PREFIX/share/fish
	$PREFIX/etc/fish

exist, then fish assumes it's in a relocatable directory tree.
This is used by homebrew (PREFIX=/usr/local) and maybe also nix(?).

Other Linux distros prefer to use /etc/fish instead of $PREFIX/etc/fish
[1].  To do so, they need to pass -DCMAKE_INSTALL_SYSCONFDIR=/etc.
The relocatable tree logic assumes default data and sysconf dirs
(relative to a potentially relocatable prefix). If the user changes
any of those, and the relocatable tree logic happens to kick in,
that'd overrule user preference, which is surprising.

So a non-default data or sysconf path is a strong enough signal that
we want to disable the relocatable tree logic. Do that.

Closes #10748

[1]: ff2f69cd56/PKGBUILD (L43)
2026-04-04 01:22:54 +08:00
Johannes Altmanninger
e25b4b6f05 tests/checks/realpath.fish: fix on macOS 2026-04-03 23:26:37 +08:00
Yakov Till
90cbfd288e Fix test_history_path_detection panic: call test_init()
test_history_path_detection calls add_pending_with_file_detection(),
which spawns a thread pool task via ThreadPool::perform(). This
requires threads::init() to have been called, otherwise
assert_is_background_thread() panics.

Add the missing test_init() call, matching other tests that use
subsystems requiring initialization.

Closes #12604
2026-04-03 14:48:53 +08:00
Nahor
68453843d4 set: fix unreachable error messages
- Remove unreachable error message in `handle_env_return()`
While we could have put an empty block in `handle_env_return()` and
removed the condition on `NotFound` in `erase()`, we prefered to use
`unreachable!` in case `handle_env_return()` gets called in new scenarios
in the future

- Make reachable the error message when asking to show a slice

Part of #12603
2026-04-03 13:53:42 +08:00
Nahor
fb57f95391 realpath: fix random error message
With empty argument, `realpath` skips all processing, so the error
message, based on `errno`, was unrelated and changed depending on what
failed before. E.g:

```
$ builtin realpath "" /tmp "" /no-exist ""
builtin realpath: : Resource temporarily unavailable
/tmp
builtin realpath: : Invalid argument
/dont-exist
builtin realpath: : No such file or directory
```

Part of #12603
2026-04-03 13:53:41 +08:00
Nahor
1ed276292b read: remove unnecessary code
`to_stdout` is set to `true` if and only if `argv` is not empty.
- `argv` length and `to_stdout` are redundant, so we can remove `to_stdout`
- some tests in `validate_read_args` are necessarily false

Part of #12603
2026-04-03 13:53:41 +08:00
Branch Vincent
09e46b00cc completions: update ngrok
Closes #12598
2026-04-03 13:53:41 +08:00
Johannes Altmanninger
695bc293a9 contrib/debian/control: allow any "man" virtual pkg (man-db/mandoc)
We support multiple "man" implementations; at least man-db's and
mandoc's.

So we can relax the mandoc dependency to a dependency on the virtual
package providing "man". Note that as of today, "mandoc" fails to
have a "Provides: man".

However since Debian policy says in
https://www.debian.org/doc/debian-policy/ch-relationships.html

> To specify which of a set of real packages should be the default
> to satisfy a particular dependency on a virtual package, list the
> real package as an alternative before the virtual one.

we want to list possible real packages anyway, so do that.

Closes #12596
2026-04-03 12:20:08 +08:00
Nahor
344ff7be88 printf: remove unreachable code
Remove an unreachable, yet translated, error string and make the code
more idiomatic

Closes #12594
2026-04-01 09:37:57 +08:00
Nahor
014e3b3aff math: fix error message
Fix badly formatted error message, and make it translatable

Part of #12594
2026-04-01 09:37:57 +08:00
Nahor
68c7baff90 read: remove deprecation error for -i
`-i` has been an error and undocumented for 8 years now (86362e7) but
still requires some translating today. Time to retire it fully.

Part of #12594
2026-04-01 09:37:56 +08:00
Johannes Altmanninger
6eaad2cd80 Remove some redundant translation sources 2026-03-31 14:55:04 +08:00
Johannes Altmanninger
b321e38f5a psub: add missing line endings to error messages
Fixes #12593
2026-03-31 14:43:34 +08:00
Daniel Rainer
a32dd63163 fix: simplify and correct trimming of features
The previous handling was unnecessarily complex and had a bug introduced
by porting from C++ to Rust: The substrings `\0x0B` and `\0x0C` in Rust
mean `\0` (the NUL character) followed by the regular characters `0B`
and `0C`, respectively, so feature names starting or ending with these
characters would have these characters stripped away.

Replace this handling by built-in functionality, and simplify some
syntax. We now trim all whitespace, instead of just certain ASCII
characters, but I think there is no reason to limit trimming to ASCII.

Closes #12592
2026-03-31 14:43:34 +08:00
Bacal Mesfin
ef90afa5b9 feat: add completions for dnf copr
Closes #12585
2026-03-31 14:43:34 +08:00
r-vdp
7bd37dfe55 create_manpage_completions: handle groff \X'...' device control escapes
help2man 1.50 added \X'tty: link URL' hyperlink escapes to generated
man pages. coreutils 9.10 is the first widely-deployed package to ship
these, and it broke completion generation for most of its commands
(only 17/106 man pages parsed successfully).

The escape wraps option text like this:

  \X'tty: link https://example.com/a'\fB\-a, \-\-all\fP\X'tty: link'

Two places needed fixing:

- remove_groff_formatting() didn't strip \X'...', so Type1-4 parsers
  extracted garbage option names like "--all\X'tty"

- Deroffer.esc_char_backslash() didn't recognize \X, falling through
  to the generic single-char escape which stripped only the \, leaving
  "X'tty: link ...'" as literal text. Option lines then started with
  X instead of -, so TypeDeroffManParser's is_option() check failed.

Also handle \Z'...' (zero-width string) which has identical syntax.

Closes #12578
2026-03-31 13:15:52 +08:00
Johannes Altmanninger
14ce56d2a5 Remove unused fish_wcwidth wrapper 2026-03-30 13:57:27 +08:00
Johannes Altmanninger
01ee6f968d Support backward-word-end when cursor is past end
Closes #12581
2026-03-30 13:57:27 +08:00
Johannes Altmanninger
7f6dcde5e0 Fix backward-delete-char not stopping after control characters
Fixes 146384abc6 (Stop using wcwidth entirely, 2026-03-15)

Fixes #12583
2026-03-30 13:57:27 +08:00
Johannes Altmanninger
34fc573668 Modernize wcwidth API
Return None rather than -1 for nonprintables.  We probably still
differ from wcwidth which is bad (given we use the same name), but
hopefully not in a way that matters.

Fixes 146384abc6 (Stop using wcwidth entirely, 2026-03-15).
2026-03-30 13:57:10 +08:00
Johannes Altmanninger
93cbf2a0e8 Reuse wcswidth logic for rendered characters 2026-03-29 17:04:14 +08:00
Nahor
8194c6eb79 cd: replace unreachable code with assert
Closes #12584
2026-03-29 16:49:24 +08:00
Nahor
3194572156 bind: replace fake enum (c_int) with a real Rust enum
Part of #12584
2026-03-29 16:49:24 +08:00
Johannes Altmanninger
e635816b7f Fix Vi mode dl deleting from wrong character
Fixes b9b32ad157 (Fix vi mode dl and dh regressions, 2026-02-25).

Closes #12580
(which describes only the issue already fixed by b9b32ad157).
2026-03-28 21:45:33 +08:00
Johannes Altmanninger
2b3ecf22da start new cycle
Created by ./build_tools/release.sh 4.6.0
2026-03-28 13:16:34 +08:00
95 changed files with 1875 additions and 1386 deletions

View File

@@ -1,3 +1,29 @@
fish ?.?.? (released ???)
=========================
Notable improvements and fixes
------------------------------
Deprecations and removed features
---------------------------------
Interactive improvements
------------------------
Improved terminal support
-------------------------
Other improvements
------------------
- ``fish_update_completions`` now handles groff ``\X'...'`` device control escapes, fixing completion generation for man pages produced by help2man 1.50 and later (such as coreutils 9.10).
For distributors and developers
-------------------------------
- When the default global config directory (``$PREFIX/etc/fish``) exists but has been overridden with ``-DCMAKE_INSTALL_SYSCONFDIR``, fish will now respect that override (:issue:`10748`).
Regression fixes:
-----------------
fish 4.6.0 (released March 28, 2026)
====================================

View File

@@ -13,7 +13,7 @@ Build-Depends: debhelper-compat (= 13),
python3-sphinx,
# Test dependencies
locales-all,
man-db,
man-db | mandoc | man,
python3
# 4.6.2 is Debian 12/Ubuntu Noble 24.04; Ubuntu Jammy is 4.6.0.1
Standards-Version: 4.6.2
@@ -26,8 +26,8 @@ Architecture: any
# for col and lock
Depends: bsdextrautils,
file,
# for man
man-db,
# for showing built-in help pages
man-db | mandoc | man,
# for kill
procps,
python3 (>=3.5),

View File

@@ -8,12 +8,12 @@
use std::cmp;
use std::sync::{
LazyLock,
atomic::{AtomicIsize, Ordering},
atomic::{AtomicUsize, Ordering},
};
/// Width of ambiguous East Asian characters and, as of TR11, all private-use characters.
/// 1 is the typical default, but we accept any non-negative override via `$fish_ambiguous_width`.
pub static FISH_AMBIGUOUS_WIDTH: AtomicIsize = AtomicIsize::new(1);
pub static FISH_AMBIGUOUS_WIDTH: AtomicUsize = AtomicUsize::new(1);
/// Width of emoji characters.
///
@@ -25,34 +25,33 @@
/// Valid values are 1, and 2. 1 is the typical emoji width used in Unicode 8 while some newer
/// terminals use a width of 2 since Unicode 9.
// For some reason, this is declared here and exposed here, but is set in `env_dispatch`.
pub static FISH_EMOJI_WIDTH: AtomicIsize = AtomicIsize::new(2);
pub static FISH_EMOJI_WIDTH: AtomicUsize = AtomicUsize::new(2);
static WC_LOOKUP_TABLE: LazyLock<WcLookupTable> = LazyLock::new(WcLookupTable::new);
// Big hack to use our versions of wcswidth where we know them to be broken, which is
// EVERYWHERE (https://github.com/fish-shell/fish-shell/issues/2199)
pub fn fish_wcwidth(c: char) -> isize {
pub fn fish_wcwidth(c: char) -> Option<usize> {
// Check for VS16 which selects emoji presentation. This "promotes" a character like U+2764
// (width 1) to an emoji (probably width 2). So treat it as width 1 so the sums work. See #2652.
// VS15 selects text presentation.
let variation_selector_16 = '\u{FE0F}';
let variation_selector_15 = '\u{FE0E}';
if c == variation_selector_16 {
return 1;
return Some(1);
} else if c == variation_selector_15 {
return 0;
return Some(0);
}
// Check for Emoji_Modifier property. Only the Fitzpatrick modifiers have this, in range
// 1F3FB..1F3FF. This is a hack because such an emoji appearing on its own would be drawn as
// width 2, but that's unlikely to be useful. See #8275.
if ('\u{1F3FB}'..='\u{1F3FF}').contains(&c) {
return 0;
return Some(0);
}
let width = WC_LOOKUP_TABLE.classify(c);
match width {
WcWidth::NonCharacter | WcWidth::NonPrint | WcWidth::Combining | WcWidth::Unassigned => 0,
Some(match width {
WcWidth::NonPrint => return None,
WcWidth::NonCharacter | WcWidth::Combining | WcWidth::Unassigned => 0,
WcWidth::Ambiguous | WcWidth::PrivateUse => {
// TR11: "All private-use characters are by default classified as Ambiguous".
FISH_AMBIGUOUS_WIDTH.load(Ordering::Relaxed)
@@ -60,25 +59,25 @@ pub fn fish_wcwidth(c: char) -> isize {
WcWidth::One => 1,
WcWidth::Two => 2,
WcWidth::WidenedIn9 => FISH_EMOJI_WIDTH.load(Ordering::Relaxed),
}
})
}
/// fish's internal versions of wcwidth and wcswidth
pub fn fish_wcswidth(s: &wstr) -> isize {
// ascii fast path; empty iterator returns true for .all()
if s.chars().all(|c| c.is_ascii() && !c.is_ascii_control()) {
return s.len() as isize;
pub fn fish_wcswidth(s: &wstr) -> Option<usize> {
fish_wcswidth_canonicalizing(s, std::convert::identity)
}
pub fn fish_wcswidth_canonicalizing(s: &wstr, canonicalize: fn(char) -> char) -> Option<usize> {
let chars = s.chars().map(canonicalize);
// ascii fast path
if chars.clone().all(|c| c.is_ascii() && !c.is_ascii_control()) {
return Some(s.len());
}
let mut result = 0;
for c in s.chars() {
let w = fish_wcwidth(c);
if w < 0 {
return -1;
}
result += w;
for c in chars {
result += fish_wcwidth(c)?;
}
result
Some(result)
}
pub fn wcscasecmp(lhs: &wstr, rhs: &wstr) -> cmp::Ordering {

View File

@@ -665,12 +665,12 @@ fn next(&mut self) -> Option<Self::Item> {
}
}
/// Like fish_wcwidth, but returns 0 for characters with no real width instead of -1.
/// Like fish_wcwidth, but returns 0 for characters with no real width instead of none.
pub fn fish_wcwidth_visible(c: char) -> isize {
if c == '\x08' {
return -1;
}
fish_wcwidth(c).max(0)
fish_wcwidth(c).unwrap_or_default().try_into().unwrap()
}
#[cfg(test)]

View File

@@ -6,16 +6,17 @@ Synopsis
.. synopsis::
set
set (-f | --function) (-l | --local) (-g | --global) (-U | --universal) [--no-event]
set [-Uflg] NAME [VALUE ...]
set [-Uflg] NAME[[INDEX ...]] [VALUE ...]
set (-x | --export) (-u | --unexport) [-Uflg] NAME [VALUE ...]
set (-a | --append) (-p | --prepend) [-Uflg] NAME VALUE ...
set (-e | --erase) [-Uflg] [-xu] [NAME][[INDEX]] ...]
set (-q | --query) [-Uflg] [-xu] [NAME][[INDEX]] ...]
set [(-f | --function) (-l | --local) (-g | --global) (-U | --universal)]
[(-x | --export) (-u | --unexport)]
set (-S | --show) (-L | --long) [NAME ...]
set [-Uflg] [-xu] [--no-event] NAME [VALUE ...]
set [-Uflg] [--no-event] NAME[[INDEX ...]] [VALUE ...]
set (-a | --append) (-p | --prepend) [-Uflg] [--no-event] NAME VALUE ...
set (-e | --erase) [-Uflg] [--no-event] NAME[[INDEX]] ...
set (-q | --query) [-Uflg] [-xu] NAME[[INDEX]] ...
Description
-----------

View File

@@ -475,10 +475,6 @@ msgstr "%s: Ungültiger Sortierschlüssel '%s'"
msgid "%s: Invalid start value '%s'"
msgstr "%s: Ungültiger Startwert '%s'"
#, c-format
msgid "%s: Invalid state"
msgstr ""
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -511,10 +507,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr "%s: Fehlendes '--'-Trennzeichen"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s: Neues Limit darf keine leere Zeichenkette sein"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr ""
@@ -543,10 +535,6 @@ msgstr "%s: Nicht innerhalb einer Schleife"
msgid "%s: Number out of range"
msgstr ""
#, c-format
msgid "%s: Number was empty"
msgstr "%s: Zahl war leer"
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -583,10 +571,6 @@ msgstr ""
msgid "%s: The directory '%s' does not exist"
msgstr "%s: Das Verzeichnis '%s' existiert nicht"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: Es gibt keine Jobs"
@@ -771,10 +755,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr "%s: zu viele Argumente"
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr "%s: Wert nicht vollständig konvertiert (kann '%s' nicht konvertieren)"
@@ -1826,6 +1806,9 @@ msgstr "Ungültige Genauigkeitsangabe: %s"
msgid "missing hexadecimal number in escape"
msgstr "fehlende Hexadezimal-Zahl in Escapesequenz"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -1925,10 +1908,7 @@ msgid "%s: The number of positions to skip must be a non-negative integer\\n"
msgstr ""
msgid "%s: Too many arguments"
msgstr ""
msgid "%s: Too many arguments\\n"
msgstr "%s: Zu viele Argumente\\n"
msgstr "%s: Zu viele Argumente"
msgid "%s: Unknown function '%s'\\n"
msgstr ""
@@ -10798,6 +10778,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13036,6 +13022,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16135,6 +16124,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28255,6 +28247,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32539,6 +32534,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34156,6 +34154,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37474,6 +37475,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44431,6 +44435,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45541,6 +45548,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr "Roheinträge ausgeben"
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45694,6 +45704,12 @@ msgstr "Unterdrückungen für entdeckte Fehler ausgeben"
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr "Zähler ausgeben"
@@ -46069,9 +46085,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46390,9 +46403,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49186,6 +49196,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53266,9 +53279,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64081,12 +64091,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64135,9 +64139,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64444,9 +64445,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68740,9 +68738,6 @@ msgstr "Spiegelliste aktualisieren"
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74056,9 +74051,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75508,9 +75500,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75520,9 +75509,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76213,12 +76199,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76909,9 +76889,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77008,9 +76985,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77023,9 +76997,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77413,12 +77384,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77815,15 +77780,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77842,15 +77798,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79156,9 +79106,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79918,9 +79865,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79936,9 +79880,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80356,9 +80297,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -475,10 +475,6 @@ msgstr ""
msgid "%s: Invalid start value '%s'"
msgstr ""
#, c-format
msgid "%s: Invalid state"
msgstr "%s: Invalid state"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -511,10 +507,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr ""
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr ""
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s: No binding found for key “%s”"
@@ -543,10 +535,6 @@ msgstr "%s: Not inside of loop"
msgid "%s: Number out of range"
msgstr ""
#, c-format
msgid "%s: Number was empty"
msgstr ""
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -583,10 +571,6 @@ msgstr ""
msgid "%s: The directory '%s' does not exist"
msgstr "%s: The directory “%s” does not exist"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: There are no jobs"
@@ -771,10 +755,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr ""
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr ""
@@ -1826,6 +1806,9 @@ msgstr "invalid precision: %s"
msgid "missing hexadecimal number in escape"
msgstr "missing hexadecimal number in escape"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -1925,10 +1908,7 @@ 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"
msgid "%s: Too many arguments"
msgstr ""
msgid "%s: Too many arguments\\n"
msgstr "%s: Too many arguments\\n"
msgstr "%s: Too many arguments"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s: Unknown function “%s”\\n"
@@ -10798,6 +10778,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13036,6 +13022,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16135,6 +16124,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28255,6 +28247,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32539,6 +32534,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34156,6 +34154,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37474,6 +37475,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44431,6 +44435,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45541,6 +45548,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr "Print raw entry names"
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45694,6 +45704,12 @@ msgstr "Print suppressions for detected errors"
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr "Print tally"
@@ -46069,9 +46085,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46390,9 +46403,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr "Prints backup sets and chains currently in repository"
@@ -49186,6 +49196,9 @@ msgstr "Remove ZFS label information from the specified device"
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53266,9 +53279,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64081,12 +64091,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64135,9 +64139,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr "Start an IRB session in the context of the current bundle"
@@ -64444,9 +64445,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68740,9 +68738,6 @@ msgstr "Update mirror list"
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74056,9 +74051,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75508,9 +75500,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75520,9 +75509,6 @@ msgstr "end fields with NUL"
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76213,12 +76199,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76909,9 +76889,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77008,9 +76985,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr "log statistical profiling information"
@@ -77023,9 +76997,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77413,12 +77384,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77815,15 +77780,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77842,15 +77798,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79156,9 +79106,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79918,9 +79865,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79936,9 +79880,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80356,9 +80297,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -475,10 +475,6 @@ msgstr "%s: Clave de ordenamiento no válida '%s'"
msgid "%s: Invalid start value '%s'"
msgstr "%s: Valor inicial no válido '%s'"
#, c-format
msgid "%s: Invalid state"
msgstr "%s: Estado no válido"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr "%s: Valor de estilo no válido '%s'"
@@ -511,10 +507,6 @@ msgstr "%s: La opción larga '%s' ya está definida"
msgid "%s: Missing -- separator"
msgstr "%s: Falta el separador --"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s: El nuevo límite no puede ser un string vacío"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s: No se encontró una asignación para la tecla '%s'"
@@ -543,10 +535,6 @@ msgstr "%s: No está dentro de un bucle"
msgid "%s: Number out of range"
msgstr "%s: Número fuera de rango"
#, c-format
msgid "%s: Number was empty"
msgstr "%s: El número estaba vacío"
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr "%s: Las opciones %s y %s no pueden usarse juntas"
@@ -583,10 +571,6 @@ msgstr "%s: La opción corta '%c' no es válida, debe ser alfanumérica o '#'"
msgid "%s: The directory '%s' does not exist"
msgstr "%s: El directorio '%s' no existe"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr "%s: La variable '%s' no existe"
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: No hay trabajos"
@@ -771,10 +755,6 @@ msgstr "%s: no existe la línea %s"
msgid "%s: too many arguments"
msgstr "%s: demasiados argumentos"
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr "%s: el uso de -i para --silent es obsoleto. Usa -s o --silent en su lugar."
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr "%s: el valor no se convirtió completamente (no es posible convertir '%s')"
@@ -1829,6 +1809,9 @@ msgstr "precisión inválida: %s"
msgid "missing hexadecimal number in escape"
msgstr "falta un número hexadecimal en la secuencia de escape"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr "solo se soportan f1 hasta f%d, no f%s"
@@ -1930,9 +1913,6 @@ msgstr "%s: El número de posiciones a saltar debe ser un entero no negativo\\n"
msgid "%s: Too many arguments"
msgstr "%s: Demasiados argumentos"
msgid "%s: Too many arguments\\n"
msgstr "%s: Demasiados argumentos\\n"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s: Función desconocida '%s'\\n"
@@ -10801,6 +10781,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13039,6 +13025,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16138,6 +16127,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28258,6 +28250,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32542,6 +32537,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34159,6 +34157,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37477,6 +37478,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44434,6 +44438,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45544,6 +45551,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45697,6 +45707,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr ""
@@ -46072,9 +46088,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46393,9 +46406,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49189,6 +49199,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53269,9 +53282,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64084,12 +64094,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64138,9 +64142,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64447,9 +64448,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68743,9 +68741,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74059,9 +74054,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75511,9 +75503,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75523,9 +75512,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76216,12 +76202,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76912,9 +76892,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77011,9 +76988,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77026,9 +77000,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77416,12 +77387,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77818,15 +77783,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77845,15 +77801,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79159,9 +79109,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79921,9 +79868,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79939,9 +79883,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80359,9 +80300,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -604,10 +604,6 @@ msgstr ""
msgid "%s: Invalid start value '%s'"
msgstr "%s : Indice de départ « %s » invalide"
#, c-format
msgid "%s: Invalid state"
msgstr "%s : État invalide"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -640,10 +636,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr "%s : Séparateur -- manquant"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s : La nouvelle limite ne peut être une chaîne vide"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s : Aucun lien trouvé pour la combinaison %s"
@@ -672,10 +664,6 @@ msgstr "%s : À lextérieur de toute boucle"
msgid "%s: Number out of range"
msgstr "%s : Nombre hors limites"
#, c-format
msgid "%s: Number was empty"
msgstr ""
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -712,10 +700,6 @@ msgstr "%s : Le sémaphore « %c » est invalide : il doit être alphanumér
msgid "%s: The directory '%s' does not exist"
msgstr "%s : Le dossier « %s » nexiste pas"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s : Aucune tâche"
@@ -900,10 +884,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr ""
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr ""
@@ -1955,6 +1935,9 @@ msgstr "précision invalide : %s"
msgid "missing hexadecimal number in escape"
msgstr "nombre hexadécimal manquant dans léchappement"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -2056,9 +2039,6 @@ msgstr "%s : Le nombre de positions à passer doit être un entier naturel\\n"
msgid "%s: Too many arguments"
msgstr "%s : Trop darguments"
msgid "%s: Too many arguments\\n"
msgstr "%s : Trop darguments\\n"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s : Fonction « %s » inconnue\\n"
@@ -10927,6 +10907,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr "Vérifier que les fichiers de la copie de travail sont intacts"
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13165,6 +13151,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16264,6 +16253,9 @@ msgstr "Désactiver le support de Xinerama"
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28384,6 +28376,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32668,6 +32663,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34285,6 +34283,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37603,6 +37604,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44560,6 +44564,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45670,6 +45677,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr "Afficher les noms bruts des entrées"
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45823,6 +45833,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr "Afficher le registre"
@@ -46198,9 +46214,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr "Afficher la version du programme et quitter"
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46519,9 +46532,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr "Afficher les jeux et chaînes de sauvegarde actuellement dans le dépôt"
@@ -49315,6 +49325,9 @@ msgstr "Supprimer létiquette des informations ZFS du périphérique spécifi
msgid "Remove [all] packages from cache"
msgstr "Supprimer (tous) les paquets du cache"
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53395,9 +53408,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr "Sauvegarder et restaurer létat des paquets"
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr "Sauvegarder la luminosité"
@@ -64210,12 +64220,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64264,9 +64268,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr "Démarrer une session IRB dans le contexte du paquet actuel"
@@ -64573,9 +64574,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr "Afficher linterface ncurses avec laperçu"
@@ -68869,9 +68867,6 @@ msgstr "Mettre à jour la liste des miroirs"
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74185,9 +74180,6 @@ msgstr "Créer le raccourci clavier pour le mode commande au lieu du mode normal
msgid "bind key to command"
msgstr "Créer un raccourci clavier vers une commande"
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr "Raccourci pour le mode commande"
@@ -75637,9 +75629,6 @@ msgstr "Activer les ascenseurs verticaux"
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr "Envoyer un keepalive à chaque délai en secondes spécifié"
@@ -75649,9 +75638,6 @@ msgstr "Terminer les champs avec NUL"
msgid "end filenames with NUL, for use with xargs"
msgstr "Terminer les noms de fichier par un caractère NUL, pour utilisation avec xargs"
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr "Forcer le mode strict"
@@ -76342,12 +76328,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -77038,9 +77018,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr "Lister les dépendances sans arborescence"
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77137,9 +77114,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr "Journaliser les informations de profilage statistique"
@@ -77152,9 +77126,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr "niveau de journalisation"
msgid "loglevel of client"
msgstr ""
@@ -77542,12 +77513,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77944,15 +77909,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr "Chemin du fichier de clé privée SSH"
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77971,15 +77927,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79285,9 +79235,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -80047,9 +79994,6 @@ msgstr "Démarrer un environnement jail"
msgid "start a server in the background"
msgstr "Démarrer un serveur en arrière-plan"
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -80065,9 +80009,6 @@ msgstr "Démarrer le débogueur"
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80485,9 +80426,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr "Mettre à jour la barre détat du client"

View File

@@ -474,10 +474,6 @@ msgstr "%s: ソートキー '%s' が無効です"
msgid "%s: Invalid start value '%s'"
msgstr "%s: 開始値 '%s' が無効です"
#, c-format
msgid "%s: Invalid state"
msgstr "%s: 状態が無効です"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr "%s: スタイル値 '%s' が無効です"
@@ -510,10 +506,6 @@ msgstr "%s: ロングフラグ '%s' はすでに定義されています"
msgid "%s: Missing -- separator"
msgstr "%s: -- セパレータがありません"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s: 新しい制限値を空文字列にすることはできません"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s: キー '%s' のバインドが見つかりません"
@@ -542,10 +534,6 @@ msgstr "%s: ループ内ではありません"
msgid "%s: Number out of range"
msgstr "%s: 数値が範囲外です"
#, c-format
msgid "%s: Number was empty"
msgstr "%s: 数値が空です"
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr "%s: オプション %s と %s は同時には指定できません"
@@ -582,10 +570,6 @@ msgstr "%s: 短縮フラグ '%c' は無効です。英数字または '#' であ
msgid "%s: The directory '%s' does not exist"
msgstr "%s: ディレクトリ '%s' は存在しません"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr "%s: 変数 '%s' は存在しません"
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: ジョブはありません"
@@ -770,10 +754,6 @@ msgstr "%s: %s 行目は存在しません"
msgid "%s: too many arguments"
msgstr "%s: 引数が多すぎます"
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr "%s: --silent の代わりに -i を使用する方法は非推奨です。代わりに -s または --silent を使用してください"
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr "%s: 値を完全に変換できませんでした('%s' を変換できません)"
@@ -1828,6 +1808,9 @@ msgstr "無効な精度: %s"
msgid "missing hexadecimal number in escape"
msgstr "エスケープ内に16進数がありません"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr "f1からf%dまでのみサポートされています。'f%s'はサポートされていません"
@@ -1930,9 +1913,6 @@ msgstr "%s: スキップする位置の数は非負の整数である必要が
msgid "%s: Too many arguments"
msgstr "%s: 引数が多すぎます"
msgid "%s: Too many arguments\\n"
msgstr "%s: 引数が多すぎます\\n"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s: 不明な関数 '%s' です\\n"
@@ -10804,6 +10784,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13042,6 +13028,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16141,6 +16130,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28261,6 +28253,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32545,6 +32540,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34162,6 +34160,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37480,6 +37481,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44437,6 +44441,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45547,6 +45554,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45700,6 +45710,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr ""
@@ -46075,9 +46091,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46396,9 +46409,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49192,6 +49202,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53272,9 +53285,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64087,12 +64097,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64141,9 +64145,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64450,9 +64451,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68746,9 +68744,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74062,9 +74057,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75514,9 +75506,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75526,9 +75515,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76219,12 +76205,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76915,9 +76895,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77014,9 +76991,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77029,9 +77003,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77419,12 +77390,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77821,15 +77786,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77848,15 +77804,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79162,9 +79112,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79924,9 +79871,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79942,9 +79886,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80362,9 +80303,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -471,10 +471,6 @@ msgstr ""
msgid "%s: Invalid start value '%s'"
msgstr "%s: Nieprawidłową wartość początkowa '%s'"
#, c-format
msgid "%s: Invalid state"
msgstr "%s: Nieprawidłowy stan"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -507,10 +503,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr ""
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr ""
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr ""
@@ -539,10 +531,6 @@ msgstr ""
msgid "%s: Number out of range"
msgstr ""
#, c-format
msgid "%s: Number was empty"
msgstr ""
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -579,10 +567,6 @@ msgstr ""
msgid "%s: The directory '%s' does not exist"
msgstr "%s: Ścieżka '%s' nie istnieje"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: Nie ma żadnych zadań"
@@ -767,10 +751,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr ""
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr ""
@@ -1822,6 +1802,9 @@ msgstr ""
msgid "missing hexadecimal number in escape"
msgstr ""
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -1923,9 +1906,6 @@ msgstr ""
msgid "%s: Too many arguments"
msgstr ""
msgid "%s: Too many arguments\\n"
msgstr ""
msgid "%s: Unknown function '%s'\\n"
msgstr ""
@@ -10794,6 +10774,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13032,6 +13018,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16131,6 +16120,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28251,6 +28243,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32535,6 +32530,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34152,6 +34150,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37470,6 +37471,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44427,6 +44431,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45537,6 +45544,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45690,6 +45700,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr ""
@@ -46065,9 +46081,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46386,9 +46399,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49182,6 +49192,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53262,9 +53275,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64077,12 +64087,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64131,9 +64135,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64440,9 +64441,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68736,9 +68734,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74052,9 +74047,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75504,9 +75496,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75516,9 +75505,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76209,12 +76195,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76905,9 +76885,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77004,9 +76981,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77019,9 +76993,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77409,12 +77380,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77811,15 +77776,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77838,15 +77794,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79152,9 +79102,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79914,9 +79861,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79932,9 +79876,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80352,9 +80293,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -476,10 +476,6 @@ msgstr ""
msgid "%s: Invalid start value '%s'"
msgstr ""
#, c-format
msgid "%s: Invalid state"
msgstr "%s: Estado inválido"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -512,10 +508,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr ""
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr ""
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr ""
@@ -544,10 +536,6 @@ msgstr "%s: Não está dentro de laço"
msgid "%s: Number out of range"
msgstr ""
#, c-format
msgid "%s: Number was empty"
msgstr ""
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -584,10 +572,6 @@ msgstr ""
msgid "%s: The directory '%s' does not exist"
msgstr "%s: O diretório “%s” não existe"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: Não há tarefas"
@@ -772,10 +756,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr ""
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr ""
@@ -1827,6 +1807,9 @@ msgstr "precisão inválida: %s"
msgid "missing hexadecimal number in escape"
msgstr "falta número hexadecimal no escape"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -1928,9 +1911,6 @@ msgstr ""
msgid "%s: Too many arguments"
msgstr ""
msgid "%s: Too many arguments\\n"
msgstr ""
msgid "%s: Unknown function '%s'\\n"
msgstr ""
@@ -10799,6 +10779,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13037,6 +13023,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16136,6 +16125,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28256,6 +28248,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32540,6 +32535,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34157,6 +34155,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37475,6 +37476,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44432,6 +44436,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45542,6 +45549,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45695,6 +45705,12 @@ msgstr "Print suppressions for detected errors"
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr "Print tally"
@@ -46070,9 +46086,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46391,9 +46404,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49187,6 +49197,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53267,9 +53280,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64082,12 +64092,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64136,9 +64140,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64445,9 +64446,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68741,9 +68739,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74057,9 +74052,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75509,9 +75501,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75521,9 +75510,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76214,12 +76200,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76910,9 +76890,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77009,9 +76986,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77024,9 +76998,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77414,12 +77385,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77816,15 +77781,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77843,15 +77799,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79157,9 +79107,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79919,9 +79866,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79937,9 +79881,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80357,9 +80298,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -472,10 +472,6 @@ msgstr ""
msgid "%s: Invalid start value '%s'"
msgstr ""
#, c-format
msgid "%s: Invalid state"
msgstr "%s: Ogiltigt tillstånd"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr ""
@@ -508,10 +504,6 @@ msgstr ""
msgid "%s: Missing -- separator"
msgstr ""
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr ""
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr ""
@@ -540,10 +532,6 @@ msgstr "%s: Inte i en loop"
msgid "%s: Number out of range"
msgstr ""
#, c-format
msgid "%s: Number was empty"
msgstr ""
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr ""
@@ -580,10 +568,6 @@ msgstr ""
msgid "%s: The directory '%s' does not exist"
msgstr "%s: Katalogen '%s' existerar inte"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr ""
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: Det finns inga jobb"
@@ -768,10 +752,6 @@ msgstr ""
msgid "%s: too many arguments"
msgstr ""
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr ""
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr ""
@@ -1823,6 +1803,9 @@ msgstr ""
msgid "missing hexadecimal number in escape"
msgstr "saknad hexadecimalt nummer i escapesekvens"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr ""
@@ -1922,10 +1905,7 @@ 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"
msgid "%s: Too many arguments"
msgstr ""
msgid "%s: Too many arguments\\n"
msgstr "%s: För många argument\\n"
msgstr "%s: För många argument"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s: Okänd funktion '%s'\\n"
@@ -10795,6 +10775,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13033,6 +13019,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16132,6 +16121,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28252,6 +28244,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32536,6 +32531,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34153,6 +34151,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37471,6 +37472,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44428,6 +44432,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45538,6 +45545,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr "Skriv obehandlade filnamn"
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45691,6 +45701,12 @@ msgstr "Visa undertryckningar för detekterade fel"
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr "Visa sammanställning av antal funktionanrop"
@@ -46066,9 +46082,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46387,9 +46400,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49183,6 +49193,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53263,9 +53276,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64078,12 +64088,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64132,9 +64136,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64441,9 +64442,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68737,9 +68735,6 @@ msgstr "Uppdatera spegellista"
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74053,9 +74048,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75505,9 +75497,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75517,9 +75506,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76210,12 +76196,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76906,9 +76886,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77005,9 +76982,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77020,9 +76994,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77410,12 +77381,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77812,15 +77777,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77839,15 +77795,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79153,9 +79103,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79915,9 +79862,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79933,9 +79877,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80353,9 +80294,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -496,10 +496,6 @@ msgstr "%s: 无效的排序键 '%s'"
msgid "%s: Invalid start value '%s'"
msgstr "%s: 无效的起始值 '%s'"
#, c-format
msgid "%s: Invalid state"
msgstr "%s: 无效状态"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr "%s: 无效的样式值 '%s'"
@@ -532,10 +528,6 @@ msgstr "%s: 长标识 '%s' 已定义"
msgid "%s: Missing -- separator"
msgstr "%s: 缺少 -- 分隔符"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s: 新限制不能为空字符串"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s: 未找到键 '%s' 的绑定"
@@ -564,10 +556,6 @@ msgstr "%s: 不在循环体内部"
msgid "%s: Number out of range"
msgstr "%s数字超出范围"
#, c-format
msgid "%s: Number was empty"
msgstr "%s数字为空"
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr "%s: 选项 %s 和 %s 无法一起使用"
@@ -604,10 +592,6 @@ msgstr "%s: 短标识 '%c' 无效,必须是字母、数字或 '#'"
msgid "%s: The directory '%s' does not exist"
msgstr "%s: 目录 '%s' 不存在"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr "%s: 变量 '%s' 不存在"
#, c-format
msgid "%s: There are no jobs"
msgstr "%s: 没有作业"
@@ -792,10 +776,6 @@ msgstr "%s: 不存在行 %s"
msgid "%s: too many arguments"
msgstr "%s: 参数太多"
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr "%s: 参数 -i 用于表示 --silent 已弃用。请改用 -s 或 --silent 代替。"
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr "%s: 数值未完全转换 (无法转换 '%s')"
@@ -1850,6 +1830,9 @@ msgstr "无效的精度:%s"
msgid "missing hexadecimal number in escape"
msgstr "在转义中缺少十六进制数字"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr "仅支持 f1 至 f%d不支持 'f%s'"
@@ -1951,9 +1934,6 @@ msgstr "%s: 要跳过的位置数必须是非负整数\\n"
msgid "%s: Too many arguments"
msgstr "%s: 参数过多"
msgid "%s: Too many arguments\\n"
msgstr "%s: 参数过多\\n"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s: 未知函数 '%s'\\n"
@@ -10822,6 +10802,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13060,6 +13046,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16159,6 +16148,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28279,6 +28271,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32563,6 +32558,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34180,6 +34178,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37498,6 +37499,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44455,6 +44459,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45565,6 +45572,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45718,6 +45728,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr ""
@@ -46093,9 +46109,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46414,9 +46427,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49210,6 +49220,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53290,9 +53303,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64105,12 +64115,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64159,9 +64163,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64468,9 +64469,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68764,9 +68762,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74080,9 +74075,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75532,9 +75524,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75544,9 +75533,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76237,12 +76223,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76933,9 +76913,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77032,9 +77009,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77047,9 +77021,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77437,12 +77408,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77839,15 +77804,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77866,15 +77822,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79180,9 +79130,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79942,9 +79889,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79960,9 +79904,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80380,9 +80321,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -469,10 +469,6 @@ msgstr "%s無效的排序鍵「%s」"
msgid "%s: Invalid start value '%s'"
msgstr "%s無效的起點索引值「%s」"
#, c-format
msgid "%s: Invalid state"
msgstr "%s無效的狀態"
#, c-format
msgid "%s: Invalid style value '%s'"
msgstr "%s無效的樣式「%s」"
@@ -505,10 +501,6 @@ msgstr "%s定義過長旗標「%s」了"
msgid "%s: Missing -- separator"
msgstr "%s缺少 -- 分隔"
#, c-format
msgid "%s: New limit cannot be an empty string"
msgstr "%s新的限制不能是空字串"
#, c-format
msgid "%s: No binding found for key '%s'"
msgstr "%s找不到按鍵「%s」的綁定"
@@ -537,10 +529,6 @@ msgstr "%s不在迴圈裡面"
msgid "%s: Number out of range"
msgstr "%s數字超出範圍"
#, c-format
msgid "%s: Number was empty"
msgstr "%s數字空白"
#, c-format
msgid "%s: Options %s and %s cannot be used together"
msgstr "%s選項 %s 和 %s 不能同時使用"
@@ -577,10 +565,6 @@ msgstr "%s短旗標「%c」無效必須是字母、數字、或「#」"
msgid "%s: The directory '%s' does not exist"
msgstr "%s目錄「%s」不存在"
#, c-format
msgid "%s: The variable '%s' does not exist"
msgstr "%s變數「%s」不存在"
#, c-format
msgid "%s: There are no jobs"
msgstr "%s沒有作業"
@@ -765,10 +749,6 @@ msgstr "%s沒有第 %s 行"
msgid "%s: too many arguments"
msgstr "%s太多引數"
#, c-format
msgid "%s: usage of -i for --silent is deprecated. Please use -s or --silent instead."
msgstr "%s以 -i 表示 --silent 的作法已棄用。請改用 -s 或 --silent。"
#, c-format
msgid "%s: value not completely converted (can't convert '%s')"
msgstr "%s值未完全轉換無法轉換「%s」"
@@ -1824,6 +1804,9 @@ msgstr "無效的精度:%s"
msgid "missing hexadecimal number in escape"
msgstr "轉義序列缺少十六進位數字"
msgid "non-zero scale value only valid for base 10"
msgstr ""
#, c-format
msgid "only f1 through f%d are supported, not 'f%s'"
msgstr "只支援 f1 至 f%d不包括「f%s」"
@@ -1924,10 +1907,7 @@ msgid "%s: The number of positions to skip must be a non-negative integer\\n"
msgstr "%s要略過的位置數量必須是非負整數\\n"
msgid "%s: Too many arguments"
msgstr "%s引數太"
msgid "%s: Too many arguments\\n"
msgstr "%s引數太多\\n"
msgstr "%s引數太"
msgid "%s: Unknown function '%s'\\n"
msgstr "%s未知函式「%s」\\n"
@@ -10799,6 +10779,12 @@ msgstr ""
msgid "Check that working files are unmodified."
msgstr ""
msgid "Check the GPG signature of commits"
msgstr ""
msgid "Check the GPG signature of tags"
msgstr ""
msgid "Check the branch related to the current directory"
msgstr ""
@@ -13037,6 +13023,9 @@ msgstr ""
msgid "Copies between two remote hosts are transferred through the local host"
msgstr ""
msgid "Copr hub hostname"
msgstr ""
msgid "Copy Cc: list from first message to the others"
msgstr ""
@@ -16136,6 +16125,9 @@ msgstr ""
msgid "Disable \\write18{SHELL COMMAND}"
msgstr ""
msgid "Disable a Copr repository"
msgstr ""
msgid "Disable a NuGet source"
msgstr ""
@@ -28256,6 +28248,9 @@ msgstr ""
msgid "Format to serialize in"
msgstr ""
msgid "Format to use for the output"
msgstr ""
msgid "Format to use when exporting"
msgstr ""
@@ -32540,6 +32535,9 @@ msgstr ""
msgid "Install Node.js from source"
msgstr ""
msgid "Install a Copr repository"
msgstr ""
msgid "Install a Python version"
msgstr ""
@@ -34157,6 +34155,9 @@ msgstr ""
msgid "List CloudFront distribution points"
msgstr ""
msgid "List Copr repositories"
msgstr ""
msgid "List DPP-capable devices"
msgstr ""
@@ -37475,6 +37476,9 @@ msgstr ""
msgid "Manage .pac* files"
msgstr ""
msgid "Manage Copr repositories"
msgstr ""
msgid "Manage Flexible Resources between Primary and Secondary Controller "
msgstr ""
@@ -44432,6 +44436,9 @@ msgstr ""
msgid "Print commands before executing them"
msgstr ""
msgid "Print commit contents"
msgstr ""
msgid "Print compiler information"
msgstr ""
@@ -45542,6 +45549,9 @@ msgstr ""
msgid "Print raw entry names"
msgstr ""
msgid "Print raw gpg status output"
msgstr ""
msgid "Print raw stats"
msgstr ""
@@ -45695,6 +45705,12 @@ msgstr ""
msgid "Print synopsis and options"
msgstr ""
msgid "Print system info for debugging"
msgstr ""
msgid "Print tag contents"
msgstr ""
msgid "Print tally"
msgstr ""
@@ -46070,9 +46086,6 @@ msgstr ""
msgid "Print the version of the program and exit"
msgstr ""
msgid "Print the version string"
msgstr ""
msgid "Print the version string of firewalld"
msgstr ""
@@ -46391,9 +46404,6 @@ msgstr ""
msgid "Prints an estimate of the download size of the APK"
msgstr ""
msgid "Prints author and licensing information"
msgstr ""
msgid "Prints backup sets and chains currently in repository"
msgstr ""
@@ -49187,6 +49197,9 @@ msgstr ""
msgid "Remove [all] packages from cache"
msgstr ""
msgid "Remove a Copr repository"
msgstr ""
msgid "Remove a NuGet package reference"
msgstr ""
@@ -53267,9 +53280,6 @@ msgstr ""
msgid "Save and restore package state"
msgstr ""
msgid "Save authtoken to configuration file"
msgstr ""
msgid "Save brightness"
msgstr ""
@@ -64082,12 +64092,6 @@ msgstr ""
msgid "Start a SOPS key kervice server"
msgstr ""
msgid "Start a TCP tunnel"
msgstr ""
msgid "Start a TLS tunnel"
msgstr ""
msgid "Start a block commit operation"
msgstr ""
@@ -64136,9 +64140,6 @@ msgstr ""
msgid "Start an Elm project"
msgstr ""
msgid "Start an HTTP tunnel"
msgstr ""
msgid "Start an IRB session in the context of the current bundle"
msgstr ""
@@ -64445,9 +64446,6 @@ msgstr ""
msgid "Start tracking work in Phrequent"
msgstr ""
msgid "Start tunnels by name from the configuration file"
msgstr ""
msgid "Start up the visual interface and display its preview screen"
msgstr ""
@@ -68741,9 +68739,6 @@ msgstr ""
msgid "Update modules"
msgstr ""
msgid "Update ngrok to the latest version"
msgstr ""
msgid "Update object name stored in a ref safely"
msgstr ""
@@ -74057,9 +74052,6 @@ msgstr ""
msgid "bind key to command"
msgstr ""
msgid "bind remote address (requires you reserve an address)"
msgstr ""
msgid "binding for command mode"
msgstr ""
@@ -75509,9 +75501,6 @@ msgstr ""
msgid "enable word mangling rules"
msgstr ""
msgid "enable/disable http introspection"
msgstr ""
msgid "enables a keepalive every N seconds"
msgstr ""
@@ -75521,9 +75510,6 @@ msgstr ""
msgid "end filenames with NUL, for use with xargs"
msgstr ""
msgid "enforce basic auth on tunnel endpoint, 'user:password'"
msgstr ""
msgid "enforce strict mode"
msgstr ""
@@ -76214,12 +76200,6 @@ msgstr ""
msgid "highlight this process and its ancestors"
msgstr ""
msgid "host tunnel on a custom subdomain"
msgstr ""
msgid "host tunnel on custom hostname (requires DNS CNAME)"
msgstr ""
msgid "how to combine with options from fstab/mtab"
msgstr ""
@@ -76910,9 +76890,6 @@ msgstr ""
msgid "list-dependencies flat, not as tree"
msgstr ""
msgid "listen for http, https or both: true/false/both"
msgstr ""
msgid "listen mode, for inbound connects"
msgstr ""
@@ -77009,9 +76986,6 @@ msgstr ""
msgid "log positions of (de)serialized objects in the snapshot"
msgstr ""
msgid "log record format: 'term', 'logfmt', 'json'"
msgstr ""
msgid "log statistical profiling information"
msgstr ""
@@ -77024,9 +76998,6 @@ msgstr ""
msgid "log what we're doing to the specified FILE"
msgstr ""
msgid "logging level"
msgstr ""
msgid "loglevel of client"
msgstr ""
@@ -77414,12 +77385,6 @@ msgstr ""
msgid "new package name"
msgstr ""
msgid "ngrok server region [us , eu, au, ap] (default: us)"
msgstr ""
msgid "ngrok.com authtoken identifying a user"
msgstr ""
msgid "no cleaning of distfiles."
msgstr ""
@@ -77816,15 +77781,6 @@ msgstr ""
msgid "path to SSH private key file. May be repeated."
msgstr ""
msgid "path to TLS certificate authority to verify client certs"
msgstr ""
msgid "path to a TLS certificate for TLS termination"
msgstr ""
msgid "path to a TLS key for TLS termination"
msgstr ""
msgid "path to a custom ESLint configuration file"
msgstr ""
@@ -77843,15 +77799,9 @@ msgstr ""
msgid "path to config file for the test"
msgstr ""
msgid "path to config files; they are merged if multiple"
msgstr ""
msgid "path to log file"
msgstr ""
msgid "path to log file, 'stdout', 'stderr' or 'false'"
msgstr ""
msgid "path to plan to insert multiple data files that have master-detail relationships"
msgstr ""
@@ -79157,9 +79107,6 @@ msgstr ""
msgid "set Git namespace"
msgstr ""
msgid "set Host header; if 'rewrite' use local address hostname"
msgstr ""
msgid "set NAME to default values"
msgstr ""
@@ -79919,9 +79866,6 @@ msgstr ""
msgid "start a server in the background"
msgstr ""
msgid "start all tunnels in the configuration file"
msgstr ""
msgid "start and print only the URL"
msgstr ""
@@ -79937,9 +79881,6 @@ msgstr ""
msgid "start emacs with specified init directory"
msgstr ""
msgid "start running no tunnels"
msgstr ""
msgid "start session"
msgstr ""
@@ -80357,9 +80298,6 @@ msgstr ""
msgid "update a record"
msgstr ""
msgid "update channel (stable, beta)"
msgstr ""
msgid "update client status bar"
msgstr ""

View File

@@ -10,6 +10,19 @@ function __dnf_list_installed_packages
dnf repoquery --cacheonly "$cur*" --qf "%{name}\n" --installed </dev/null
end
function __dnf_list_copr_repos
set -l copr_repos (dnf copr list)
switch $argv[1]
case enable
string replace -f -- " (disabled)" "" $copr_repos
case disable
string match -v -- "*(disabled)*" $copr_repos
case '*'
string replace -- " (disabled)" "" $copr_repos
end
end
function __dnf_list_available_packages
set -l tok (commandline -ct | string collect)
set -l files (__fish_complete_suffix .rpm)
@@ -86,6 +99,20 @@ complete -c dnf -n "__fish_seen_subcommand_from clean" -xa metadata -d "Removes
complete -c dnf -n "__fish_seen_subcommand_from clean" -xa packages -d "Removes any cached packages"
complete -c dnf -n "__fish_seen_subcommand_from clean" -xa all -d "Removes all cache"
# Copr
set -l coprcommands list enable disable remove debug
complete -c dnf -n __fish_use_subcommand -xa copr -d "Manage Copr repositories"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -xa list -d "List Copr repositories"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -xa enable -d "Install a Copr repository"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -xa disable -d "Disable a Copr repository"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -xa remove -d "Remove a Copr repository"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -xa debug -d "Print system info for debugging"
complete -c dnf -n "__fish_seen_subcommand_from copr; and not __fish_seen_subcommand_from $coprcommands" -l hub -d "Copr hub hostname"
for i in enable disable remove
complete -c dnf -n "__fish_seen_subcommand_from copr; and __fish_seen_subcommand_from $i" -xa "(__dnf_list_copr_repos $i)"
end
# Distro-sync
complete -c dnf -n __fish_use_subcommand -xa distro-sync -d "Synchronizes packages to match the latest"

View File

@@ -2969,11 +2969,24 @@ complete -f -c git -n '__fish_git_using_command update-ref' -l create-reflog -d
complete -f -c git -n '__fish_git_using_command update-ref' -l stdin -d 'Read instructions from stdin'
complete -f -c git -n '__fish_git_using_command update-ref' -s z -d 'NUL-terminated format for stdin'
### verify-commit
complete -f -c git -n __fish_git_needs_command -a verify-commit -d 'Check the GPG signature of commits'
complete -f -c git -n '__fish_git_using_command verify-commit' -ka '(__fish_git_commits)'
complete -f -c git -n '__fish_git_using_command verify-commit' -s v -l verbose -d 'Print commit contents'
complete -f -c git -n '__fish_git_using_command verify-commit' -l raw -d 'Print raw gpg status output'
### verify-pack
complete -f -c git -n __fish_git_needs_command -a verify-pack -d 'Validate packed Git archive files'
complete -f -c git -n '__fish_git_using_command verify-pack' -s v -l verbose -d 'Show objects contained in pack'
complete -f -c git -n '__fish_git_using_command verify-pack' -s s -l stat-only -d 'Only show histogram of delta chain length'
### verify-tag
complete -f -c git -n __fish_git_needs_command -a verify-tag -d 'Check the GPG signature of tags'
complete -f -c git -n '__fish_git_using_command verify-tag' -ka '(__fish_git_tags)'
complete -f -c git -n '__fish_git_using_command verify-tag' -s v -l verbose -d 'Print tag contents'
complete -f -c git -n '__fish_git_using_command verify-tag' -l raw -d 'Print raw gpg status output'
complete -x -c git -n '__fish_git_using_command verify-tag' -l format -d 'Format to use for the output'
### write-tree
complete -f -c git -n __fish_git_needs_command -a write-tree -d 'Create a tree object from the current index'
complete -f -c git -n '__fish_git_using_command write-tree' -l missing-ok -d 'Allow missing objects'

View File

@@ -1,44 +1 @@
# Commands
complete -c ngrok -f -a authtoken -d "Save authtoken to configuration file"
complete -c ngrok -f -a credits -d "Prints author and licensing information"
complete -c ngrok -f -a http -d "Start an HTTP tunnel"
complete -c ngrok -f -a start -d "Start tunnels by name from the configuration file"
complete -c ngrok -f -a tcp -d "Start a TCP tunnel"
complete -c ngrok -f -a tls -d "Start a TLS tunnel"
complete -c ngrok -f -a update -d "Update ngrok to the latest version"
complete -c ngrok -f -a version -d "Print the version string"
complete -c ngrok -f -a help -d "Shows a list of commands or help for one command"
# General Options
complete -c ngrok -l help -e -f
complete -c ngrok -l authtoken -r -d "ngrok.com authtoken identifying a user"
complete -c ngrok -l config -r -d "path to config files; they are merged if multiple"
complete -c ngrok -l log -x -a "false stderr stdout" -d "path to log file, 'stdout', 'stderr' or 'false'"
complete -c ngrok -l log-format -x -a "term logfmt json" -d "log record format: 'term', 'logfmt', 'json'"
complete -c ngrok -l log-level -r -a info -d "logging level"
complete -c ngrok -l region -x -a "us eu au ap" -d "ngrok server region [us , eu, au, ap] (default: us)"
# http & tls's options
complete -c ngrok -l hostname -r -d "host tunnel on custom hostname (requires DNS CNAME)"
complete -c ngrok -l subdomain -r -d "host tunnel on a custom subdomain"
# http's options
complete -c ngrok -l auth -r -d "enforce basic auth on tunnel endpoint, 'user:password'"
complete -c ngrok -l bind-tls -x -a "both https http" -d "listen for http, https or both: true/false/both"
complete -c ngrok -l host-header -r -d "set Host header; if 'rewrite' use local address hostname"
complete -c ngrok -l inspect -d "enable/disable http introspection"
# tls's options
complete -c ngrok -l client-cas -r -d "path to TLS certificate authority to verify client certs"
complete -c ngrok -l crt -r -d "path to a TLS certificate for TLS termination"
complete -c ngrok -l key -r -d "path to a TLS key for TLS termination"
# start's options
complete -c ngrok -l all -d "start all tunnels in the configuration file"
complete -c ngrok -l none -d "start running no tunnels"
# tcp's options
complete -c ngrok -l remote-addr -r -d "bind remote address (requires you reserve an address)"
# update's options
complete -c ngrok -l channel -x -a "stable beta" -d "update channel (stable, beta)"
SHELL=/bin/fish ngrok completion 2>/dev/null | source

View File

@@ -129,7 +129,9 @@ function fish_vi_exec_motion
set motion_cmd commandline -f $motion
end
switch $motion[1]
case forward-char backward-char
case forward-char
set -e seq_total[1]
case backward-char
$motion_cmd
set -e seq_total[1]
end

View File

@@ -10,7 +10,10 @@ function isatty -d "Tests if a file descriptor is a tty"
end
if set -q argv[2]
printf (_ "%s: Too many arguments") isatty >&2
{
printf (_ "%s: Too many arguments") isatty
echo
} >&2
return 1
end

View File

@@ -14,7 +14,10 @@ function psub --description "Read from stdin into a file and output the filename
set -l funcname
if not status --is-command-substitution
printf (_ "%s: Not inside of command substitution") psub >&2
{
printf (_ "%s: Not inside of command substitution") psub
echo
} >&2
return 1
end

View File

@@ -15,7 +15,10 @@ function setenv
# `setenv` accepts only two arguments: the var name and the value. If there are more than two
# args it is an error. The error message is verbatim from csh.
if set -q argv[3]
printf (_ '%s: Too many arguments\n') setenv >&2
{
printf (_ '%s: Too many arguments') setenv
echo
} >&2
return 1
end

View File

@@ -182,7 +182,10 @@ function umask --description "Set default file permission mask"
return 1
case '*'
printf (_ '%s: Too many arguments\n') umask >&2
{
printf (_ '%s: Too many arguments') umask
echo
} >&2
return 1
end
end

View File

@@ -501,6 +501,19 @@ class Deroffer:
return True
return False
def device_control(self):
# groff \X'...' device control escape (and \Z'...' zero-width).
# help2man 1.50+ uses \X'tty: link URL' for hyperlinks.
# We just skip the entire escape.
if self.str_at(1) in "XZ" and self.str_at(2) == "'":
self.skip_char(3)
while self.str_at(0) and self.str_at(0) != "'":
self.skip_char()
if self.str_at(0) == "'":
self.skip_char()
return True
return False
def var(self):
reg = ""
s0s1 = self.s[0:2]
@@ -650,6 +663,8 @@ class Deroffer:
return self.size()
elif c in "hvwud":
return self.numreq()
elif c in "XZ":
return self.device_control()
elif c in "n*":
return self.var()
elif c == "(":
@@ -1314,6 +1329,9 @@ def built_command(options, description):
def remove_groff_formatting(data):
# Strip groff \X'...' device control escapes (help2man 1.50+ hyperlinks)
# and \Z'...' zero-width escapes.
data = re.sub(r"\\[XZ]'[^']*'", "", data)
data = data.replace("\\fI", "")
data = data.replace("\\fP", "")
data = data.replace("\\f1", "")

View File

@@ -22,8 +22,8 @@
builtins::{
fish_indent, fish_key_reader,
shared::{
BUILTIN_ERR_MISSING, BUILTIN_ERR_UNEXP_ARG, BUILTIN_ERR_UNKNOWN, STATUS_CMD_ERROR,
STATUS_CMD_OK, STATUS_CMD_UNKNOWN, VERSION_STRING_TEMPLATE,
BUILTIN_ERR_MISSING_OPT_ARG, BUILTIN_ERR_UNEXP_OPT_ARG, BUILTIN_ERR_UNKNOWN_OPT,
STATUS_CMD_ERROR, STATUS_CMD_OK, STATUS_CMD_UNKNOWN, VERSION_STRING_TEMPLATE,
},
},
common::{
@@ -320,21 +320,21 @@ fn fish_parse_opt(args: &mut [WString], opts: &mut FishCmdOpts) -> ControlFlow<i
'?' => {
eprintf!(
"%s\n\n",
wgettext_fmt!(BUILTIN_ERR_UNKNOWN, "fish", args[w.wopt_index - 1])
wgettext_fmt!(BUILTIN_ERR_UNKNOWN_OPT, "fish", args[w.wopt_index - 1])
);
return ControlFlow::Break(1);
}
':' => {
eprintf!(
"%s\n\n",
wgettext_fmt!(BUILTIN_ERR_MISSING, "fish", args[w.wopt_index - 1])
wgettext_fmt!(BUILTIN_ERR_MISSING_OPT_ARG, "fish", args[w.wopt_index - 1])
);
return ControlFlow::Break(1);
}
';' => {
eprintf!(
"%s\n\n",
wgettext_fmt!(BUILTIN_ERR_UNEXP_ARG, "fish", args[w.wopt_index - 1])
wgettext_fmt!(BUILTIN_ERR_UNEXP_OPT_ARG, "fish", args[w.wopt_index - 1])
);
return ControlFlow::Break(1);
}

View File

@@ -155,7 +155,7 @@ fn check_for_mutually_exclusive_flags(
flag1,
flag2
));
return Err(STATUS_CMD_ERROR);
return Err(STATUS_INVALID_ARGS);
}
}
}
@@ -962,7 +962,7 @@ fn argparse_parse_flags<'args>(
)?;
} else if opts.unknown_handling == UnknownHandling::Error {
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNKNOWN,
BUILTIN_ERR_UNKNOWN_OPT,
opts.name,
args_read[w.wopt_index - 1]
));
@@ -1017,7 +1017,7 @@ fn argparse_parse_flags<'args>(
} else {
// the option is at the end of argv, so it has no argument
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_MISSING,
BUILTIN_ERR_MISSING_OPT_ARG,
opts.name,
args_read[w.wopt_index - 1]
));
@@ -1033,7 +1033,7 @@ fn argparse_parse_flags<'args>(
&& arg_contents.contains('=')
{
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNEXP_ARG,
BUILTIN_ERR_UNEXP_OPT_ARG,
opts.name,
args_read[w.wopt_index - 1]
));

View File

@@ -16,10 +16,12 @@
const DEFAULT_BIND_MODE: &wstr = L!("default");
const BIND_INSERT: c_int = 0;
const BIND_ERASE: c_int = 1;
const BIND_KEY_NAMES: c_int = 2;
const BIND_FUNCTION_NAMES: c_int = 3;
enum BindMode {
Insert,
Erase,
KeyNames,
FunctionNames,
}
struct Options {
all: bool,
@@ -30,7 +32,7 @@ struct Options {
user: bool,
have_preset: bool,
preset: bool,
mode: c_int,
mode: BindMode,
bind_mode: Option<WString>,
sets_bind_mode: Option<WString>,
color: ColorEnabled,
@@ -47,7 +49,7 @@ fn new() -> Options {
user: false,
have_preset: false,
preset: false,
mode: BIND_INSERT,
mode: BindMode::Insert,
bind_mode: None,
sets_bind_mode: None,
color: ColorEnabled::default(),
@@ -448,8 +450,8 @@ fn parse_cmd_opts(
while let Some(c) = w.next_opt() {
match c {
'a' => opts.all = true,
'e' => opts.mode = BIND_ERASE,
'f' => opts.mode = BIND_FUNCTION_NAMES,
'e' => opts.mode = BindMode::Erase,
'f' => opts.mode = BindMode::FunctionNames,
'h' => opts.print_help = true,
'k' => {
streams.err.appendln(&wgettext_fmt!(
@@ -458,7 +460,7 @@ fn parse_cmd_opts(
));
return Err(STATUS_INVALID_ARGS);
}
'K' => opts.mode = BIND_KEY_NAMES,
'K' => opts.mode = BindMode::KeyNames,
'L' => {
opts.list_modes = true;
return Ok(SUCCESS);
@@ -534,7 +536,7 @@ pub fn bind(
}
match self.opts.mode {
BIND_ERASE => {
BindMode::Erase => {
// If we get both, we erase both.
if self.opts.user
&& self.erase(
@@ -557,19 +559,13 @@ pub fn bind(
return Err(STATUS_CMD_ERROR);
}
}
BIND_INSERT => {
BindMode::Insert => {
if self.insert(optind, argv, parser, streams) {
return Err(STATUS_CMD_ERROR);
}
}
BIND_KEY_NAMES => self.key_names(streams),
BIND_FUNCTION_NAMES => self.function_names(streams),
_ => {
streams
.err
.appendln(&wgettext_fmt!("%s: Invalid state", cmd));
return Err(STATUS_CMD_ERROR);
}
BindMode::KeyNames => self.key_names(streams),
BindMode::FunctionNames => self.function_names(streams),
}
Ok(SUCCESS)
}

View File

@@ -69,17 +69,10 @@ pub fn cd(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> Built
let pwd = vars.get_pwd_slash();
let dirs = path_apply_cdpath(dir_in, &pwd, vars);
if dirs.is_empty() {
streams
.err
.appendln(&wgettext_fmt!(DIR_DOES_NOT_EXIST, cmd, dir_in));
if !parser.is_interactive() {
streams.err.append(&parser.current_line());
}
return Err(STATUS_CMD_ERROR);
}
assert!(
!dirs.is_empty(),
"dirs should always contains a least an abs path, or a rel path, or '<PWD>/...'"
);
let mut best_errno = 0;
let mut broken_symlink = WString::new();

View File

@@ -1027,7 +1027,7 @@ enum OutputType {
'c' => output_type = OutputType::Check,
';' => {
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNEXP_ARG,
BUILTIN_ERR_UNEXP_OPT_ARG,
"fish_indent",
w.argv[w.wopt_index - 1]
));
@@ -1035,7 +1035,7 @@ enum OutputType {
}
'?' => {
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNKNOWN,
BUILTIN_ERR_UNKNOWN_OPT,
"fish_indent",
w.argv[w.wopt_index - 1]
));

View File

@@ -12,7 +12,7 @@
use libc::{STDIN_FILENO, VEOF, VINTR};
use crate::{
builtins::shared::BUILTIN_ERR_UNKNOWN,
builtins::shared::BUILTIN_ERR_UNKNOWN_OPT,
common::{PROGRAM_NAME, get_program_name, osstr2wcstring, shell_modes},
env::{EnvStack, Environment as _, env_init},
future_feature_flags,
@@ -213,15 +213,15 @@ fn parse_flags(
}
';' => {
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNEXP_ARG,
BUILTIN_ERR_UNEXP_OPT_ARG,
"fish_key_reader",
w.argv[w.wopt_index - 1]
));
return ControlFlow::Break(Err(STATUS_CMD_ERROR));
}
'?' => {
streams.err.append(&wgettext_fmt!(
BUILTIN_ERR_UNKNOWN,
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_UNKNOWN_OPT,
"fish_key_reader",
w.argv[w.wopt_index - 1]
));

View File

@@ -145,8 +145,7 @@ fn parse_cmd_opts(
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_COMBO2,
cmd,
"non-zero scale value only valid
for base 10"
wgettext!("non-zero scale value only valid for base 10")
));
return Err(STATUS_INVALID_ARGS);
}

View File

@@ -28,7 +28,7 @@ macro_rules! path_error {
}
fn path_unknown_option(parser: &Parser, streams: &mut IoStreams, subcmd: &wstr, opt: &wstr) {
path_error!(streams, BUILTIN_ERR_UNKNOWN, subcmd, opt);
path_error!(streams, BUILTIN_ERR_UNKNOWN_OPT, subcmd, opt);
builtin_print_error_trailer(parser, streams.err, L!("path"));
}
@@ -283,7 +283,7 @@ fn parse_opts<'args>(
let types_args = split_string_tok(w.woptarg.unwrap(), L!(","), None);
for t in types_args {
let Ok(r#type) = t.try_into() else {
path_error!(streams, "%s: Invalid type '%s'", "path", t);
path_error!(streams, "%s: Invalid type '%s'", cmd, t);
return Err(STATUS_INVALID_ARGS);
};
*types |= r#type;
@@ -295,7 +295,7 @@ fn parse_opts<'args>(
let perms_args = split_string_tok(w.woptarg.unwrap(), L!(","), None);
for p in perms_args {
let Ok(perm) = p.try_into() else {
path_error!(streams, "%s: Invalid permission '%s'", "path", p);
path_error!(streams, "%s: Invalid permission '%s'", cmd, p);
return Err(STATUS_INVALID_ARGS);
};
*perms |= perm;

View File

@@ -205,16 +205,13 @@ impl<'a, 'b> builtin_printf_state_t<'a, 'b> {
fn verify_numeric(&mut self, s: &wstr, end: &wstr, errcode: Option<Error>) {
// This check matches the historic `errcode != EINVAL` check from C++.
// Note that empty or missing values will be silently treated as 0.
if errcode != None && errcode != Some(Error::InvalidChar) && errcode != Some(Error::Empty) {
if errcode.is_some_and(|err| err != Error::InvalidChar && err != Error::Empty) {
match errcode.unwrap() {
Error::Overflow => {
self.fatal_error(wgettext_fmt!("%s: Number out of range", s));
}
Error::Empty => {
self.fatal_error(wgettext_fmt!("%s: Number was empty", s));
}
Error::InvalidChar => {
panic!("Unreachable");
Error::InvalidChar | Error::Empty => {
unreachable!("Unreachable");
}
}
} else if !end.is_empty() {

View File

@@ -55,7 +55,6 @@ struct Options {
array: bool,
silent: bool,
split_null: bool,
to_stdout: bool,
nchars: Option<NonZeroUsize>,
one_line: bool,
}
@@ -69,7 +68,7 @@ fn new() -> Self {
}
}
const SHORT_OPTIONS: &wstr = L!("ac:d:fghiLln:p:sStuxzP:UR:L");
const SHORT_OPTIONS: &wstr = L!("ac:d:fghLln:p:sStuxzP:UR:L");
const LONG_OPTIONS: &[WOption] = &[
wopt(L!("array"), ArgType::NoArgument, 'a'),
wopt(L!("command"), ArgType::RequiredArgument, 'c'),
@@ -121,13 +120,6 @@ fn parse_cmd_opts(
'd' => {
opts.delimiter = Some(w.woptarg.unwrap().to_owned());
}
'i' => {
streams.err.appendln(&wgettext_fmt!(
"%s: usage of -i for --silent is deprecated. Please use -s or --silent instead.",
cmd
));
return Err(STATUS_INVALID_ARGS);
}
'f' => {
opts.place.mode |= EnvMode::FUNCTION;
}
@@ -509,25 +501,10 @@ fn validate_read_args(
return Err(STATUS_INVALID_ARGS);
}
let argc = argv.len();
if !opts.array && argc < 1 && !opts.to_stdout {
if opts.array && argv.len() != 1 {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_MIN_ARG_COUNT1, cmd, 1, argc));
return Err(STATUS_INVALID_ARGS);
}
if opts.array && argc != 1 {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_ARG_COUNT1, cmd, 1, argc));
return Err(STATUS_INVALID_ARGS);
}
if opts.to_stdout && argc > 0 {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_MAX_ARG_COUNT1, cmd, 0, argc));
.appendln(&wgettext_fmt!(BUILTIN_ERR_ARG_COUNT1, cmd, 1, argv.len()));
return Err(STATUS_INVALID_ARGS);
}
@@ -590,16 +567,9 @@ pub fn read(parser: &Parser, streams: &mut IoStreams, argv: &mut [&wstr]) -> Bui
let (mut opts, optind) = parse_cmd_opts(argv, parser, streams)?;
let cmd = argv[0];
let mut argv: &[&wstr] = argv;
if !opts.to_stdout {
argv = &argv[optind..];
}
let argv = &argv[optind..];
let argc = argv.len();
if argv.is_empty() {
opts.to_stdout = true;
}
if opts.print_help {
builtin_print_help(parser, streams, cmd);
return Ok(SUCCESS);
@@ -688,7 +658,7 @@ pub fn read(parser: &Parser, streams: &mut IoStreams, argv: &mut [&wstr]) -> Bui
return exit_res;
}
if opts.to_stdout {
if argv.is_empty() {
streams.out.append(&buff);
return exit_res;
}

View File

@@ -294,9 +294,11 @@ fn validate(
}
if args.len() == optind && opts.erase {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_MISSING, cmd, L!("--erase")));
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_MISSING_OPT_ARG,
cmd,
L!("--erase")
));
builtin_print_error_trailer(parser, streams.err, cmd);
return Err(STATUS_INVALID_ARGS);
}
@@ -351,11 +353,8 @@ fn handle_env_return(retval: EnvStackSetResult, cmd: &wstr, key: &wstr, streams:
));
}
EnvStackSetResult::NotFound => {
streams.err.appendln(&wgettext_fmt!(
"%s: The variable '%s' does not exist",
cmd,
key
));
// Only variable deletion can return a `NotFound` error, but that case is explicitly silenced
unreachable!("variable not found");
}
}
}
@@ -729,13 +728,20 @@ fn show(cmd: &wstr, parser: &Parser, streams: &mut IoStreams, args: &[&wstr]) ->
}
} else {
for arg in args.iter().copied() {
let bracket = arg.find(L!("["));
let arg = if let Some(idx) = bracket {
&arg[..idx]
} else {
arg
};
if !valid_var_name(arg) {
streams.err.append(&varname_error(cmd, arg));
builtin_print_error_trailer(parser, streams.err, cmd);
return Err(STATUS_INVALID_ARGS);
}
if arg.contains('[') {
if bracket.is_some() {
streams.err.appendln(&wgettext_fmt!(
"%s: `set --show` does not allow slices with the var names",
cmd
@@ -941,7 +947,7 @@ fn set_internal(
if argv.is_empty() {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_MIN_ARG_COUNT1, cmd, 1));
.appendln(&wgettext_fmt!(BUILTIN_ERR_MIN_ARG_COUNT1, cmd, 1, 0));
builtin_print_error_trailer(parser, streams.err, cmd);
return Err(STATUS_INVALID_ARGS);
}
@@ -1041,7 +1047,7 @@ pub fn set(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> Buil
list(&opts, parser, streams)
} else if opts.show {
show(cmd, parser, streams, args)
} else if args.is_empty() {
} else if args.is_empty() && !(opts.append || opts.prepend) {
list(&opts, parser, streams)
} else {
set_internal(cmd, &opts, parser, streams, args)

View File

@@ -20,11 +20,11 @@
localizable_consts!(
/// Error message on missing argument.
pub BUILTIN_ERR_MISSING
pub BUILTIN_ERR_MISSING_OPT_ARG
"%s: %s: option requires an argument"
/// Error message on unexpected argument.
pub BUILTIN_ERR_UNEXP_ARG
pub BUILTIN_ERR_UNEXP_OPT_ARG
"%s: %s: option does not take an argument"
/// Error message on missing man page.
@@ -44,7 +44,7 @@
"%s: cannot both path and unpath"
/// Error message for unknown switch.
pub BUILTIN_ERR_UNKNOWN
pub BUILTIN_ERR_UNKNOWN_OPT
"%s: %s: unknown option"
/// Error message for invalid bind mode name.
@@ -667,7 +667,7 @@ pub fn builtin_unknown_option(
) {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNKNOWN, cmd, opt));
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNKNOWN_OPT, cmd, opt));
if print_hints {
builtin_print_error_trailer(parser, streams.err, cmd);
}
@@ -685,14 +685,14 @@ pub fn builtin_missing_argument(
// if c in -qc '-qc' is missing the argument, now opt is just 'c'
opt = &opt[opt.len() - 1..];
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_MISSING,
BUILTIN_ERR_MISSING_OPT_ARG,
cmd,
L!("-").to_owned() + opt
));
} else {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_MISSING, cmd, opt));
.appendln(&wgettext_fmt!(BUILTIN_ERR_MISSING_OPT_ARG, cmd, opt));
}
if print_hints {
builtin_print_error_trailer(parser, streams.err, cmd);
@@ -709,7 +709,7 @@ pub fn builtin_unexpected_argument(
) {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNEXP_ARG, cmd, opt));
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNEXP_OPT_ARG, cmd, opt));
if print_hints {
builtin_print_error_trailer(parser, streams.err, cmd);
}
@@ -1042,7 +1042,7 @@ pub fn builtin_break_continue(
if argc != 1 {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNKNOWN, argv[0], argv[1]));
.appendln(&wgettext_fmt!(BUILTIN_ERR_UNKNOWN_OPT, argv[0], argv[1]));
return Err(STATUS_INVALID_ARGS);
}

View File

@@ -399,16 +399,9 @@ pub fn status(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> B
let job_control_mode = match opts.new_job_control_mode {
Some(j) => {
// Flag form used
if !args.is_empty() {
streams.err.appendln(&wgettext_fmt!(
BUILTIN_ERR_ARG_COUNT2,
cmd,
c.to_wstr(),
0,
args.len()
));
return Err(STATUS_INVALID_ARGS);
}
// Any extra args would have already failed, either as an
// unrecognized subcmd, or as a "subcmd combo"
assert!(args.is_empty(), "unexpected job-control args");
j
}
None => {

View File

@@ -34,11 +34,6 @@ macro_rules! string_error {
}
use string_error;
fn string_unknown_option(parser: &Parser, streams: &mut IoStreams, subcmd: &wstr, opt: &wstr) {
string_error!(streams, BUILTIN_ERR_UNKNOWN, subcmd, opt);
builtin_print_error_trailer(parser, streams.err, L!("string"));
}
trait StringSubCommand<'args> {
const SHORT_OPTIONS: &'static wstr;
const LONG_OPTIONS: &'static [WOption<'static>];
@@ -87,13 +82,19 @@ fn parse_opts(
return Err(STATUS_INVALID_ARGS);
}
'?' => {
string_unknown_option(parser, streams, cmd, args_read[w.wopt_index - 1]);
string_error!(
streams,
BUILTIN_ERR_UNKNOWN_OPT,
cmd,
args_read[w.wopt_index - 1]
);
builtin_print_error_trailer(parser, streams.err, L!("string"));
return Err(STATUS_INVALID_ARGS);
}
c => {
let retval = self.parse_opt(cmd, c, w.woptarg);
if let Err(e) = retval {
e.print_error(&args_read, parser, streams, w.woptarg, w.wopt_index);
e.print_error(&args_read, streams, w.woptarg, w.wopt_index);
return Err(e.retval());
}
}
@@ -236,22 +237,26 @@ impl StringError {
fn print_error(
&self,
args: &[&wstr],
parser: &Parser,
streams: &mut IoStreams,
optarg: Option<&wstr>,
optind: usize,
) {
let cmd = args[0];
let subcmd = args[0];
use StringError::*;
match self {
InvalidArgs(msg) => {
streams.err.appendln("string ".chars().chain(msg.chars()));
}
NotANumber => {
string_error!(streams, BUILTIN_ERR_NOT_NUMBER, cmd, optarg.unwrap());
string_error!(streams, BUILTIN_ERR_NOT_NUMBER, subcmd, optarg.unwrap());
}
UnknownOption => {
string_unknown_option(parser, streams, cmd, args[optind - 1]);
// This would mean the subcmd's XXX_OPTIONS does not match
// the list in its `parse_opt()` implementation
unreachable!(
"unexpected option '{}' for 'string {subcmd}'",
args[optind - 1]
)
}
}
}
@@ -368,7 +373,7 @@ pub fn string(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> B
_ => {
streams
.err
.appendln(&wgettext_fmt!(BUILTIN_ERR_INVALID_SUBCMD, cmd, args[0]));
.appendln(&wgettext_fmt!(BUILTIN_ERR_INVALID_SUBCMD, cmd, subcmd_name));
builtin_print_error_trailer(parser, streams.err, cmd);
Err(STATUS_INVALID_ARGS)
}

View File

@@ -42,15 +42,16 @@ fn parse_opt(&mut self, name: &wstr, c: char, arg: Option<&wstr>) -> Result<(),
arg
));
};
let pad_char_width = fish_wcwidth(*pad_char);
if pad_char_width <= 0 {
return Err(invalid_args!(
"%s: Invalid padding character of width zero '%s'",
name,
arg
));
}
self.pad_char_width = pad_char_width as usize;
self.pad_char_width = match fish_wcwidth(*pad_char) {
None | Some(0) => {
return Err(invalid_args!(
"%s: Invalid padding character of width zero '%s'",
name,
arg
));
}
Some(w) => w,
};
self.char_to_pad = *pad_char;
}
'r' => self.pad_from = Direction::Right,

View File

@@ -194,7 +194,7 @@ fn new(
replacement.to_owned()
} else {
Self::interpret_escape(replacement)
.ok_or_else(|| RegexError::InvalidEscape(pattern.to_owned()))?
.ok_or_else(|| RegexError::InvalidEscape(replacement.to_owned()))?
};
Self::Regex {
replacement,

View File

@@ -9,9 +9,9 @@ mod test_expressions {
use crate::nix::isatty;
use crate::wutil::{
Error, Options, file_id_for_path, fish_wcswidth, lwstat, waccess, wcstod::wcstod,
wcstoi_opts, wstat,
Error, Options, file_id_for_path, lwstat, waccess, wcstod::wcstod, wcstoi_opts, wstat,
};
use fish_fallback::fish_wcswidth;
use std::collections::HashMap;
use std::os::unix::prelude::*;
use std::sync::LazyLock;
@@ -750,7 +750,7 @@ pub fn parse_args(
commandline.push_utfstr(arg);
narg += 1;
if narg == parser.error_idx {
len_to_err = fish_wcswidth(&commandline);
len_to_err = fish_wcswidth(&commandline).unwrap_or_default();
}
}
err.push_utfstr(program_name);

View File

@@ -78,7 +78,12 @@ pub fn r#type(parser: &Parser, streams: &mut IoStreams, argv: &mut [&wstr]) -> B
}
}
if opts.query as i64 + opts.path as i64 + opts.get_type as i64 + opts.force_path as i64 > 1 {
if [opts.query, opts.path, opts.get_type, opts.force_path]
.into_iter()
.filter(|&b| b)
.count()
> 1
{
streams.err.appendln(&wgettext_fmt!(BUILTIN_ERR_COMBO, cmd));
return Err(STATUS_INVALID_ARGS);
}

View File

@@ -128,7 +128,7 @@ fn print_all(hard: bool, streams: &mut IoStreams) {
let mut w = 0;
for resource in RESOURCE_ARR.iter() {
w = w.max(fish_wcswidth(resource.desc));
w = w.max(fish_wcswidth(resource.desc).unwrap_or_default());
}
for resource in RESOURCE_ARR.iter() {
let Some((rlim_cur, rlim_max)) = getrlimit(resource.resource) else {
@@ -370,14 +370,8 @@ pub fn ulimit(parser: &Parser, streams: &mut IoStreams, args: &mut [&wstr]) -> B
BUILTIN_ULIMIT_INVALID "%s: Invalid limit '%s'"
}
let new_limit: rlim_t = if w.wopt_index == argc {
streams.err.appendln(&wgettext_fmt!(
"%s: New limit cannot be an empty string",
cmd
));
builtin_print_error_trailer(parser, streams.err, cmd);
return Err(STATUS_INVALID_ARGS);
} else if wcscasecmp(w.argv[w.wopt_index], L!("unlimited")) == Ordering::Equal {
let new_limit: rlim_t = if wcscasecmp(w.argv[w.wopt_index], L!("unlimited")) == Ordering::Equal
{
RLIM_INFINITY
} else if wcscasecmp(w.argv[w.wopt_index], L!("hard")) == Ordering::Equal {
match get(what, true) {

View File

@@ -1064,7 +1064,7 @@ macro_rules! write_to_output {
pub fn reformat_for_screen(msg: &wstr, termsize: &Termsize) -> WString {
let mut buff = WString::new();
let screen_width = isize::try_from(termsize.width()).unwrap();
let screen_width = termsize.width();
if screen_width != 0 {
let mut start = 0;
let mut pos = start;
@@ -1077,7 +1077,7 @@ pub fn reformat_for_screen(msg: &wstr, termsize: &Termsize) -> WString {
while pos < msg.len() && ![' ', '\n', '\r', '\t'].contains(&msg.char_at(pos)) {
// Check is token is wider than one line. If so we mark it as an overflow and break
// the token.
let width = fish_wcwidth(msg.char_at(pos));
let width = fish_wcwidth(msg.char_at(pos)).unwrap_or_default();
if (tok_width + width) > (screen_width - 1) {
overflow = true;
break;

View File

@@ -16,7 +16,9 @@ pub struct ConfigPaths {
pub doc: Option<PathBuf>, // e.g., /usr/local/share/doc/fish
}
pub const PREFIX: &str = env!("PREFIX");
const SYSCONF_DIR: &str = env!("SYSCONFDIR");
const DATADIR: Option<&str> = option_env!("DATADIR");
impl ConfigPaths {
pub fn new() -> Self {
@@ -58,7 +60,7 @@ macro_rules! log_optional_path {
fn from_exec_path(unresolved_exec_path: &'static FishPath) -> Self {
let default_layout = |exec_path_parent: Option<&Path>| {
let data = option_env!("DATADIR").map(|p| PathBuf::from(p).join("fish"));
let data = DATADIR.map(|p| PathBuf::from(p).join("fish"));
Self {
sysconf: PathBuf::from(SYSCONF_DIR).join("fish"),
bin: option_env!("BINDIR")
@@ -111,6 +113,8 @@ fn from_exec_path(unresolved_exec_path: &'static FishPath) -> Self {
let prefix = exec_path_parent.parent().unwrap();
let data = prefix.join("share/fish");
let sysconf = prefix.join("etc/fish");
DATADIR.expect("cmake sets datadir").strip_prefix(PREFIX) == Some("/share") &&
SYSCONF_DIR.strip_prefix(PREFIX) == Some("/etc") &&
data.exists() && sysconf.exists()
// Installations with prefix set to exactly the workspace root are not supported;
// those will behave like non-installed builds inside the workspace.

View File

@@ -8,7 +8,7 @@
use crate::common::{
UnescapeStringStyle, cstr2wcstring, osstr2wcstring, str2wcstring, unescape_string,
};
use crate::env::config_paths::ConfigPaths;
use crate::env::config_paths::{ConfigPaths, PREFIX};
use crate::env::{EnvMode, EnvSetMode, EnvVar, Statuses};
use crate::env_dispatch::{VarChangeMilieu, env_dispatch_init, env_dispatch_var_change};
use crate::event::Event;
@@ -536,7 +536,7 @@ fn setup_user(global_exported_mode: EnvSetMode, vars: &EnvStack) {
colon_split(&[cstr2wcstring(cstr)])
} else {
vec![
str2wcstring(env!("PREFIX")) + L!("/bin"),
str2wcstring(PREFIX) + L!("/bin"),
L!("/usr/bin").to_owned(),
L!("/bin").to_owned(),
]

View File

@@ -163,7 +163,8 @@ pub fn handle_emoji_width(vars: &EnvStack) {
if let Some(width_str) = vars.get(L!("fish_emoji_width")) {
// The only valid values are 1 or 2; we default to 1 if it was an invalid int.
let new_width = fish_wcstoi(&width_str.as_string()).unwrap_or(1).clamp(1, 2) as isize;
let new_width = fish_wcstoi(&width_str.as_string()).unwrap_or(1).clamp(1, 2);
let new_width = usize::try_from(new_width).unwrap_or_default();
FISH_EMOJI_WIDTH.store(new_width, Ordering::Relaxed);
flog!(
term_support,
@@ -171,7 +172,7 @@ pub fn handle_emoji_width(vars: &EnvStack) {
new_width
);
} else {
let width = 2_isize;
let width = 2_usize;
FISH_EMOJI_WIDTH.store(width, Ordering::Relaxed);
flog!(term_support, "default emoji width:", width);
}
@@ -219,9 +220,9 @@ fn handle_change_ambiguous_width(vars: &EnvStack) {
.map(|v| v.as_string())
// We use the default value of 1 if it was an invalid int.
.and_then(|fish_ambiguous_width| fish_wcstoi(&fish_ambiguous_width).ok())
.unwrap_or(1)
// Clamp in case of negative values.
.max(0) as isize;
.unwrap_or(1);
// Clamp in case of negative values.
let new_width = usize::try_from(new_width).unwrap_or_default();
fish_fallback::FISH_AMBIGUOUS_WIDTH.store(new_width, Ordering::Relaxed);
}

View File

@@ -237,19 +237,14 @@ fn set(&self, flag: FeatureFlag, value: bool) {
}
fn set_from_string(&self, str: &wstr) {
let whitespace = L!("\t\n\0x0B\0x0C\r ").as_char_slice();
for entry in str.as_char_slice().split(|c| *c == ',') {
for entry in str.split(',') {
let entry = entry.trim();
if entry.is_empty() {
continue;
}
// Trim leading and trailing whitespace
let entry = &entry[entry.iter().take_while(|c| whitespace.contains(c)).count()..];
let entry =
&entry[..entry.len() - entry.iter().take_while(|c| whitespace.contains(c)).count()];
// A "no-" prefix inverts the sense.
let (name, value) = match entry.strip_prefix(L!("no-").as_char_slice()) {
let (name, value) = match entry.strip_prefix("no-") {
Some(suffix) => (suffix, false),
None => (entry, true),
};

View File

@@ -1810,6 +1810,7 @@ mod tests {
use crate::env::{EnvMode, EnvSetMode, EnvStack};
use crate::fs::{LockedFile, WriteMethod};
use crate::prelude::*;
use crate::tests::prelude::test_init;
use fish_build_helper::workspace_root;
use fish_wcstringutil::{
string_prefixes_string, string_prefixes_string_case_insensitive, wcs2bytes,
@@ -2292,6 +2293,7 @@ fn test_history_merge() {
#[test]
fn test_history_path_detection() {
let _cleanup = test_init();
// Regression test for #7582.
// Temporary directory for the history files.
let hist_tmpdir = fish_tempfile::new_dir().unwrap();

View File

@@ -445,7 +445,7 @@ pub fn char_to_symbol(c: char, is_first_in_token: bool) -> WString {
} else if ('\u{e000}'..='\u{f8ff}').contains(&c) {
// Unmapped key from https://sw.kovidgoyal.net/kitty/keyboard-protocol/#functional-key-definitions
sprintf!(=> buf, "\\u%04X", u32::from(c));
} else if fish_wcwidth(c) > 0 {
} else if fish_wcwidth(c).is_some_and(|w| w != 0) {
sprintf!(=> buf, "%c", c);
} else if c <= '\u{FFFF}' {
// BMP Unicode character

View File

@@ -358,17 +358,14 @@ fn measure_completion_infos(&mut self) {
comp.comp_width += 2;
}
// This can return -1 if it can't calculate the width. So be cautious.
let comp_width = wcswidth_rendered(comp_string);
if show_prefix {
comp.comp_width += usize::try_from(prefix_len).unwrap_or_default();
comp.comp_width += prefix_len;
}
comp.comp_width += usize::try_from(comp_width).unwrap_or_default();
comp.comp_width += wcswidth_rendered(comp_string);
}
// This can return -1 if it can't calculate the width. So be cautious.
let desc_width = wcswidth_rendered(&comp.desc);
comp.desc_width = usize::try_from(desc_width).unwrap_or_default();
comp.desc_width = wcswidth_rendered(&comp.desc);
}
}
@@ -1155,8 +1152,7 @@ fn print_max_impl(
let mut remaining = max;
let mut i = 0;
while let Some(c) = chars.next() {
let iwidth_c = wcwidth_rendered(c);
let Ok(width_c) = usize::try_from(iwidth_c) else {
let Some(width_c) = wcwidth_rendered(c) else {
// skip non-printable characters
continue;
};
@@ -1168,8 +1164,7 @@ fn print_max_impl(
let ellipsis = ELLIPSIS_CHAR;
if (width_c == remaining) && (has_more || chars.peek().is_some()) {
line.append(ellipsis, color(i), offset_in_cmdline);
let ellipsis_width = wcwidth_rendered(ellipsis);
remaining = remaining.saturating_sub(usize::try_from(ellipsis_width).unwrap());
remaining = remaining.saturating_sub(wcwidth_rendered(ellipsis).unwrap());
break;
}

View File

@@ -385,11 +385,8 @@ pub fn describe_with_prefix(
// It's possible that the start points at a newline itself. In that case,
// pretend it's a space. We only expect this to be at the end of the string.
caret_space_line += " ";
} else {
let width = fish_wcwidth(wc);
if width > 0 {
caret_space_line += " ".repeat(width as usize).as_str();
}
} else if let Some(width) = fish_wcwidth(wc) {
caret_space_line += " ".repeat(width).as_str();
}
}
result += "\n";
@@ -400,11 +397,11 @@ pub fn describe_with_prefix(
// We do it like this
// ^~~^
// With a "^" under the start and end, and squiggles in-between.
let width = fish_wcswidth(&src[start..start + len]);
let width = fish_wcswidth(&src[start..start + len]).unwrap_or_default();
if width >= 2 {
// Subtract one for each of the carets - this is important in case
// the starting char has a width of > 1.
result += "~".repeat(width as usize - 2).as_str();
result += "~".repeat(width - 2).as_str();
result += "^";
}
}

View File

@@ -2205,11 +2205,9 @@ fn delete_char(&mut self, backward: bool /* = true */) {
// Fake composed character sequences by continuing to delete until we delete a character of
// width at least 1.
let mut width;
loop {
pos -= 1;
width = fish_wcwidth(el.text().char_at(pos));
if width != 0 || pos == 0 {
if fish_wcwidth(el.text().char_at(pos)).is_none_or(|w| w != 0) || pos == 0 {
break;
}
}
@@ -2268,7 +2266,11 @@ fn move_word(
while buff_pos != end {
if buff_pos == el.len() && (move_right || to_word_end) {
break;
if !move_right && to_word_end && buff_pos != 0 {
buff_pos -= 1;
} else {
break;
}
}
let char_pos = if move_right {
if to_word_end { buff_pos + 1 } else { buff_pos }

View File

@@ -24,7 +24,7 @@
use crate::terminal::{BufferedOutputter, CardinalDirection, Outputter};
use crate::termsize::Termsize;
use crate::wutil::fstat;
use fish_fallback::fish_wcwidth;
use fish_fallback::{fish_wcswidth_canonicalizing, fish_wcwidth};
use fish_wcstringutil::{fish_wcwidth_visible, string_prefixes_string, wcs2bytes};
use fish_widestring::ELLIPSIS_CHAR;
use libc::{STDERR_FILENO, STDOUT_FILENO};
@@ -1786,23 +1786,24 @@ fn line_shared_prefix(a: &Line, b: &Line) -> usize {
// We're done if the text or colors are different.
if ac != bc || a.color_at(idx) != b.color_at(idx) {
if idx > 0 {
fn invisible(c: char) -> bool {
matches!(fish_wcwidth(c), None | Some(0))
}
let mut c = None;
// Possible combining mark, go back until we hit _two_ printable characters or idx
// of 0.
if fish_wcwidth(a.char_at(idx)) < 1 {
if invisible(a.char_at(idx)) {
c = Some(&a);
} else if fish_wcwidth(b.char_at(idx)) < 1 {
} else if invisible(b.char_at(idx)) {
c = Some(&b);
}
if let Some(c) = c {
while idx > 1
&& (fish_wcwidth(c.char_at(idx - 1)) < 1
|| fish_wcwidth(c.char_at(idx)) < 1)
{
while idx > 1 && (invisible(c.char_at(idx - 1)) || invisible(c.char_at(idx))) {
idx -= 1;
}
if idx == 1 && fish_wcwidth(c.char_at(idx)) < 1 {
if idx == 1 && invisible(c.char_at(idx)) {
idx = 0;
}
}
@@ -2060,13 +2061,13 @@ fn rendered_character(c: char) -> char {
}
fn wcwidth_rendered_min_0(c: char) -> usize {
usize::try_from(wcwidth_rendered(c)).unwrap_or_default()
wcwidth_rendered(c).unwrap_or_default()
}
pub fn wcwidth_rendered(c: char) -> isize {
pub fn wcwidth_rendered(c: char) -> Option<usize> {
fish_wcwidth(rendered_character(c))
}
pub fn wcswidth_rendered(s: &wstr) -> isize {
s.chars().map(wcwidth_rendered).sum()
pub fn wcswidth_rendered(s: &wstr) -> usize {
fish_wcswidth_canonicalizing(s, rendered_character).unwrap_or_default()
}
#[cfg(test)]

View File

@@ -12,6 +12,7 @@
use crate::flog;
use crate::signal::SigChecker;
use crate::topic_monitor::Topic;
use errno::{Errno, set_errno};
use fish_util::{perror, write_to_fd};
use fish_wcstringutil::{join_strings, str2bytes_callback, wcs2osstring, wcs2zstring};
use fish_widestring::{IntoCharIter, L, WExt as _, WString, wstr};
@@ -100,6 +101,7 @@ pub fn wreadlink(file_name: &wstr) -> Option<WString> {
/// `wrealpath()` returns `None`
pub fn wrealpath(pathname: &wstr) -> Option<WString> {
if pathname.is_empty() {
set_errno(Errno(0));
return None;
}
@@ -432,10 +434,6 @@ pub fn fish_iswalnum(c: char) -> bool {
!fish_reserved_codepoint(c) && !fish_is_pua(c) && c.is_alphanumeric()
}
pub fn fish_wcswidth(s: &wstr) -> isize {
fish_fallback::fish_wcswidth(s)
}
/// Given that `cursor` is a pointer into `base`, return the offset in characters.
/// This emulates C pointer arithmetic:
/// `wstr_offset_in(cursor, base)` is equivalent to C++ `cursor - base`.

View File

@@ -234,3 +234,54 @@ abbr | grep __abbr_coexist
# CHECK: abbr -a --position anywhere --command bar -- __abbr_coexist_2 'bar command'
abbr -e --command foo __abbr_coexist
abbr -e --command bar __abbr_coexist_2
abbr --add foo --rename foo fuu --show --list --erase foo --query foo
# CHECKERR: abbr: Cannot combine options add, rename, show, list, erase, query
abbr --add foo
# CHECKERR: abbr --add: Requires at least two arguments
abbr --add foo --function foobar extra
# CHECKERR: abbr: too many arguments
abbr --add foo --command=foobar --position=command bar
# CHECKERR: abbr: --command cannot be combined with --position=command
abbr --list --regex "."
# CHECKERR: abbr: --regex option requires --add
abbr --add --regex "a." --regex ".b" foo bar
# CHECKERR: abbr: Cannot specify multiple regex patterns
abbr --show --set-cursor=marker
# CHECKERR: abbr: --set-cursor option requires --add
abbr --add --set-cursor=marker --set-cursor=marker
# CHECKERR: abbr: Cannot specify multiple set-cursor options
abbr --add foo --set-cursor= foo
# CHECKERR: abbr: --set-cursor argument cannot be empty
abbr --list foo
# CHECKERR: abbr --list: Unexpected argument -- 'foo'
abbr --rename "" bar
# CHECKERR: abbr --rename: Name cannot be empty
abbr --rename foo ""
# CHECKERR: abbr --rename: Name cannot be empty
abbr sub1 -c foo -c bar foo_1
abbr sub2 -c foo -c bar foo_1
abbr --rename -c foo -c bar sub1 sub2
# CHECKERR: abbr --rename: Abbreviation sub2 already exists for commands foo, bar, cannot rename sub1
abbr --erase sub1 --command={foo,bar}
abbr --erase sub2 --command={foo,bar}
abbr --erase (abbr --list)
abbr -U
# CHECKERR: abbr: Warning: Option '-U' was removed and is now ignored
# CHECKERR: {{.*}}checks/abbr.fish (line {{\d+}}):
# CHECKERR: abbr -U
# CHECKERR: ^
# CHECKERR: (Type 'help abbr' for related documentation)

View File

@@ -36,41 +36,47 @@ end
# Invalid option specs
argparse h-
argparse /
argparse +help
argparse h/help:
argparse h-help::
argparse h-help=x
#CHECKERR: argparse: Invalid option spec 'h-' at char '-'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse h-
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse /
#CHECKERR: argparse: Short flag '/' invalid, must be alphanum or '#'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse /
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse +help
#CHECKERR: argparse: Short flag '+' invalid, must be alphanum or '#'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse +help
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse h/help:
#CHECKERR: argparse: Invalid option spec 'h/help:' at char ':'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse h/help:
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse h-help::
#CHECKERR: argparse: Invalid option spec 'h-help::' at char ':'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse h-help::
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse h-help=x
#CHECKERR: argparse: Invalid option spec 'h-help=x' at char 'x'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse h-help=x
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse h/
#CHECKERR: argparse: Invalid option spec 'h/' at char '/'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse h/
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
# --max-args and --min-args work
begin
@@ -90,6 +96,19 @@ begin
#CHECKERR: min-max: expected <= 1 arguments; got 2
argparse --name min-max --max-args 1 -- arg1 arg2
#CHECKERR: min-max: expected <= 1 arguments; got 2
argparse --name min-max --min-args -1 --
#CHECKERR: argparse: Invalid --min-args value '-1'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse --name min-max --min-args -1 --
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse --name min-max --max-args -1 --
#CHECKERR: argparse: Invalid --max-args value '-1'
#CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
#CHECKERR: argparse --name min-max --max-args -1 --
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
end
# Invalid \"#-val\" spec
@@ -136,6 +155,13 @@ begin
#CHECKERR: argparse '#-val' x/xray 'v#val' -- -s -x --long
#CHECKERR: ^
#CHECKERR: (Type 'help argparse' for related documentation)
argparse 'v#val' x/xray '#-val' -- -s -x --long
# CHECKERR: argparse: Implicit int flag 'v' already defined
# CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
# CHECKERR: argparse 'v#val' x/xray '#-val' -- -s -x --long
# CHECKERR: ^
# CHECKERR: (Type 'help argparse' for related documentation)
end
# Defining an implicit int flag with modifiers
@@ -304,7 +330,7 @@ and echo unexpected argparse return status >&2
# CHECKERR: argparse: Value 'a1' for flag 'm' is not an integer
begin
# Check the exit status from argparse validation
# Check the exit status from argparse validation
argparse 'm#max!set -l | grep "^_flag_"; function x; return 57; end; x' -- argle --max=83 bargle 2>&1
set -l saved_status $status
test $saved_status -eq 57
@@ -420,7 +446,6 @@ begin
# CHECK: argv_opts '--long=value' '--long'
end
begin
argparse -u b/break -- "-b kubectl get pods -l name=foo"
set -l
@@ -726,9 +751,8 @@ begin
# CHECK: argv_opts
end
begin
argparse 'd=?&' a b -- -d -d3 -ad -bd345
argparse 'd=?&' a b -- -d -d3 -ad -bd345
set -l
# CHECK: _flag_a -a
# CHECK: _flag_b -b
@@ -738,7 +762,7 @@ begin
end
begin
argparse 'd&' a b 'v=' -- 0 -adbv124 1 -abdv125 2 -dabv124 3 -vd3
argparse 'd&' a b 'v=' -- 0 -adbv124 1 -abdv125 2 -dabv124 3 -vd3
set -l
# CHECK: _flag_a '-a' '-a' '-a'
# CHECK: _flag_b '-b' '-b' '-b'
@@ -795,5 +819,28 @@ begin
# CHECK: argv_opts '-o' '-oval' '--opt' '--opt=456'
end
# Check --exclusive
begin
argparse --exclusive=a a/abc b/bcd --
# CHECKERR: argparse: exclusive flag string 'a' is not valid
argparse --exclusive=a,bcd a/abc b/bcd --
argparse -x a,bcd a/abc b/bcd --
argparse --exclusive=a,bcd,e a/abc b/bcd --
# CHECKERR: argparse: exclusive flag 'e' is not valid
end
begin
# Many, many long options
argparse (for i in (seq 0 6400); echo "o$i"; end) --
# CHECKERR: argparse: Too many long-only options
# CHECKERR: {{.*}}checks/argparse.fish (line {{\d+}}):
# CHECKERR: argparse (for i in (seq 0 6400); echo "o$i"; end) --
# CHECKERR: ^
# CHECKERR: (Type 'help argparse' for related documentation)
set -l
end
# Check that the argparse's are properly wrapped in begin blocks
set -l

View File

@@ -233,6 +233,8 @@ contains -i -- -- a b c; or echo nothing
#CHECK: nothing
contains -i -- -- a b c -- v
#CHECK: 4
contains
#CHECKERR: contains: Key not specified
# Test if, else, and else if
if true
@@ -447,6 +449,11 @@ $dyn_break -h
continue -h
#CHECKERR: Documentation for continue
for i in abc
break foo
end
#CHECKERR: break: foo: unknown option
# Test implicit cd. This should do nothing.
./

View File

@@ -6,3 +6,6 @@ bg -- -1
# CHECKERR: bg: '-1' is not a valid process ID
bg -- -(math 2 ^ 31)
# CHECKERR: bg: '-2147483648' is not a valid process ID
bg
# CHECKERR: bg: There are no suitable jobs

View File

@@ -138,7 +138,6 @@ bind \ef forward-word
bind \ef
# CHECK: bind alt-f forward-word
# Erasing bindings
bind --erase tab
bind tab
@@ -179,6 +178,9 @@ bind ctrl-shift-a
bind ctrl-shift-ä
# CHECKERR: bind: No binding found for key 'ctrl-shift-ä'
bind '\n'
# CHECKERR: bind: No binding found for key sequence '\\n'
# Verify binds from all modes are returned when querying a sequence
fish_vi_key_bindings
bind --preset ctrl-q 'echo preset'
@@ -190,6 +192,10 @@ bind ctrl-q
# CHECK: bind ctrl-q 'echo default'
# CHECK: bind -M insert ctrl-q 'echo insert'
# CHECK: bind -M replace ctrl-q 'echo replace'
bind --user --preset ctrl-q 'echo preset'
# CHECKERR: bind: --preset --user: options cannot be used together
fish_default_key_bindings
exit 0

View File

@@ -0,0 +1,9 @@
# RUN: fish=%fish %fish %s
breakpoint foo
# CHECKERR: breakpoint: expected 0 arguments; got 1
# no breakpoint in non-interactive shell
breakpoint
echo $status
# CHECK: 1

View File

@@ -36,6 +36,15 @@ test (pwd) = "$link" || echo "(pwd) != \$link:"\n "\$PWD: "(pwd)\n "\$link: $lin
test (pwd -P) = "$real" || echo "(pwd -P) != \$real:"\n "\$PWD: $PWD"\n "\$real: $real"\n
test (pwd -P -L) = "$link" || echo "(pwd -P -L) != \$link:"\n "\$PWD: $PWD"\n "\$link: $link"\n
# Expect no output on success.
pwd abc
# CHECKERR: pwd: expected 0 arguments; got 1
mkdir -p $base/pwd_real/subdir
ln -s $base/pwd_real $base/pwd_link
cd $base/pwd_link/subdir
rmdir $base/pwd_real/subdir $base/pwd_real
pwd -P
# CHECKERR: pwd: realpath failed: No such file or directory
# Create a symlink and verify logical completion.
# create directory $base/through/the/looking/glass
@@ -309,3 +318,27 @@ else
chmod -R +rx $tmp # we must be able to list the directory to delete its children
rm -rf $tmp
end
HOME="" cd
# CHECKERR: cd: Could not find home directory
ln -s loop1 loop2
ln -s loop2 loop1
cd loop1
# CHECKERR: cd: Too many levels of symbolic links: 'loop1'
# CHECKERR: {{.*}}/cd.fish (line {{\d+}}):
# CHECKERR: builtin cd $argv
# CHECKERR: ^
# CHECKERR: in function 'cd' with arguments 'loop1'
# CHECKERR: called on line {{\d+}} of file {{.*}}/cd.fish
# According to https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits,
# the longest filename supported is with Reiser4 (3976 bytes)
cd (string repeat 4096 a)
# CHECKERR: cd: {{.+}}
# CHECKERR: cd: Unknown error trying to locate directory '{{.*}}'
# CHECKERR: {{.*}}/cd.fish (line {{\d+}}):
# CHECKERR: builtin cd $argv
# CHECKERR: ^
# CHECKERR: in function 'cd' with arguments '{{.*}}'
# CHECKERR: called on line {{\d+}} of file {{.*}}/cd.fish

View File

@@ -72,3 +72,141 @@ $fish -c 'commandline foo'
# CHECKERR: commandline foo
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --tokens-expanded --tokens-raw
# CHECKERR: commandline: invalid option combination, --tokens options are mutually exclusive
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --tokens-expanded --tokens-raw
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --tokens-expanded --tokenize
# CHECKERR: commandline: invalid option combination, --tokens options are mutually exclusive
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --tokens-expanded --tokenize
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --function --current-buffer
# CHECKERR: commandline: invalid option combination
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --function --current-buffer
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --function foo
# CHECKERR: commandline: Unknown input function 'foo'
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --function foo
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --selection-start foo
# CHECKERR: commandline: too many arguments
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --selection-start foo
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --selection-end foo
# CHECKERR: commandline: too many arguments
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --selection-end foo
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --line 1 2
# CHECKERR: commandline: too many arguments
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --line 1 2
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --cut-at-cursor --cursor
# CHECKERR: commandline: invalid option combination
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --cut-at-cursor --cursor
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --cut-at-cursor --tokens-expanded abc
# CHECKERR: commandline: invalid option combination, --cut-at-cursor and token options can not be used when setting the commandline
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --cut-at-cursor --tokens-expanded abc
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --search-field --tokens-expanded
# CHECKERR: commandline: invalid option combination
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --search-field --tokens-expanded
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --insert-smart 0 --search-field
# CHECKERR: commandline: --insert-smart --search-field: options cannot be used together
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --insert-smart 0 --search-field
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --insert-smart 0 --current-token
# CHECKERR: commandline: --insert-smart --current-token: options cannot be used together
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --insert-smart 0 --current-token
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --line abc
# CHECKERR: commandline: abc: invalid integer
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --line abc
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --line 0
# CHECKERR: commandline: line/column index starts at 1
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --line 0
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --line 1
# OK
commandline --line 2
# CHECKERR: commandline: there is no line 2
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --line 2
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --line 3
# CHECKERR: commandline: there is no line 3
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --line 3
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --column abc
# CHECKERR: commandline: abc: invalid integer
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --column abc
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --column 0
# CHECKERR: commandline: line/column index starts at 1
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --column 0
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
commandline --column 1
# OK
commandline --column 2
# CHECKERR: commandline: column 2 exceeds line length
# CHECKERR: {{.*}}/commandline.fish (line {{\d+}}):
# CHECKERR: commandline --column 2
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)
$fish -ic "commandline --cursor abc"
# CHECKERR: commandline: abc: invalid integer
# CHECKERR: Standard input (line 1):
# CHECKERR: commandline --cursor abc
# CHECKERR: ^
# CHECKERR: (Type 'help commandline' for related documentation)

View File

@@ -482,6 +482,8 @@ complete -C"cmd_with_fancy_completion </dev/null >/dev/null 2>>/dev/null >?/dev/
complete -c thing -x -F
# CHECKERR: complete: invalid option combination, '--exclusive' and '--force-files'
complete -c thing -F -f
# CHECKERR: complete: invalid option combination, '--no-files' and '--force-files'
# Multiple conditions
complete -f -c shot
complete -fc shot -n 'test (count (commandline -xpc) -eq 1' -n 'test (commandline -xpc)[-1] = shot' -a through
@@ -697,6 +699,18 @@ begin
chmod +x "$TMPDIR/-command-starting-with-dash"
set -l PATH "$TMPDIR" $PATH
complete -C"-command-starting-with"
complete -C-command-starting-with
# CHECK: -command-starting-with-dash{{\t}}command
end
complete --command="foo\\"
# CHECKERR: complete: Invalid token 'foo\'
complete -c foo -a "foo\\"
# CHECKERR: complete: foo\: contains a syntax error
# CHECKERR: complete: Expected a string, but found an incomplete token
# CHECKERR: foo\
# CHECKERR: ^
complete -C
# CHECKERR: complete: Can not get commandline in non-interactive mode

View File

@@ -6,3 +6,15 @@ disown -- -1
# CHECKERR: disown: '-1' is not a valid process ID
disown -- -(math 2 ^ 31)
# CHECKERR: disown: '-2147483648' is not a valid process ID
disown
# CHECKERR: disown: There are no suitable jobs
# So jobs can be resumed by disown
status job-control full
sleep 1 &
set -l pid (jobs -lp)
kill -SIGSTOP $pid
disown
# CHECKERR: disown: job 1 ('sleep 1 &') was stopped and has been signalled to continue.
echo $status
# CHECK: 0

View File

@@ -15,6 +15,9 @@ fg (math 2 ^ 31)
fg 0 2>| string match --max-matches=1 '*' >&2
# CHECKERR: fg: '0' is not a valid process ID
fg
# CHECKERR: fg: There are no suitable jobs
builtin fg -- -1 2>| string match --max-matches=1 '*' >&2
# CHECKERR: fg: '-1' is not a valid process ID
@@ -23,3 +26,22 @@ builtin fg -- -1 2>| string match --max-matches=1 '*' >&2
builtin fg -- -(math 2 ^ 31) 2>| string match --max-matches=1 '*' >&2
# CHECKERR: fg: '-2147483648' is not a valid process ID
builtin fg 1 2
# CHECKERR: fg: '1' is not a job
# CHECKERR: {{.*}}/fg.fish (line {{\d+}}):
# CHECKERR: builtin fg 1 2
# CHECKERR: ^
# CHECKERR: (Type 'help fg' for related documentation)
sleep 1 &
sleep 1 &
builtin fg (jobs --pid)
# CHECKERR: fg: Ambiguous job
# CHECKERR: {{.*}}/fg.fish (line {{\d+}}):
# CHECKERR: builtin fg (jobs --pid)
# CHECKERR: ^
# CHECKERR: (Type 'help fg' for related documentation)
set -l pid (jobs -lp)
fg $pid
# CHECKERR: fg: Can't put job {{\d+}}, 'sleep 1 &' to foreground because it is not under job control

View File

@@ -0,0 +1,19 @@
#RUN: fish=%fish %fish %s
# See `tests/pexpects/fkr.py` for non-error tests
fish_key_reader --continuous=invalid
# CHECKERR: fish_key_reader: --continuous=invalid: option does not take an argument
fish_key_reader --invalid-opt
# CHECKERR: fish_key_reader: --invalid-opt: unknown option
fish_key_reader some-unexpected-args
# CHECKERR: Expected no arguments, got 1
echo | builtin fish_key_reader
# CHECKERR: Stdin must be attached to a tty.
set -l dir (dirname $fish)
echo | command $dir/fish_key_reader
# CHECKERR: Stdin must be attached to a tty.

View File

@@ -244,4 +244,22 @@ for flag in --on-process-exit --on-job-exit
# CHECKERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
end
function handle_some_sig --on-signal SOME_SIG
end
#CHECKERR: {{.*}}/function.fish (line {{\d+}}): function: Unknown signal 'SOME_SIG'
#CHECKERR: function handle_some_sig --on-signal SOME_SIG
#CHECKERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
function handle_exit_invalid_pid -j caller
end
#CHECKERR: {{.*}}/function.fish (line {{\d+}}): function: calling job for event handler not found
#CHECKERR: function handle_exit_invalid_pid -j caller
#CHECKERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
function fn_with_args -- arg
end
#CHECKERR: {{.*}}/function.fish (line {{\d+}}): function: arg: unexpected positional argument
#CHECKERR: function fn_with_args -- arg
#CHECKERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~^
exit 0

View File

@@ -147,6 +147,50 @@ functions -Dv t2
#CHECK: scope-shadowing
#CHECK:
functions -c first
# CHECKERR: functions: Expected exactly two names (current function name, and new function name)
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c first
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
functions -c first second third
# CHECKERR: functions: Expected exactly two names (current function name, and new function name)
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c first second third
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
functions -c unknown_function copy
# CHECKERR: functions: Function 'unknown_function' does not exist
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c unknown_function copy
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
function to_copy
end
functions -c -- to_copy -invalid_name
# CHECKERR: functions: Illegal function name '-invalid_name'
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c -- to_copy -invalid_name
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
functions -c -- to_copy function
# CHECKERR: functions: Illegal function name 'function'
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c -- to_copy function
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
functions -c -- to_copy to_copy
# CHECKERR: functions: Function 'to_copy' already exists. Cannot create copy of 'to_copy'
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -c -- to_copy to_copy
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
echo "functions -c t t3" | source
functions t3
# CHECK: # Defined via `source`, copied via `source`
@@ -190,6 +234,9 @@ functions --handlers-type signal
# CHECK: SIGTERM term2
# CHECK: SIGTERM term3
functions -t invalid_type
# CHECKERR: functions: Expected generic | variable | signal | exit | job-id for --handlers-type
# See how --names and --all work.
# We don't want to list all of our functions here,
# so we just match a few that we know are there.
@@ -244,6 +291,9 @@ end
functions --color=invalid
# CHECKERR: functions: Invalid value for '--color' option: 'invalid'. Expected 'always', 'never', or 'auto'
functions --color
# CHECKERR: functions: --color: option requires an argument
functions --no-details --color=never test_color_option
# CHECK: function test_color_option
# CHECK: echo hello
@@ -253,3 +303,17 @@ string escape (functions --no-details --color=always test_color_option)
# CHECK: function\ \e\[36mtest_color_option\e\[32m
# CHECK: \e\[39m\ \ \ \ echo\ \e\[36mhello\e\[32m
# CHECK: \e\[39mend\e\[32m\e\[39m
functions --names --query
# CHECKERR: functions: invalid option combination
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions --names --query
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)
functions -d desc unknown_function
# CHECKERR: functions: Function 'unknown_function' does not exist
# CHECKERR: {{.*}}/checks/functions.fish (line {{\d+}}):
# CHECKERR: functions -d desc unknown_function
# CHECKERR: ^
# CHECKERR: (Type 'help functions' for related documentation)

View File

@@ -70,3 +70,12 @@ builtin history save
set -g fish_private_mode 1
builtin history merge
#CHECKERR: history: can't merge history in private mode
builtin history -n abc
#CHECKERR: history: abc: invalid integer
builtin history delete --prefix abc
#CHECKERR: builtin history delete only supports --exact
builtin history delete --exact abc
#CHECKERR: builtin history delete --exact requires --case-sensitive

View File

@@ -5,6 +5,17 @@
fish_indent --no-such-option
#CHECKERR: fish_indent: --no-such-option: unknown option
fish_indent --check=foo
#CHECKERR: fish_indent: --check=foo: option does not take an argument
fish_indent -w
#CHECKERR: Expected file path to read/write for -w:
#CHECKERR:
#CHECKERR: {{ }}$ fish -w foo.fish
fish_indent -w nonexistent
#CHECKERR: Opening "nonexistent" failed: No such file or directory (os error {{\d+}})
echo 'echo foo \\
| cat' | $fish_indent
#CHECK: echo foo \
@@ -36,7 +47,6 @@ brot' | $fish_indent
#CHECK: echo foo \
#CHECK: brot
echo 'echo rabarber \\
banana' | $fish_indent
#CHECK: echo rabarber \
@@ -225,7 +235,6 @@ echo < stdin >>appended yes 2>&1 no > stdout maybe 2>& 4 | cat 2>| cat
' | $fish_indent
#CHECK: echo <stdin >>appended yes 2>&1 no >stdout maybe 2>&4 | cat 2>| cat
# issue 7252
echo -n '
begin
@@ -265,7 +274,6 @@ end
#CHECK: {{^ }}{{ }}continuation
#CHECK: {{^}}end
echo -n '
i\
f true
@@ -624,7 +632,6 @@ end' | $fish_indent --only-unindent
# CHECK: {{^}} not indented properly
# CHECK: {{^}}end
echo 'echo (
if true
echo
@@ -671,11 +678,16 @@ end
# CHECK: {{^}})
set -l tmpdir (mktemp -d)
echo 'echo "foo" "bar"' > $tmpdir/indent_test.fish
echo 'echo "foo" "bar"' >$tmpdir/indent_test.fish
$fish_indent --write $tmpdir/indent_test.fish
cat $tmpdir/indent_test.fish
# CHECK: echo foo bar
echo 'echo "foo" "bar"' >$tmpdir/indent_test.fish
chmod 400 $tmpdir/indent_test.fish
$fish_indent --write $tmpdir/indent_test.fish
# CHECKERR: Opening "{{.*}}/indent_test.fish" failed: {{.*}})
# See that the builtin can be redirected
printf %s\n a b c | builtin fish_indent | grep b
# CHECK: b

View File

@@ -133,3 +133,6 @@ end
disown 252
# CHECKERR: disown: Could not find job '252'
jobs %abc
# CHECKERR: jobs: '%abc' is not a valid job ID

View File

@@ -0,0 +1,38 @@
#RUN: %fish %s
#REQUIRES: command -v python3
# Regression test for groff \X'...' device control escapes in man pages.
# help2man 1.50+ emits \X'tty: link URL' hyperlinks which broke the parser.
# See: coreutils 9.10 man pages.
set -l script (status dirname)/../../share/tools/create_manpage_completions.py
set -l tmpdir (mktemp -d)
# Minimal man page with \X'tty: link' escapes as produced by help2man 1.50
printf '%s\n' \
'.TH TESTCMD "1" "March 2026" "test 1.0" "User Commands"' \
'.SH NAME' \
'testcmd \\- test command' \
'.SH DESCRIPTION' \
'A test command.' \
'.TP' \
'\\X'"'"'tty: link https://example.com/a'"'"'\\fB\\-a, \\-\\-all\\fP\\X'"'"'tty: link'"'"'' \
'show all entries' \
'.TP' \
'\\X'"'"'tty: link https://example.com/v'"'"'\\fB\\-v, \\-\\-verbose\\fP\\X'"'"'tty: link'"'"'' \
'be verbose' \
'.TP' \
'\\X'"'"'tty: link https://example.com/h'"'"'\\fB\\-\\-help\\fP\\X'"'"'tty: link'"'"'' \
'display help' \
'.PP' \
'Some trailing paragraph text.' \
'.SH AUTHOR' \
'Nobody.' \
> $tmpdir/testcmd.1
python3 $script --stdout $tmpdir/testcmd.1 | string match -r '^complete.*'
#CHECK: complete -c testcmd -s a -l all -d 'show all entries'
#CHECK: complete -c testcmd -s v -l verbose -d 'be verbose'
#CHECK: complete -c testcmd -l help -d 'display help'
rm -rf $tmpdir

View File

@@ -23,6 +23,14 @@ math --scale=6 '5 / 3 * 0.3'
# CHECK: 0.5
math --scale=max '5 / 3'
# CHECK: 1.666666666666667
math --scale=1 --base=16 "2 / 3 - 1"
# CHECKERR: math: invalid option combination, non-zero scale value only valid for base 10
math --scale=abc '5 / 3'
# CHECKERR: math: abc: invalid scale
math --scale=-1 '5 / 3'
# CHECKERR: math: -1: invalid scale
math --scale=16 '5 / 3'
# CHECKERR: math: 16: invalid scale
math "7^2"
# CHECK: 49
math -1 + 1
@@ -138,7 +146,6 @@ math n + 4
# CHECKERR: 'n + 4'
# CHECKERR: ^
not math 'sin()'
# CHECKERR: math: Error: Too few arguments
# CHECKERR: 'sin()'
@@ -428,3 +435,6 @@ math -s 6 --scale-mode=ceiling "1 / 3 - 1"
# CHECK: -0.666666
math -s 6 --scale-mode=ceiling "2 / 3 - 1"
# CHECK: -0.333333
math -s 6 --scale-mode=random "2 / 3 - 1"
# CHECKERR: math: random: invalid mode

View File

@@ -337,3 +337,49 @@ path basename -E foo.txt /usr/local/foo.bar /foo.tar.gz
path basename --null-out bar baz | string escape
# CHECK: bar\x00baz\x00
path basename --quiet=foo
# CHECKERR: path basename: --quiet=foo: option does not take an argument
path basename --unknown-option
# CHECKERR: path basename: --unknown-option: unknown option
# CHECKERR: {{.*}}/checks/path.fish (line {{\d+}}):
# CHECKERR: path basename --unknown-option
# CHECKERR: ^
# CHECKERR: (Type 'help path' for related documentation)
path filter -t invalid_type
# CHECKERR: path filter: Invalid type 'invalid_type'
path filter -p 999
# CHECKERR: path filter: Invalid permission '999'
path sort --relative
# CHECKERR: path sort: --relative: unknown option
# CHECKERR: {{.*}}/checks/path.fish (line {{\d+}}):
# CHECKERR: path sort --relative
# CHECKERR: ^
# CHECKERR: (Type 'help path' for related documentation)
path change-extension
# CHECKERR: path change-extension: missing argument
echo some.file | path basename other.file
# CHECKERR: path basename: too many arguments
path sort --key=invalid-key
# CHECKERR: path sort: Invalid sort key 'invalid-key'
path
# CHECKERR: path: missing subcommand
# CHECKERR: {{.*}}/checks/path.fish (line {{\d+}}):
# CHECKERR: path
# CHECKERR: ^
# CHECKERR: (Type 'help path' for related documentation)
path invalid-subcmd
# CHECKERR: path: invalid-subcmd: invalid subcommand
# CHECKERR: {{.*}}/checks/path.fish (line {{\d+}}):
# CHECKERR: path invalid-subcmd
# CHECKERR: ^
# CHECKERR: (Type 'help path' for related documentation)

View File

@@ -1,16 +1,16 @@
# RUN: %fish %s
# Test redirecting builtin help with a pipe
# REQUIRES: command -v man
set -lx __fish_data_dir (mktemp -d)
mkdir -p $__fish_data_dir/man/man1
# Create $__fish_data_dir/man/man1/and.1
echo '.\" Test manpage for and (not real).
.TH "AND" "1" "Feb 02, 2024" "3.7" "fish-shell"
.SH NAME
and \- conditionally execute a command' >$__fish_data_dir/man/man1/and.1
# Test redirecting builtin help with a pipe
# help should be redirected to grep instead of appearing on STDOUT
builtin and --help 2>| grep -q "Documentation for and"
echo $status
#CHECK: 0
function __fish_print_help
return 2
end
builtin and --help
# CHECKERR: fish: and: missing man page
# CHECKERR: Documentation may not be installed.
# CHECKERR: `help and` will show an online version

View File

@@ -31,6 +31,12 @@ printf "%-20d%d\n" 5 10
printf "%*d\n" 10 100
# CHECK: 100
printf "%*s\n" 2147483648 abc
# CHECKERR: invalid field width: 2147483648
printf "%*s\n" -2147483649 abc
# CHECKERR: invalid field width: -2147483649
printf "%%\"\\\n"
printf "%s\b%s\n" x y
# CHECK: %"\nxy
@@ -80,9 +86,11 @@ printf 'long hex2 %X\n' 498216206234
printf 'long hex3 %X\n' 0xABCDEF1234567890
# CHECK: long hex3 ABCDEF1234567890
printf 'long hex4 %X\n' 0xABCDEF12345678901
printf '\n'
# CHECK: long hex4
# CHECKERR: 0xABCDEF12345678901: Number out of range
printf 'long decimal %d\n' 498216206594
# CHECK: long hex4 long decimal 498216206594
# CHECK: long decimal 498216206594
printf 'long signed %d\n' -498216206595
# CHECK: long signed -498216206595
printf 'long signed to unsigned %u\n' -498216206596
@@ -124,6 +132,12 @@ printf '%d\n' 0g
echo $status
# CHECK: 1
printf '%d\n' abc
# CHECKERR: abc: expected a numeric value
printf '%d\n' ""
# CHECK: 0
printf '%f\n' 0x2
# CHECK: 2.000000
@@ -133,6 +147,12 @@ printf '%f\n' 0x2p3
printf '%.1f\n' -0X1.5P8
# CHECK: -336.0
printf '%.*f\n' 2147483648 1
# CHECKERR: invalid precision: 2147483648
printf '%lb\n' 1
# CHECKERR: %lb: invalid conversion specification
# Test that we ignore options
printf -a
printf --foo
@@ -156,7 +176,7 @@ printf %18446744073709551616s
# CHECKERR: Number out of range
# Test non-ASCII behavior
printf '|%3s|\n' 'ö'
printf '|%3s|\n' ö
# CHECK: | ö|
printf '|%3s|\n' '🇺🇳'
#CHECK: | 🇺🇳|
@@ -168,16 +188,24 @@ printf '|%.3s|\n' 'aa🇺🇳'
#CHECK: |aa|
printf '|%3.3s|\n' 'aa🇺🇳'
#CHECK: | aa|
printf '|%.1s|\n' '𒈙a'
printf '|%.1s|\n' 𒈙a
#CHECK: |𒈙|
printf '|%3.3s|\n' '👨‍👨‍👧‍👧'
#CHECK: | 👨‍👨‍👧‍👧|
printf '\xxyz'
# CHECKERR: missing hexadecimal number in escape
printf '\uxyz'
# CHECKERR: Missing hexadecimal number in Unicode escape
# Check handling of chars we use in our internal PUA encoding.
printf '\uf641' | display_bytes
# CHECK: 0000000 357 231 201
# CHECK: 0000003
printf '\U110000'
# CHECKERR: Not a valid Unicode character: \U00110000
# UTF-8 representation of \uf641
printf '%s' \xef\x99\x81 | display_bytes
# CHECK: 0000000 357 231 201

View File

@@ -142,6 +142,15 @@ echo $bar
echo test | read -n 1 foo
echo $foo
#CHECK: t
echo test | read -n 2147483647 foo
echo $foo
#CHECK: test
echo test | read -n 2147483648 foo
#CHECKERR: read: Argument '2147483648' is out of range
#CHECKERR: {{.*}}/checks/read.fish (line {{\d+}}):
#CHECKERR: echo test | read -n 2147483648 foo
#CHECKERR: ^
#CHECKERR: (Type 'help read' for related documentation)
# read -z tests
echo -n testing | read -lz foo
@@ -455,6 +464,25 @@ set -S rawlist_null
# CHECK: $rawlist_null[7]: |line|
# CHECK: $rawlist_null[8]: |\n|
echo 'foo "&" bar' | read -al --tokenize --tokenize tokens
set -S tokens
# CHECK: $tokens: set in local scope, unexported, with 3 elements
# CHECK: $tokens[1]: |foo|
# CHECK: $tokens[2]: |&|
# CHECK: $tokens[3]: |bar|
echo 'foo "&" bar' | read -al --tokenize-raw --tokenize-raw tokens
set -S tokens
# CHECK: $tokens: set in local scope, unexported, with 3 elements
# CHECK: $tokens[1]: |foo|
# CHECK: $tokens[2]: |"&"|
# CHECK: $tokens[3]: |bar|
echo 'foo "&" bar' | read -al --tokenize --tokenize-raw tokens
# CHECKERR: read: invalid option combination, --tokenize and --tokenize-raw are mutually exclusive
# CHECKERR: {{.*}}checks/read.fish (line {{\d+}}):
# CHECKERR: echo 'foo "&" bar' | read -al --tokenize --tokenize-raw tokens
# CHECKERR: ^
# CHECKERR: (Type 'help read' for related documentation)
echo '1 {} "{}"' | read -lat var
echo $var
# CHECK: 1 {} {}
@@ -467,3 +495,33 @@ set -S out_of_range_codepoint
printf \xff | { read invalid_utf8; set -S invalid_utf8 }
# CHECK: $invalid_utf8: set in global scope, unexported, with 1 elements
# CHECK: $invalid_utf8[1]: |\Xff|
echo foo | read -l -p "echo little-p" -P big-P var
# CHECKERR: read: Options -p and -P cannot be used together
# CHECKERR: {{.*}}checks/read.fish (line {{\d+}}):
# CHECKERR: echo foo | read -l -p "echo little-p" -P big-P var
# CHECKERR: ^
# CHECKERR: (Type 'help read' for related documentation)
echo foo | read -d ";" -L var
# CHECKERR: read: Options --delimiter and --line cannot be used together
echo foo | read --null -L var
# CHECKERR: read: Options -z and --line cannot be used together
echo foo | read -d "&" --tokenize
# CHECKERR: read: --delimiter --tokenize: options cannot be used together
echo foo | read -L --tokenize-raw
# CHECKERR: read: --line --tokenize-raw: options cannot be used together
echo foo | read -lxu var
# CHECKERR: read: cannot both export and unexport
# CHECKERR: {{.*}}checks/read.fish (line {{\d+}}):
# CHECKERR: echo foo | read -lxu var
# CHECKERR: ^
# CHECKERR: (Type 'help read' for related documentation)
echo foo | read -lf var
# CHECKERR: read: scope can be only one of: universal function global local
# CHECKERR: {{.*}}checks/read.fish (line {{\d+}}):
# CHECKERR: echo foo | read -lf var
# CHECKERR: ^
# CHECKERR: (Type 'help read' for related documentation)

View File

@@ -44,11 +44,15 @@ builtin realpath /def///
# Verify `realpath .` when cwd is a deleted directory gives a no such file or dir error.
set -l tmpdir (mktemp -d)
pushd $tmpdir
mkdir subdir
cd subdir
# Solaris rmdir tries to protect against deleting $PWD.
# But that's what we want to test, so we weasel around it.
sh -c "cd ..; rmdir $tmpdir"
sh -c "cd ../..; rmdir $tmpdir/subdir $tmpdir"
builtin realpath .
# CHECKERR: builtin realpath: .: No such file or directory
builtin realpath -s .
# CHECKERR: builtin realpath: realpath failed: No such file or directory
popd
# A single symlink to a directory is correctly resolved.
@@ -134,4 +138,11 @@ builtin realpath / /
# CHECK: /
# CHECK: /
builtin realpath '' /tmp '' /dont-exist ''
# CHECKERR: builtin realpath: Invalid arg:
# CHECK: {{.*}}/tmp
# CHECKERR: builtin realpath: Invalid arg:
# CHECK: /dont-exist
# CHECKERR: builtin realpath: Invalid arg:
exit 0

View File

@@ -35,3 +35,17 @@ for i in (seq -- -550 -1)
end
end
# CHECK:
$fish -c "return 1 2"
# CHECKERR: return: too many arguments
# CHECKERR: Standard input (line 1):
# CHECKERR: return 1 2
# CHECKERR: ^
# CHECKERR: (Type 'help return' for related documentation)
$fish -c "return abc"
# CHECKERR: return: abc: invalid integer
# CHECKERR: Standard input (line 1):
# CHECKERR: return abc
# CHECKERR: ^
# CHECKERR: (Type 'help return' for related documentation)

View File

@@ -49,7 +49,6 @@ else
end
# CHECK: Test 4 pass
#Test that scope is preserved when setting a new value
set t5 a
@@ -79,7 +78,6 @@ for i in 1
end
# CHECK: Test 6 pass
# Test if variables in for loop blocks do not go out of scope on new laps
set res fail
@@ -405,7 +403,6 @@ set -x DONT_ESCAPE_COLONS_PATH 1: 2: :3:
env | grep '^DONT_ESCAPE_COLONS_PATH='
# CHECK: DONT_ESCAPE_COLONS_PATH=1::2:::3:
# Path universal variables
set -U __fish_test_path_not a b c
set -U __fish_test_PATH 1 2 3
@@ -485,7 +482,6 @@ set -g __fish_test_global_vs_universal global
echo "global-vs-universal 2: $__fish_test_global_vs_universal"
# CHECK: global-vs-universal 2: global
set __fish_test_global_vs_universal global2
echo "global-vs-universal 3: $__fish_test_global_vs_universal"
# CHECK: global-vs-universal 3: global2
@@ -537,6 +533,13 @@ set --show 'argle bargle'
#CHECKERR: ^
#CHECKERR: (Type 'help set' for related documentation)
set --show array[1]
# CHECKERR: set: `set --show` does not allow slices with the var names
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set --show array[1]
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
# Verify behavior of `set --show`
set semiempty ''
set --show semiempty
@@ -622,6 +625,32 @@ set --show var5
#CHECK: $var5[7]: |x|
#CHECK: $var5[8]: |0|
set -a
# CHECKERR: set: expected >= 1 arguments; got 0
# CHECKERR: {{.*}}checks/set.fish (line {{\d+}}):
# CHECKERR: set -a
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -p
# CHECKERR: set: expected >= 1 arguments; got 0
# CHECKERR: {{.*}}checks/set.fish (line {{\d+}}):
# CHECKERR: set -p
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -a foo[1]
# CHECKERR: set: Cannot use --append or --prepend when assigning to a slice
# CHECKERR: {{.*}}checks/set.fish (line {{\d+}}):
# CHECKERR: set -a foo[1]
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -p foo[1]
# CHECKERR: set: Cannot use --append or --prepend when assigning to a slice
# CHECKERR: {{.*}}checks/set.fish (line {{\d+}}):
# CHECKERR: set -p foo[1]
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
# Setting local scope when no local scope of the var uses the closest scope
set -g var6 ghi jkl
begin
@@ -673,6 +702,19 @@ env | grep TESTVAR | sort | cat -v
#CHECK: TESTVAR1=a
#CHECK: TESTVAR2=a b
set -x | grep TESTVAR | sort | cat -v
#CHECK: TESTVAR0
#CHECK: TESTVAR1 a
#CHECK: TESTVAR2 'a' 'b'
set -u TESTVAR0
set -u TESTVAR2 a b
set -u | grep TESTVAR | sort | cat -v
#CHECK: TESTVAR0
#CHECK: TESTVAR2 'a' 'b'
set -x | grep TESTVAR | sort | cat -v
#CHECK: TESTVAR1 a
# if/for/while scope
function test_ifforwhile_scope
if set -l ifvar1 (true && echo val1)
@@ -747,7 +789,6 @@ echo $foo
echo $bar
#CHECK: 1 3
# Test that `set -q` does not return 0 if there are 256 missing variables
set -lq a(seq 1 256)
@@ -809,14 +850,14 @@ set -S stilllocal
set -g globalvar global
function test-function-scope
set -f funcvar "function"
set -f funcvar function
echo $funcvar
# CHECK: function
set -S funcvar
#CHECK: $funcvar: set in local scope, unexported, with 1 elements
#CHECK: $funcvar[1]: |function|
begin
set -l funcvar "block"
set -l funcvar block
echo $funcvar
# CHECK: block
set -S funcvar
@@ -971,6 +1012,11 @@ set -e undefined[..1]
set -l negative_oob 1 2 3
set -q negative_oob[-10..1]
set foo[1 2 3] a b
# CHECKERR: set: given 3 indexes but 2 values
set foo[1 2 3] a b c d
# CHECKERR: set: given 3 indexes but 4 values
# --no-event
function onevent --on-variable nonevent
@@ -1015,8 +1061,89 @@ set line[0] ""
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
echo Still here
# CHECK: Still here
set -o xtrace
# CHECKERR: Fish does not have shell options. See `help fish_for_bash_users`.
# CHECKERR: set: -o: unknown option
set -o vi
# CHECKERR: Fish does not have shell options. See `help fish_for_bash_users`.
# CHECKERR: To enable vi-mode, run `fish_vi_key_bindings`.
# CHECKERR: set: -o: unknown option
set -o ed
# CHECKERR: Fish does not have shell options. See `help fish_for_bash_users`.
# CHECKERR: ?
# CHECKERR: ?
# CHECKERR: ?
# CHECKERR: set: -o: unknown option
set -q -e foo
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -q -e foo
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -q -n
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -q -n
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -e -n
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -e -n
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -l -g foo bar
# CHECKERR: set: scope can be only one of: universal function global local
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -l -g foo bar
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -u -x foo
# CHECKERR: set: cannot both export and unexport
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -u -x foo
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -e -x foo
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -e -x foo
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -e -u foo
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -e -u foo
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set --path --unpath foo
# CHECKERR: set: cannot both path and unpath
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set --path --unpath foo
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set -s -l
# CHECKERR: set: invalid option combination
# CHECKERR: {{.*}}set.fish (line {{\d+}}):
# CHECKERR: set -s -l
# CHECKERR: ^
# CHECKERR: (Type 'help set' for related documentation)
set umask abc
# CHECKERR: set: Tried to modify the special variable 'umask' to an invalid value
exit 0

View File

@@ -138,3 +138,10 @@ string escape (set_color --underline=off)
string escape (set_color --reset f00 --background=00f --underline-color=0f0 --bold --dim --italics --reverse --strikethrough --underline=curly)
# CHECK: \e\[\;38\;2\;255\;0\;0\;48\;2\;0\;0\;255\;58:2::0:255:0\;1\;4:3\;2\;3m\e\[7\;9m
set_color --unknown-opt
# CHECKERR: set_color: --unknown-opt: unknown option
# CHECKERR: {{.*}}checks/set_color.fish (line {{\d+}}):
# CHECKERR: set_color --unknown-opt
# CHECKERR: ^
# CHECKERR: (Type 'help set_color' for related documentation)

View File

@@ -73,4 +73,15 @@ echo "Now event handler should have run"
# CHECK: PROCESS_EXIT 0
# CHECK: JOB_EXIT 0
# CHECK: Now event handler should have run
begin
block --erase --local
# CHECKERR: block: Can not specify scope when removing block
block --erase --global
# CHECKERR: block: Can not specify scope when removing block
block --erase
# CHECKERR: block: No blocks defined
end
exit 0
# CHECK: PROCESS_EXIT 0

View File

@@ -9,3 +9,12 @@ echo $status
# CHECKERR: error: Unable to read input file: Is a directory
# CHECKERR: source: Error while reading file '/'
# CHECK: 1
source unknown-file
# CHECKERR: source: Error encountered while sourcing file 'unknown-file':
# CHECKERR: source: {{.+}}
source <&-
# CHECKERR: source: stdin is closed
source - <&-
# CHECKERR: source: stdin is closed

View File

@@ -86,7 +86,7 @@ echo $status
# Verify errors from writes - see #7857.
if test -e /dev/full
# Failed writes to stdout produce 1.
echo foo > /dev/full
echo foo >/dev/full
if test $status -ne 1
echo "Wrong status when writing to /dev/full"
end
@@ -94,7 +94,7 @@ if test -e /dev/full
# Here the builtin should fail with status 2,
# and also the write should fail with status 1.
# The builtin has precedence.
builtin string --not-a-valid-option 2> /dev/full
builtin string --not-a-valid-option 2>/dev/full
if test $status -ne 2
echo "Wrong status for failing builtin"
end
@@ -140,3 +140,51 @@ and should have failed on unrecognized feature
# CHECKERR: status test-terminal-feature: unrecognized feature 'unrecognized-feature'
status test-terminal-feature scroll-content-up
and should have failed when running without a TTY
status -L abc
# CHECKERR: status: abc: invalid integer
status -L 9999999999999999999999
# CHECKERR: status: Invalid level value '9999999999999999999999'
status unknown-subcmd
# CHECKERR: status: unknown-subcmd: invalid subcommand
status job-control abc cdf
# CHECKERR: status: job-control: expected 1 arguments; got 2
status test-feature
# CHECKERR: status: test-feature: expected 1 arguments; got 0
status test-feature one two
# CHECKERR: status: test-feature: expected 1 arguments; got 2
status get-file
# CHECKERR: status: get-file: expected 1 arguments; got 0
status get-file one two
# CHECKERR: status: get-file: expected 1 arguments; got 2
if status buildinfo | string match -q "*localize-messages*"
echo Skipped
else
set -l result "$(status language 2>&1)"
if string match -q "fish was built with the `localize-messages` feature disabled. The `status language` command is unavailable." -- "$result"
echo Success
else
echo "Failed: $result"
end
end
# CHECK: {{Skipped|Success}}
if not { status buildinfo | string match -q "*localize-messages*" }
echo Skipped
else
set -l result "$(status language foo 2>&1)"
if string match -q "status language: foo: invalid subcommand" -- "$result"
echo Success
else
echo "Failed: $result"
end
end
# CHECK: {{Skipped|Success}}
status build-info other-arg
# CHECKERR: status: build-info: expected 0 arguments; got 1

View File

@@ -1,6 +1,27 @@
#RUN: %fish %s
#RUN: fish=%fish %fish %s
# Tests for string builtin. Mostly taken from man page examples.
string
# CHECKERR: string: missing subcommand
# CHECKERR: {{.*}}checks/string.fish (line {{\d+}}):
# CHECKERR: string
# CHECKERR: ^
# CHECKERR: (Type 'help string' for related documentation)
string abc
# CHECKERR: string: abc: invalid subcommand
# CHECKERR: {{.*}}checks/string.fish (line {{\d+}}):
# CHECKERR: string abc
# CHECKERR: ^
# CHECKERR: (Type 'help string' for related documentation)
string --abc
# CHECKERR: string: --abc: invalid subcommand
# CHECKERR: {{.*}}checks/string.fish (line {{\d+}}):
# CHECKERR: string --abc
# CHECKERR: ^
# CHECKERR: (Type 'help string' for related documentation)
string match -r -v "c.*" dog can cat diz; and echo "exit 0"
# CHECK: dog
# CHECK: diz
@@ -36,6 +57,12 @@ string match -q -r -v x y; and echo "exit 0"
string match -q -r -v x x; or echo "exit 1"
# CHECK: exit 1
string match -v -g foo foo
# CHECKERR: match: invalid option combination, --invert and --groups-only are mutually exclusive
string match
# CHECKERR: string match: missing argument
string length "hello, world"
# CHECK: 12
@@ -55,6 +82,8 @@ string pad -r -w 7 --chars - --center foo
# might overflow when converting sign
string sub --start -9223372036854775808 abc
# CHECK: abc
string sub --start 0 abc
# CHECKERR: string sub: Invalid start value '0'
string pad --width 7 -c '=' foo
# CHECK: ====foo
@@ -137,6 +166,9 @@ string pad -c ab -w4 .
string pad -c \u07 .
# CHECKERR: string pad: Invalid padding character of width zero {{'\a'}}
string pad --width=-1 foo
# CHECKERR: string pad: Invalid width value '-1'
# Visible length. Let's start off simple, colors are ignored:
string length --visible (set_color red)abc
# CHECK: 3
@@ -185,6 +217,9 @@ string sub --length 2 abcde
string sub -s 2 -l 2 abcde
# CHECK: bc
string sub --length=-1 abcde
# CHECKERR: string sub: Invalid length value '-1'
string sub --start=-2 abcde
# CHECK: de
@@ -194,6 +229,9 @@ string sub --end=3 abcde
string sub --end=-4 abcde
# CHECK: a
string sub --end=0 abcde
# CHECKERR: string sub: Invalid end value '0'
string sub --start=2 --end=-2 abcde
# CHECK: bc
@@ -212,6 +250,9 @@ string sub -s -50 -e -100 abcde
string sub -s 2 -e -5 abcde
# CHECK:
string sub -s 2 -e -5 -l 3 abcde
# CHECKERR: sub: invalid option combination, --end and --length are mutually exclusive
string split . example.com
# CHECK: example
# CHECK: com
@@ -225,10 +266,16 @@ string split "" abc
# CHECK: b
# CHECK: c
string split
# CHECKERR: string split: missing argument
string split --max 1 --right 12 AB12CD
# CHECK: AB
# CHECK: CD
string split --max=-1 --right 12 AB12CD
# CHECKERR: string split: Invalid max value '-1'
string split --fields=2 "" abc
# CHECK: b
@@ -288,9 +335,15 @@ string split -f1 ' ' 'a b' 'c d'
string split --allow-empty --fields=2,9 "" abc
# CHECK: b
string split --allow-empty "" abc
# CHECKERR: split: invalid option combination, --allow-empty is only valid with --fields
seq 3 | string join ...
# CHECK: 1...2...3
string join
# CHECKERR: string join: missing argument
string trim " abc "
# CHECK: abc
@@ -361,6 +414,9 @@ world"
# CHECK: \^this is a literal string
# CHECK: hello\nworld
string escape --style=unknown-style
# CHECKERR: string escape: Invalid escape style 'unknown-style'
### Verify that we can correctly unescape the same strings
# we tested escaping above.
set x (string unescape (echo \x07 | string escape))
@@ -395,6 +451,9 @@ string unescape --style=var (string escape --style=var '_a_b_c_')
string unescape --style=var -- (string escape --style=var -- -)
# CHECK: -
string unescape --style=unknown-style
# CHECKERR: string unescape: Invalid style value 'unknown-style'
### Verify that we can correctly match strings.
string match "*" a
# CHECK: a
@@ -431,6 +490,9 @@ string match -r -a -n at ratatat
string match -r -i "0x[0-9a-f]{1,8}" "int magic = 0xBadC0de;"
# CHECK: 0xBadC0de
string match -r -i "0x[0-9a-f]{1,8}" "int magic = 0xBadC0de;"
# CHECK: 0xBadC0de
string replace is was "blue is my favorite"
# CHECK: blue was my favorite
@@ -531,6 +593,9 @@ echo foo | string repeat -n 2
echo foo | string repeat 2
# CHECK: foofoo
string repeat
# CHECKERR: string repeat: missing argument
string repeat foo
# CHECKERR: string repeat: Invalid count value 'foo'
@@ -717,6 +782,12 @@ or echo exit 1
# CHECK: caabxyxz
# CHECK: xyx
string match --entire --index foo foo
# CHECKERR: match: invalid option combination, --entire and --index are mutually exclusive
string match --entire --groups-only -r foo foo
# CHECKERR: match: invalid option combination, --entire and --groups-only are mutually exclusive
# 'string match -r "a*b([xy]+)" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz'
string match -r "a*b([xy]+)" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz
or echo exit 1
@@ -1006,6 +1077,9 @@ string shorten --max 4 -c /// foobarnana
string shorten --max 2 --char "" foo
# CHECK: fo
string shorten --max=-1 --char "" foo
# CHECKERR: string shorten: Invalid max value '-1'
string shorten foo foobar
# CHECK: foo
# CHECK: fo…
@@ -1200,6 +1274,12 @@ printf "dog\ncat\nbat\ngnat\n" | string match -m2 "*at"
# CHECK: cat
# CHECK: bat
string match -m0 foo
# CHECKERR: string match: Invalid max matches value '0'
string match -m999999999999999999999999999999999999999 foo
# CHECKERR: string match: Invalid max matches value '999999999999999999999999999999999999999'
printf "dog\ncat\nbat\nhog\n" | string match -rvm1 'at$'
# CHECK: dog
@@ -1209,3 +1289,31 @@ printf "dog\ncat\nbat\n" | string replace -rf --max-matches 1 'at$' aught
printf "dog\ncat\nbat\n" | string replace -r --max-matches 1 '^c' h
# CHECK: dog
# CHECK: hat
$fish --features="no-regex-easyesc" -c "string replace -r o '\c' -- foo"
# CHECKERR: string replace: Invalid escape sequence in pattern "\c"
string replace --max-matches abc
# CHECKERR: string replace: Invalid max matches value 'abc'
string replace --max-matches -1
# CHECKERR: string replace: Invalid max matches value '-1'
string replace --max-matches 99999999999999999999
# CHECKERR: string replace: Invalid max matches value '99999999999999999999'
string replace
# CHECKERR: string replace: missing argument
string replace one
# CHECKERR: string replace: expected 1 arguments; got 2
string replace -r o '${bad_name}' foobar
# CHECKERR: string replace: Regular expression substitute error: unknown substring
string match --unknown-opt
# CHECKERR: string match: --unknown-opt: unknown option
# CHECKERR: {{.*}}checks/string.fish (line {{\d+}}):
# CHECKERR: string match --unknown-opt
# CHECKERR: ^
# CHECKERR: (Type 'help string' for related documentation)
string match --regex=abc
# CHECKERR: string match: --regex=abc: option does not take an argument

View File

@@ -142,3 +142,10 @@ test
#CHECKERR: test
#CHECKERR: ^
#CHECKERR: (Type 'help test' for related documentation)
[ -z
#CHECKERR: [: the last argument must be ']'
#CHECKERR: {{.*}}test.fish (line {{\d+}}):
#CHECKERR: [ -z
#CHECKERR: ^
#CHECKERR: (Type 'help [' for related documentation)

View File

@@ -0,0 +1,11 @@
#RUN: %fish %s
#REQUIRES: command -v tmux
isolated-tmux-start
isolated-tmux send-keys breakpoint Enter
tmux-sleep
isolated-tmux capture-pane -p
# CHECK: prompt 0> breakpoint
# CHECK: breakpoint: Command not valid at an interactive prompt
# CHECK: prompt 1>

View File

@@ -0,0 +1,13 @@
#RUN: %fish %s
#REQUIRES: command -v tmux
isolated-tmux-start
isolated-tmux send-keys 'set -g g_u_var foobar' Enter
isolated-tmux send-keys 'set -U g_u_var barfoo' Enter
tmux-sleep
isolated-tmux capture-pane -p
# CHECK: prompt 0> set -g g_u_var foobar
# CHECK: prompt 0> set -U g_u_var barfoo
# CHECK: set: successfully set universal 'g_u_var'; but a global by that name shadows it
# CHECK: prompt 0>

View File

@@ -0,0 +1,13 @@
#RUN: %fish %s
#REQUIRES: command -v tmux
isolated-tmux-start
isolated-tmux send-keys source Enter
isolated-tmux send-keys 'source -' Enter
tmux-sleep
isolated-tmux capture-pane -p
# CHECK: prompt 0> source
# CHECK: source: missing filename argument or input redirection
# CHECK: prompt 1> source -
# CHECK: prompt 1>

View File

@@ -140,3 +140,6 @@ chmod +x ./test
PATH=.:$PATH type -P test
# CHECK: ./test
type -p -q type
# CHECKERR: type: invalid option combination

View File

@@ -14,3 +14,71 @@ ulimit 4352353252352352334
#CHECKERR: ^
#CHECKERR: (Type 'help ulimit' for related documentation)
# Try to increase a hard limit
# Since limits vary between OSes and distributions, we need to find
# a non-unlimited dynamically
set -l ulimit_opts -c -d -f -n -s -t -u
for ulimit_opt in $ulimit_opts
set -l max (ulimit -H $ulimit_opt 2>/dev/null)
if contains -- "$max" "" unlimited
continue
end
set found true
echo "Using $ulimit_opt to increase hard limit" >&2
ulimit -H $ulimit_opt (math $max + 1) >/dev/null
break
end
if not set -q found
echo "All common hard ulimits are unlimited, cannot increase them" >&2
end
#CHECKERR: Using {{-.}} to increase hard limit
#CHECKERR: ulimit: Permission denied when changing resource of type '{{.+}}'
# Try to lower a hard limit below its soft one
set -e found
for ulimit_opt in $ulimit_opts
set -l min (ulimit -S $ulimit_opt 2>/dev/null)
if contains -- "$min" "" 0
continue
end
if test $min = unlimited
set min 1024
end
set found true
echo "Using $ulimit_opt to lower hard limit" >&2
ulimit -H $ulimit_opt (math $min - 1) >/dev/null
and if test (__fish_uname) = FreeBSD
echo "ulimit: FreeBSD doesn't fail unlike other platforms, so fake it" >&2
end
break
end
if not set -q found
echo "All common soft ulimits are 0, cannot decrease hard ulimits below them" >&2
end
#CHECKERR: Using {{-.}} to lower hard limit
#CHECKERR: ulimit: {{.+}}
if test (__fish_uname) = Linux
ulimit -K 1024
else
ulimit -q 1024
end
#CHECKERR: ulimit: Resource limit not available on this operating system
#CHECKERR: {{.*}}checks/ulimit.fish (line {{\d+}}):
#CHECKERR: ulimit -{{.}} 1024
#CHECKERR: ^
#CHECKERR: (Type 'help ulimit' for related documentation)
ulimit --core-size 0 1 2
#CHECKERR: ulimit: too many arguments
#CHECKERR: {{.*}}checks/ulimit.fish (line {{\d+}}):
#CHECKERR: ulimit --core-size 0 1 2
#CHECKERR: ^
#CHECKERR: (Type 'help ulimit' for related documentation)
ulimit --core-size abc
#CHECKERR: ulimit: Invalid limit 'abc'
#CHECKERR: {{.*}}checks/ulimit.fish (line {{\d+}}):
#CHECKERR: ulimit --core-size abc
#CHECKERR: ^
#CHECKERR: (Type 'help ulimit' for related documentation)

View File

@@ -76,3 +76,6 @@ wait -- -1
# CHECKERR: wait: Could not find child processes with the name '-1'
wait -- -(math 2 ^ 31)
# CHECKERR: wait: Could not find child processes with the name '-2147483648'
wait 999999999
# CHECKERR: wait: Could not find a job with process ID '999999999'

View File

@@ -683,8 +683,8 @@ expect_str("foo-barqux")
expect_prompt()
sendline("bind ctrl-g backward-word-end")
sendline("echo 12" + control("g") + "3")
expect_str("123")
sendline("eco 12" + control("g") + "h")
expect_str("12")
expect_prompt()
# Check that the builtin version of `exit` works

View File

@@ -41,7 +41,7 @@ send("\033")
sleep(1)
send("hhhdhldl")
sendline("")
expect_re(r"\bacdf\b")
expect_re(r"\bacef\b")
# Test x copying to clipboard
send("echo hello")