21832 Commits

Author SHA1 Message Date
Johannes Altmanninger
3bc896bd89 Release 4.2.1
Created by ./build_tools/release.sh 4.2.1
4.2.1
2025-11-13 13:09:28 +01:00
Johannes Altmanninger
80b46fbc28 release.sh: create next minor version milestone
Also stop creating patch milestones automatically. The Web UI doesn't
allow deleting them, only the API does.
2025-11-13 13:06:23 +01:00
Johannes Altmanninger
b9af3eca9f Include prebuilt man pages again
Historically, Sphinx was required when building "standalone" builds,
else they would have no man pages.

This means that commit 0709e4be8b (Use standalone code paths by
default, 2025-10-26) broke man pages for users who build from a
tarball where non-standalone builds would use prebuilt docs.

Add a hack to use prebuilt docs again.

In future, we'll remove prebuilt docs, see #12052.
2025-11-13 12:58:29 +01:00
王宇逸
840efb76d0 zh_TW: fill tier1 translations
Co-authored-by: Lumynous <lumynou5.tw@gmail.com>

Closes #12043
2025-11-13 12:57:01 +01:00
王宇逸
8a845861f3 zh_CN: fill tier1 translations
Co-authored-by: Lumynous <lumynou5.tw@gmail.com>

Part of #12043
2025-11-13 12:57:01 +01:00
Johannes Altmanninger
39d6443b6b github sponsors link
In future we should make an opencollective or liberapay team.
2025-11-13 12:57:01 +01:00
Johannes Altmanninger
1c9d4e77df Fix webconfig import
Fixes 78f71971cb (fix: Python 3.5+ compatibility in webconfig.py
type hints, 2025-11-09).
Fixes #12053
2025-11-12 09:55:22 +01:00
Johannes Altmanninger
15f9d6d279 start new cycle
Created by ./build_tools/release.sh 4.2.0
2025-11-10 10:19:14 +01:00
Johannes Altmanninger
cf2f7eb785 CI: remove tmate used for debugging
Also remove dead code selecting pip version
2025-11-10 10:15:48 +01:00
Johannes Altmanninger
e7d740785d tests/help-completions: fix for macOS awk 2025-11-10 10:15:48 +01:00
Johannes Altmanninger
8cc25fe772 tests/man: work around man idiosyncracy on macOS/FreeBSD
This man implementation fails to remove control characters when stdout
is not a TTY. Upstream tracking issue:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=282414
2025-11-10 10:15:48 +01:00
Johannes Altmanninger
896f0606cd Release 4.2.0
Created by ./build_tools/release.sh 4.2.0
4.2.0
2025-11-10 08:19:40 +01:00
Johannes Altmanninger
2649f8d591 tests/sphinx-markdown-changelog: also disable when pushing a tag
Also, fix the command that should only filter out the current tag.
2025-11-10 08:18:53 +01:00
Johannes Altmanninger
e77102d73e Install Sphinx in macOS CI/CD
Looks like macOS packages didn't have docs??
I noticed via our Cargo warning about sphinx-build.

macOS has a variety of pythons installed:

	bash-3.2$ type -a python python3
	python is /Library/Frameworks/Python.framework/Versions/Current/bin/python
	python3 is /opt/homebrew/bin/python3
	python3 is /usr/local/bin/python3
	python3 is /Library/Frameworks/Python.framework/Versions/Current/bin/python3
	python3 is /usr/bin/python3

