The user-friendly command line shell.
Go to file
Johannes Altmanninger 1d1bee3ba2 CHANGELOG: some updates for 3.4.0
I used the command from #8092 to list issues/PRs with missing changelog
entries, and went through most of them and added them to the changelog
(or the "ignore" list).

This commit message lists the processed issues in a consistent format,
and lists the action/reason. For each issue/PR there are twolines:
- Issue/PR number + subject
  - (I used bare issue numbers to avoid cross-referencing on github).
- verdict
  - "added new entry" means that we add a changelog line
  - "added to existing entry" means that we added the issue link to an existing
     changelog line. Usually we don't add multiple issue links, but sometimes
     there are multiple interesting issues.
  - if the verdict ends with ", ignoring", we added it to the "ignore" list in
    the changelog.

The issues are grouped by verdict, with the interesting/leftover ones
on top.

The "gh" script is already a quantum leap but we should still find
better ways to share the burden of writing the changelog.
I noticed that there are many minor updates that can probably be
ignored.  Filtering them out doesn't take much time but it adds up,
especially if it's a single person doing it.

Here's the adapted script I used:

	for issue in (gh issue list --state closed --milestone "fish 3.4.0" -L 500 | sort -n | cut -f 1)
	    egrep --quiet '\W'$issue CHANGELOG.rst; or echo https://github.com/fish-shell/fish-shell/issues/$issue
	end
	for pr in (gh pr list --state all --search "milestone:\"fish 3.4.0\"" -L 500 | sort -n | cut -f 1)
	    egrep --quiet '\W'$pr CHANGELOG.rst; or echo https://github.com/fish-shell/fish-shell/pull/$pr
	end

---

Issue 8153: Work around `setpgid` error on older Apple platforms
workaround for old OSs for which we've since dropped support, ignoring

Issue 8511: math: (n n): incorrect error
improved error output, which is very nice but too minor, ignoring

Issue 8205: Fish autocomplete error on iOS procursus
niche fix, ignoring

Issue 8271: Fix `fish_key_reader` wrapper check
minor update to not create a harmless alias for fish_key_reader, ignoring

Issue 8289: funced dosn't like backslash escapes in function names
minor escaping fix, ignoring

Issue 8310: Hide whatis database building from the user
not something many users would notice in the first place, ignoring

Issue 8368: Duplicated "Type 'help argparse' for related documentation" for argparse
minor update to error message, ignoring

Issue 8444: Variable highlight color does not span lines
very obscure fix, ignoring

Issue 8195: Errors when trying to autocomplete (invalid) UTF-8 escapes
niche fix, ignoring

Issue 8308: assertion normal_exited() failed related to paged builtin help
niche fix, ignoring

Issue 8358: sigsegv on set --show variable (when LANG is set to fr_FR.utf8)
niche(?) fix, ignoring

Issue 8170: Builtin math ncr can be extremely slow
performance improvement only when the input is NaN, ignoring

Issue 8204: Always use LC_NUMERIC=C internally
performance improvement for math, ignoring

---

Issue 8295: Add --function to `read`
added to existing entry (565)

Issue 8283: Added completions for ethtool
added to existing entry

Issue 8315: Add dart completion
added to existing entry

Issue 8330: Add common lisp completions(sbcl/roswell)
added to existing entry

Issue 8354: Fix st issue with shift+tab
added to existing entry (8352)

Issue 8391: Support vi-mode cursors in Foot Terminal 
added to existing entry (8167)

Issue 8405: Completions pager should redraw if the subbed completion wraps/unwraps the line
added to existing entry (8509)

---

Issue 8530: Speed up, fix fish_status_to_signal 8530
added new entry

Issue 8547: command -v nonexistent should exit 127
added new entry

Issue 8431: Abbr -q return status inconsistent
added new entry

Issue 8428: Binding escape as user binding breaks escape sequence bindings (arrows, etc)
added new entry

Issue 8483: Windows "color" command completion
added new entry

Issue 8087: Doesn't build when using netbsd curses on Linux
added new entry

Issue 8152: Don't override linker
added new entry

Issue 8156: Add completions for `git-sizer`
added new entry

Issue 8163: `d3ceba107e88b6c6e1a0358ebcb30366aeef653f` causes issues with repainting multi-line prompt
added new entry

Issue 8175: Completion sometimes missing the last token
added new entry

Issue 8179: `set -S` should mark read-only variables
added new entry

Issue 8209: Slow interaction between backgrounding, universal variables, and repainting
added new entry

Issue 8274: Unsetting `$fish_emoji_width` doesn't clear the cached width
added new entry

Issue 8298: If prompt ends in an empty line, the commandline is inserted at the width of the line before
added new entry

Issue 8309: colors don't kick in for ls on macOS Big Sur, Monterey (and maybe FreeBSD)
added new entry

Issue 8337: Adds sub-command clear-session to history command. Issue 5791
added new entry (as 5791)

Issue 8352: Fix delete-key in st
added new entry

Issue 8373: Add clasp completion
added new entry

Issue 8434: argparse completions
added new entry

Issue 8510: fish_key_reader ^C warning isn't right
added new entry

Issue 8519: Use `--almost-all` in `la` function
added new entry

---

Issue 1363: improve the experience of using fish over mosh
listed as 8376, ignoring

Issue 8305: incomplete man page completions
listed as 8309, ignoring

Issue 8059: Support "$(cmd)" command substitution without line splitting
listed as 159, ignoring

Issue 8127: fish_config: Read colorschemes from .theme files
listed as 8132, ignoring

Issue 8130: funced: edit the whole file, not just the function definition
listed as 391, ignoring

Issue 8270: builtin cd: print error about broken symlink
listed as 8264, ignoring

Issue 8306: fix man completion for BSD's mandoc
listed as 8305, ignoring

Issue 8441: Don't escape tildes that come from custom completions
listed as 8441, ignoring

---

Issue 8429: `cargo run --example` completions break with nested example directories
update to existing completions, ignoring

Issue 8446: Use `cargo run --example` to get list of examples
update to existing completions, ignoring

Issue 8338: Display local branches before unique remote branches in git completion
update to existing completions, ignoring

Issue 8118: Node completion: add v8 sparkplug option
update to existing completions, ignoring

Issue 8183: Add zypper subcommands completion
update to existing completions, ignoring

Issue 8184: completion nmap: suppress warning when local scripts folder exists
update to existing completions, ignoring

Issue 8191: add missing `git commit` completions
update to existing completions, ignoring

Issue 8192: Updated ping completions
update to existing completions, ignoring

Issue 8202: Add `--function` to `set` completion
update to existing completions, ignoring

Issue 8219: completion: support `--no` prefixes for mpv flag options
update to existing completions, ignoring

Issue 8241: complete "mpc load"
update to existing completions, ignoring

Issue 8243: Add and fix completions for new options
update to existing completions, ignoring

Issue 8249: Fix completions/ls.fish
update to existing completions, ignoring

Issue 8256: Fix completions/coredumpctl.fish and add new complete
update to existing completions, ignoring

Issue 8311: completions/git: Handle "1 .T" & "1 AT" files
update to existing completions, ignoring

Issue 8323: completions/xbps-query: add missing `-p` completions
update to existing completions, ignoring

Issue 8326: Update ldapsearch.fish
update to existing completions, ignoring

Issue 8327: small fix completions/duply.fish
update to existing completions, ignoring

Issue 8334: Update ip.fish
update to existing completions, ignoring

Issue 8344: Fix ant completion
update to existing completions, ignoring

Issue 8365: Update dmesg completions
update to existing completions, ignoring

Issue 8367: No hints for -g|--global and -U|--universal flags for abbr command
update to existing completions, ignoring

Issue 8381: Updated systemd-analyze completions
update to existing completions, ignoring