by default, "uv --no-managed-python" uses python3 (homebrew), but
"python" (and "pip") use the other one.  Make uv use the same as
our scripts.  Not all uv commands support "--python" today, so set
UV_PYTHON.
2025-11-10 08:18:53 +01:00
Johannes Altmanninger
ac94bc774b Update changelog 2025-11-10 07:28:35 +01:00
Johannes Altmanninger
83eca32111 release.sh: build local tarball with pinned Sphinx versions
Use the pinned versions of Sphinx + dependencies, for reproducibility
and correctness. (Specifically, this gives us proper OSC 8
hyperlinks when /bin/sphinx-build is affected by a packaging bug,
see https://github.com/orgs/sphinx-doc/discussions/14048)
2025-11-10 07:28:35 +01:00
Johannes Altmanninger
f5662d578e release-notes.sh: extract authors from trailers
Ideally we want to credit reported-by/helped-by etc. but we'd need
to ask the GitHub API for this information.

Also we should use %(trailers) if possible.
2025-11-10 07:02:08 +01:00
Daniel Rainer
80363314aa cleanup: remove obsolete comments
These comments were made obsolete in c323a2d5fe
("Continued refactoring of history", 2025-11-09)

Closes #12041
2025-11-10 07:02:08 +01:00
Daniel Rainer
6ce3bb858d cleanup: fix swapped comments
Part of #12041
2025-11-10 07:02:08 +01:00
Daniel Rainer
1c34fb064a cleanup: remove obsolete comment
This comment should have been removed in 3736636d99
("msrv: update to Rust 1.85", 2025-10-19)

Part of #12041
2025-11-10 07:02:08 +01:00
Johannes Altmanninger
366b85beb2 completions/help: fix bad description
Fixes 2cd60077e6 (help: get section titles from Sphinx, 2025-11-05).
2025-11-09 22:20:52 +01:00
Peter Ammon
82038e236d Revert "Add history file format internal docs"
This reverts commit 458fe1be2f.

This was a proposal which ought not to have been pushed.
2025-11-09 10:47:31 -08:00
Peter Ammon
f72fc7f09b Remove HistoryIdentifier
HistoryIdentifier was an over-engineered way of annotating history items
with the paths that were found to be valid, for autosuggestion hinting.
It wasn't persisted to the file. Let's just get rid of this.
2025-11-09 10:37:05 -08:00
Peter Ammon
c323a2d5fe Continued refactoring of history
Use fstat() instead of lseek() to determine history file size.
Pass around the file_id instead of recomputing it.

This saves a few syscalls; no behavior change is expected.
2025-11-09 10:03:45 -08:00
Peter Ammon
662b55ee6b Continue refactoring history
Simplify some logic and group related items together.
2025-11-09 10:03:45 -08:00
Peter Ammon
2e92255032 Factor history item offsets into an iterator
More idiomatic.
2025-11-09 10:03:45 -08:00
Peter Ammon
5182901bcc Factor history files better
Preparation for eventually cleaning this up. No user-visible changes
expected.
2025-11-09 10:03:45 -08:00
Peter Ammon
248eb2eb4a Move history.rs into its own module 2025-11-09 10:03:45 -08:00
Peter Ammon
458fe1be2f Add history file format internal docs 2025-11-09 10:03:45 -08:00
Johannes Altmanninger
8589231742 functions/__fish_print_help: work around for FreeBSD's man missing -l
This fixes "man abbr" on macOS and FreeBSD.

Upstream feature request:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=290911

Note that this workarond requires another one, copied from ec939fb22f
(Work around BSD man calling pager when stdout is not a TTY,
2024-10-30).

Closes #12037
2025-11-09 13:10:46 +01:00
Johannes Altmanninger
59658b44a9 functions/man: reuse __fish_print_help for viewing built-in man-pages
Historically,
- our "man" wrapper prepends /usr/share/fish/man to $MANPATH
- "__fish_print_help" only operates on /usr/share/fish/man, to it
  accesses that directly

However standalone builds -- where /usr/share/fish/man may not exist
-- have complicated things; we temporarily materialize a fake man
directory.

Reuse __fish_print_help instead of duplicating this.

Part of #12037
2025-11-09 13:08:47 +01:00
Johannes Altmanninger
3f2e4b71bc functions/__fish_print_help: bravely remove fallback to mandoc/groff
I don't know if anyone has installed mandoc/groff but not man.
Since 4.1 we officially require "man" as dependency (hope that works
out; we're missing some standardization, see #12037).  Remove the
fallback with the old mandoc/nroff logic.  This makes the next commit
slightly simpler -- which is not enough reason by itself, but we want
to do this anyway at some point.
2025-11-09 13:08:47 +01:00
Johannes Altmanninger
9b42051ba7 functions/man: don't export MANPATH unnecessarily
We always try to prepend our man path to $MANPATH before calling man.
But this is not necessary when we're gonna display the output of
"status get-file man/man1/abbr.1".

Overriding man pages can cause issues like
https://github.com/fish-shell/fish-shell/issues/11472
https://gitlab.com/man-db/man-db/-/merge_requests/15

which by themselves are maybe not enough reason to avoid exporting
MANPATH, but given that embedded man pages might become the only
choice in future (see #12037), we should reduce the scope of our
custom MANPATH.
2025-11-09 13:08:47 +01:00
Johannes Altmanninger
674e93d127 functions/{__fish_print_help,man}: extract function for resolving builtin docs
These are code clones, apart from the fact that __fish_print_help
doesn't have the '{' case, because alt-h/f1 will never find that.
But adding it doesn't really hurt because it's unlikely that the user
will have a manpage for '{'. Extract a function.
2025-11-09 13:08:47 +01:00
Johannes Altmanninger
b1472827e7 Update BSD sourcehut images
Part of #12037
2025-11-09 13:08:47 +01:00
Daniel Rainer
856e649487 zh_TW.po: remove empty comments
These were added automatically when we used the `--strict` flag with
gettext commands. We stopped using this flag, but existing empty
comments are not automatically deleted, so it is done here manually.

Closes #12038
2025-11-09 13:08:47 +01:00
Johannes Altmanninger
bc71a1662d Update changelog 2025-11-09 13:08:47 +01:00
Johannes Altmanninger
33bf808084 fish_tab_title: fix tab title accidentally including window title
Also use the correct OSC number.

Note that this only works on few terminals (such as iTerm2).  Not sure
if it's worth for us to have this feature but I guess multiple users
have requested it.
2025-11-09 13:08:47 +01:00
seg6
78f71971cb fix: Python 3.5+ compatibility in webconfig.py type hints
Signed-off-by: seg6 <hi@seg6.space>

Closes #12039
Closes #12040
2025-11-09 13:04:05 +01:00
ridiculousfish
b4fc5160ba Set FISH_TEST_NO_CURSOR_POSITION_QUERY in pexpect tests
This was causing query timeouts with high parallelism in the tests.
2025-11-08 18:28:41 -08:00
SandWood Jones
9d3acbdd82 fix(abbr) --command conflicts
Fixes #11184

Closes #12021
2025-11-08 21:24:28 +01:00
Johannes Altmanninger
873ede7a77 CONTRIBUTING: modernize
The section on build_tools/style.fish was stale.  That tool does not
automagically format unstaged changes or the last commit's changes
anymore.  Relying on such tools is bad practice anyway, people should
configure their editor to fix the style violations at the source.
Replace "before committing" with neutral phrasing.

Remove the redundant mention of "cargo fmt" and "clippy".  Use of
clippy goes without saying for Rust projects.  Instead, add another
mention of "build_tools/checks" which also does clippy as well as
translation update checks (which are commonly needed).

Drop the "testing with CMake" part since it's a legacy thing and
basically never needed, especially by new faces.

Use semantic line breaks in the paragraphs starting at "When in doubt".
2025-11-08 21:24:28 +01:00
Johannes Altmanninger
d7581dbaa4 CONTRIBUTING: remove Git pre-push hook
- this is not specific to fish and only relevant to people who push
  directly to master
- we don't push directly to master as often anymore
- I don't think we used it much in practice (when we should have).
- a good portion of contributions is pushed with jj which probably
  does this differently

Let's remove it even though this is a nice piece of documentation.
I guess we could add it back to doc_internal/ if we have the capacity
to maintain it.
2025-11-08 21:21:13 +01:00
Daniel Rainer
71e4d7ba87 tempfile: utilize new tempfile crate
Closes #12029
2025-11-08 21:18:25 +01:00
Daniel Rainer
46f7f47bda util: add crate for creating tempfiles
ja: the motivation for our own crate is
1. the tempfile crate is probably overkill for such a small
   piece of functionality (given that we already assume Unix)
2. we want to have full control over the few temp files we
   do create

Closes #12028
2025-11-08 21:18:25 +01:00
Johannes Altmanninger
4046df7412 Disable parallelism in macOS CI
Since the parent commit, these tests fail repeatedly in macOS GitHub
Actions CI: complete-group-order.py, nullterm.py, scrollback.py and
set_color.py. They run fine in isolation.

We'll fix the flaky system tests soon (#11815) but until then, remove
parallelism from macOS CI.
2025-11-08 21:18:25 +01:00
Johannes Altmanninger
a772470b76 Multi-line autosuggestions
Unlike other shells, fish tries to make it easy to work with multiline
commands. Arguably, it's often better to use a full text editor but
the shell can feel more convenient.

Spreading long commands into multiple lines can improve readability,
especially when there is some semantic grouping (loops, pipelines,
command substitutions, quoted parts). Note that in Unix shell, every
quoted string can span multiple lines, like Python's triple quotes,
so the barrier to writing a multiline command is quite low.

However these commands are not autosuggested. From
1c4e5cadf2 (commitcomment-150853293)

> the reason we don't offer multi-line autosuggestion is that they
> can cause the command line to "jump" to make room for the second
> and third lines, if you're at the bottom of your terminal.

This jumping (as done by nushell for example) might be surprising,
especially since there is no limit on the height of a command.

Let's maybe avoid this jumping by rendering only however many lines
from the autosuggestion can fit on the screen without scrolling.

The truncation is hinted at by a single ellipsis ("…") after the
last suggested character, just like when a single-line autosuggestion
is truncated. (We might want to use something else in future.)

To implement this, query for the cursor position after every command,
so we know the y-position of the shell prompt within the terminal
window (whose height we already know).

Also, after we register a terminal window resize, query for the cursor
position before doing anything else (until we od #12004, only height
changes are relevant), to prevent this scenario:

	1. move prompt to bottom of terminal
	2. reduce terminal height
	3. increase terminal height
	4. type a command that triggers a multi-line autosuggestion
	5. observe that it would fail to truncate properly

As a refresher: when we fail to receive a query response, we always
wait for 2 seconds, except if the initial query had also failed,
see b907bc775a (Use a low TTY query timeout only if first query
failed, 2025-09-25).

If the terminal does not support cursor position report (which is
unlikely), show at most 1 line worth of autosuggestion.  Note that
either way, we don't skip multiline commands anymore.  This might make
the behavior worse on such terminals, which are probably not important
enough.  Alternatively, we could use no limit for such terminals,
that's probably the better fallback behavior. The only reason I didn't
do that yet is to stay a little bit closer to historical behavior.

Storing the prompt's position simplifies scrollback-push and the mouse
click handler, which no longer need to query.  Move some associated
code to the screen module.

Technically we don't need to query for cursor position if the previous
command was empty. But for now we do, trading a potential optimization
for andother simplification.

Disable this feature in pexpect tests for now, since those are still
missing some terminal emulation features.
2025-11-08 21:18:25 +01:00
Johannes Altmanninger
e1ce53fe15 screen: fix inconsistent initialization order 2025-11-08 21:18:25 +01:00
Johannes Altmanninger
77bdd4fbde reader: use unqualified enum variants in match statement
This reduces noise although the indentation is not great.
2025-11-08 21:18:25 +01:00
Johannes Altmanninger
3fdaa543ed reader: remove unused parameter 2025-11-08 21:18:25 +01:00