Issue 8406: vmctl completion function call needs to be quoted
update to existing completions, ignoring

Issue 8480: pabcnetcclear command completion update
update to existing completions, ignoring

---

Issue 8495: Stop linking to StackOverflow
doc update, ignoring

Issue 8176: document `--no-config`
doc update, ignoring

Issue 8260: Theme demo needs to be adjusted so that only unmatched quote is an error
doc update, ignoring

Issue 8380: no error about wrong >>? redirection operator
doc update, ignoring

Issue 8385: set -l works outside of command block
doc update, ignoring

Issue 8409: Some enhancements to "for" and "while" loop pages
doc update, ignoring

Issue 8439: Html docs: Remove link underlines again?
doc update, ignoring

Issue 8457: Old-style options support "=" assignment operator in complete builtin
doc update, ignoring

Issue 8522: Document prompt_hostname
doc update, ignoring

---

Issue 8221: edit_command_buffer: use "command" to ignore any functions with the same name
only helps broken systems, ignoring

Issue 8287: Prepend command to cat
only helps broken systems, ignoring

Issue 8299: Make less version check compatible with older Fish
only helps broken systems, ignoring

Issue 8487: fish_config doesn't work without curses module
only helps broken systems, ignoring

---

Issue 8128: fix 'socket file name too long' error
test fix with long tempdirs (macOS), not really user-visible, ignoring

Issue 8449: Give tests a more generic name
not user-visible, ignoring

Issue 8353: string tests sometimes failing on macOS (Github Actions)
not user-visible, ignoring

Issue 6477: history merge test fails on OpenBSD
not user-visible, ignoring

---

Issue 8471: Obtain Deno completions from itself
update to an unreleased feature (7138), ignoring

Issue 8253: `string length --visible` performance
update to an unreleased feature, ignoring

Issue 8277: Backspace character is ignored when calculating string widths
update to an unreleased feature, ignoring

Issue 8314: `fish_config choose` leaves previous right prompt in place
update to an unreleased feature, ignoring

Issue 8394: parenthesis characters outer of $(command substitution) in string cause error
update to an unreleased feature, ignoring

Issue 8500: Parser bug with command substitutions in strings inside parenthesis
update to an unreleased feature, ignoring

Issue 8419: fish_config: silently doesn't set color schemes.
regression, not in any release, ignoring

Issue 8438: :program: in sphinx doesn't link
regression, not in any release, ignoring

Issue 8478: __fish_seen_argument.fish throws exception when autocompleting
regression, not in any release, ignoring

---

Issue 8280: Fix typo in abbr docs
typofix, ignoring

Issue 8321: Fix typo in `set_colors` command documentation
typofix, ignoring

Issue 8257: Typo funcions -> functions
typofix, ignoring

---

Issue 8206: remove make_pair
no behavior change, ignoring

Issue 8222: replace push_back with emplate_back
no behavior change, ignoring

Issue 8224: clang-tidy: remove pointless virtual
no behavior change, ignoring

Issue 8227: change value to rvalue reference
no behavior change, ignoring

Issue 8228: convert const ref to rvalue ref
no behavior change, ignoring

Issue 8229: clang-tidy: use for range loops
no behavior change, ignoring

Issue 8230: fix deleted constructors
nno behavior change, ignoring

Issue 8231: clang-tidy: const reference conversions
no behavior change, ignoring

Issue 8235: clang-tidy: simplify two bool returns
no behavior change, ignoring

Issue 8237: clang-tidy: replace size comparisons with empty
no behavior change, ignoring

Issue 8239: clang-tidy: replace NULL with nullptr
no behavior change, ignoring

Issue 8252: add constexpr
no behavior change, ignoring

Issue 8430: __fish_seen_subcommand_from and __fish_seen_argument update
no behavior change (apart from a regression that's fixed), ignoring

Issue 8476: Run fish_indent on all non-test .fish files
no behavior change, ignoring

Issue 8477: Use test command instead of bracket command
no behavior change, ignoring

Issue 8521: Fix code scanning alert - Wrong type of arguments to formatting function
no behavior change, ignoring

Issue 8236: clang-tidy: replace push_back with emplace_back
no behavior change, ignoring

---
2021-12-15 22:18:16 +08:00
.builds builds/FreeBSD: Move to py38-pexpect 2021-05-18 10:09:13 +02:00
.github Update main.yml 2021-12-02 05:54:29 -08:00
benchmarks Run fish_indent on all non-test .fish files 2021-11-23 09:49:45 +01:00
build_tools Run fish_indent on all non-test .fish files 2021-11-23 09:49:45 +01:00
cmake Rename the top-level test target to fish_run_tests 2021-11-26 13:13:42 -08:00
debian Debian packaging: drop debug package 2021-09-17 21:03:24 +08:00
doc_src fish_config.rst: make the synopsis imply that "browse" is the default 2021-12-13 20:41:45 +01:00
docker Use new fish_run_tests target in Dockerfiles 2021-11-26 13:19:59 -08:00
etc Update /etc/config.fish to use current syntax 2020-05-08 15:20:36 +08:00
osx Add the get-task-allow entitlement 2020-02-29 15:29:50 -08:00
pcre2 Update pcre2 to 10.36 2021-02-01 17:37:03 +01:00
po Do some german translations 2021-10-18 18:47:38 +02:00
share webconfig: Skip colors not named in a theme 2021-12-14 22:54:28 +01:00
src Only act on the locale vars we care about 2021-12-13 11:52:17 +01:00
tests Fit status feaetures in 80 columns 2021-12-13 01:24:47 -08:00
.clang-format Ensure that clang-format places config.h first in header list 2019-10-13 15:45:02 -07:00
.clang-tidy .clang_tidy: turn off cert-dcl21-cpp, add some others. 2021-09-24 09:30:25 -07:00
.editorconfig Don't trim trailing whitespace on .rst files 2019-06-15 22:36:07 -07:00
.gitattributes Try to convince Github harder to not count pcre2 2021-07-30 18:36:12 +02:00
.gitignore gitignore __pycache__ 2020-03-21 17:48:01 -07:00
.oclint Tell oclint to ignore another idiom that is safe 2017-09-09 00:18:05 -07:00
BSDmakefile Preserve CMake options when make is invoked 2020-07-12 18:26:12 -05:00
CHANGELOG.rst CHANGELOG: some updates for 3.4.0 2021-12-15 22:18:16 +08:00
CMakeLists.txt more int -> bool 2021-12-09 00:52:45 -08:00
CODE_OF_CONDUCT.md Add code of conduct 2020-07-06 20:13:01 +02:00
config_cmake.h.in Always use LC_NUMERIC=C internally (#8204) 2021-10-13 21:09:40 +02:00
CONTRIBUTING.rst CONTRIBUTING: Debian provides a "clang-format" package 2020-12-29 16:31:43 +01:00
COPYING Update copyright years 2021-05-03 13:12:11 +02:00
Dockerfile Update Dockerfile for cmake3 2019-04-28 11:41:37 -07:00
fish.desktop .desktop file: drop deprecated key 2021-03-18 12:36:18 +08:00
fish.pc.in Use pkg-config variables 2020-04-04 13:07:54 +02:00
fish.png fish.png: use the same thing we ship with the docs 2021-10-16 14:12:44 -07:00
fish.spec.in Revert "fish.spec: add SUSE depends on ncurses-utils eg tput" 2021-03-28 16:15:32 +08:00
GNUmakefile GNUMakefile: remove redundant CMake arguments 2020-12-29 16:31:43 +01:00
README.rst README: Link to Unix & Linux Stackexchange instead of SO 2021-11-30 22:22:05 +01:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

`fish <https://fishshell.com/>`__ - the friendly interactive shell |Build Status|
=================================================================================

fish is a smart and user-friendly command line shell for macOS, Linux,
and the rest of the family. fish includes features like syntax
highlighting, autosuggest-as-you-type, and fancy tab completions that
just work, with no configuration required.

For more on fishs design philosophy, see the `design
document <https://fishshell.com/docs/current/design.html>`__.

Quick Start
-----------

fish generally works like other shells, like bash or zsh. A few
important differences can be found at
https://fishshell.com/docs/current/tutorial.html by searching for the
magic phrase “unlike other shells”.

Detailed user documentation is available by running ``help`` within
fish, and also at https://fishshell.com/docs/current/index.html

Getting fish
------------

macOS
~~~~~

fish can be installed:

-  using `Homebrew <http://brew.sh/>`__: ``brew install fish``
-  using `MacPorts <https://www.macports.org/>`__:
   ``sudo port install fish``
-  using the `installer from fishshell.com <https://fishshell.com/>`__
-  as a `standalone app from fishshell.com <https://fishshell.com/>`__

Packages for Linux
~~~~~~~~~~~~~~~~~~

Packages for Debian, Fedora, openSUSE, and Red Hat Enterprise
Linux/CentOS are available from the `openSUSE Build
Service <https://software.opensuse.org/download.html?project=shells%3Afish&package=fish>`__.

Packages for Ubuntu are available from the `fish
PPA <https://launchpad.net/~fish-shell/+archive/ubuntu/release-3>`__,
and can be installed using the following commands:

::

   sudo apt-add-repository ppa:fish-shell/release-3
   sudo apt update
   sudo apt install fish

Instructions for other distributions may be found at
`fishshell.com <https://fishshell.com>`__.

Windows
~~~~~~~

-  On Windows 10, fish can be installed under the WSL Windows Subsystem
   for Linux with the instructions for the appropriate distribution
   listed above under “Packages for Linux”, or from source with the
   instructions below.
-  Fish can also be installed on all versions of Windows using
   `Cygwin <https://cygwin.com/>`__ (from the **Shells** category).

Building from source
~~~~~~~~~~~~~~~~~~~~

If packages are not available for your platform, GPG-signed tarballs are
available from `fishshell.com <https://fishshell.com/>`__ and
`fish-shell on
GitHub <https://github.com/fish-shell/fish-shell/releases>`__. See the
`Building <#building>`__ section for instructions.

Running fish
------------

Once installed, run ``fish`` from your current shell to try fish out!

Dependencies
~~~~~~~~~~~~

Running fish requires:

-  curses or ncurses (preinstalled on most \*nix systems)
-  some common \*nix system utilities (currently ``mktemp``), in
   addition to the basic POSIX utilities (``cat``, ``cut``, ``dirname``,
   ``ls``, ``mkdir``, ``mkfifo``, ``rm``, ``sort``, ``tee``, ``tr``,
   ``uname`` and ``sed`` at least, but the full coreutils plus ``find`` and
   ``awk`` is preferred)
-  The gettext library, if compiled with
   translation support

The following optional features also have specific requirements:

-  builtin commands that have the ``--help`` option or print usage
   messages require ``ul`` and either ``nroff`` or ``mandoc`` for
   display
-  automated completion generation from manual pages requires Python 3.5+
-  the ``fish_config`` web configuration tool requires Python 3.5+ and a web browser
-  system clipboard integration (with the default Ctrl-V and Ctrl-X
   bindings) require either the ``xsel``, ``xclip``,
   ``wl-copy``/``wl-paste`` or ``pbcopy``/``pbpaste`` utilities
-  full completions for ``yarn`` and ``npm`` require the
   ``all-the-package-names`` NPM module
-  ``colorls`` is used, if installed, to add color when running ``ls`` on platforms
   that do not have color support (such as OpenBSD)

Switching to fish
~~~~~~~~~~~~~~~~~

If you wish to use fish as your default shell, use the following
command:

::

   chsh -s /usr/local/bin/fish

``chsh`` will prompt you for your password and change your default
shell. (Substitute ``/usr/local/bin/fish`` with whatever path fish was
installed to, if it differs.) Log out, then log in again for the changes
to take effect.

Use the following command if fish isnt already added to ``/etc/shells``
to permit fish to be your login shell:

::

   echo /usr/local/bin/fish | sudo tee -a /etc/shells

To switch your default shell back, you can run ``chsh -s /bin/bash``
(substituting ``/bin/bash`` with ``/bin/tcsh`` or ``/bin/zsh`` as
appropriate).

Building
--------

.. _dependencies-1:

Dependencies
~~~~~~~~~~~~

Compiling fish requires:

-  a C++11 compiler (g++ 4.8 or later, or clang 3.3 or later)
-  CMake (version 3.5 or later)
-  a curses implementation such as ncurses (headers and libraries)
-  PCRE2 (headers and libraries) - a copy is included with fish
-  gettext (headers and libraries) - optional, for translation support

Sphinx is also optionally required to build the documentation from a
cloned git repository.

Additionally, running the test suite requires Python 3.5+ and the pexpect package.

Building from source (all platforms) - Makefile generator
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To install into ``/usr/local``, run:

.. code:: bash

   mkdir build; cd build
   cmake ..
   make
   sudo make install

The install directory can be changed using the
``-DCMAKE_INSTALL_PREFIX`` parameter for ``cmake``.

Building from source (macOS) - Xcode
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: bash

   mkdir build; cd build
   cmake .. -G Xcode

An Xcode project will now be available in the ``build`` subdirectory.
You can open it with Xcode, or run the following to build and install in
``/usr/local``:

.. code:: bash

   xcodebuild
   xcodebuild -scheme install

The install directory can be changed using the
``-DCMAKE_INSTALL_PREFIX`` parameter for ``cmake``.

Build options
~~~~~~~~~~~~~

In addition to the normal cmake build options (like ``CMAKE_INSTALL_PREFIX``), fish has some other options available to customize it.

- BUILD_DOCS=ON|OFF - whether to build the documentation. This is automatically set to OFF when sphinx isn't installed.
- INSTALL_DOCS=ON|OFF - whether to install the docs. This is automatically set to on when BUILD_DOCS is or prebuilt documentation is available (like when building in-tree from a tarball).
- FISH_USE_SYSTEM_PCRE2=ON|OFF - whether to use an installed pcre2. This is normally autodetected.
- MAC_CODESIGN_ID=String|OFF - the codesign ID to use on Mac, or "OFF" to disable codesigning.
- WITH_GETTEXT=ON|OFF - whether to build with gettext support for translations.

Note that fish does *not* support static linking and will attempt to error out if it detects it.

Help, it didnt build!
~~~~~~~~~~~~~~~~~~~~~~

If fish reports that it could not find curses, try installing a curses
development package and build again.

On Debian or Ubuntu you want:

::

   sudo apt install build-essential cmake ncurses-dev libncurses5-dev libpcre2-dev gettext

On RedHat, CentOS, or Amazon EC2:

::

   sudo yum install ncurses-devel

Contributing Changes to the Code
--------------------------------

See the `Guide for Developers <CONTRIBUTING.rst>`__.

Contact Us
----------

Questions, comments, rants and raves can be posted to the official fish
mailing list at https://lists.sourceforge.net/lists/listinfo/fish-users
or join us on our `gitter.im
channel <https://gitter.im/fish-shell/fish-shell>`__. Or use the `fish tag
on Unix & Linux Stackexchange <https://unix.stackexchange.com/questions/tagged/fish>`__.
There is also a fish tag on Stackoverflow, but it is typically a poor fit.

Found a bug? Have an awesome idea? Please `open an
issue <https://github.com/fish-shell/fish-shell/issues/new>`__.

.. |Build Status| image:: https://github.com/fish-shell/fish-shell/workflows/C/C++%20CI/badge.svg
   :target: https://github.com/fish-shell/fish-shell/actions