Bug 2440541

Summary: atuin fish init uses deprecated `bind -k` which is removed in fish 4.x
Product: [Fedora] Fedora Reporter: Anders <bugzilla.cackle384>
Component: atuinAssignee: Cristian Le <fedora>
Status: CLOSED ERRATA QA Contact:
Severity: medium Docs Contact:
Priority: unspecified    
Version: rawhideCC: fedora, michel, rust-sig
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: atuin-18.11.0-1.fc45 Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2026-02-19 12:09:52 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Anders 2026-02-18 07:24:50 UTC
On Fedora 43 with:

- fish 4.2.0
- atuin 18.6.1-10.fc43.x86_64

Starting an interactive fish shell after sourcing atuin results in:

bind: the -k/--key syntax is no longer supported. See `bind --help` and `bind --key-names`

Tracing shows that the Fedora-shipped init script contains deprecated bindings:

/usr/libexec/atuin/atuin-init.fish:
    bind -M insert -k up _atuin_bind_up

(rpm -qf /usr/libexec/atuin/atuin-init.fish -> atuin-18.6.1-10.fc43.x86_64)

Note: `atuin init fish | grep -n "bind -k"` produces no output; the deprecated binding originates from /usr/libexec/atuin/atuin-init.fish shipped in the Fedora RPM.

Fish 4.x removed support for `bind -k` and `bind --key`. As a result, fish prints a warning at startup.

Reproducible: Always

Steps to Reproduce:
1. Install Fedora 43
2. sudo dnf install fish atuin
3. Verify versions:
   fish --version
   atuin --version
4. Add to ~/.config/fish/config.fish:

   if status is-interactive
       atuin init fish | source
   end

5. Start a new fish shell

Actual Results:
Fish prints:
bind: the -k/--key syntax is no longer supported. See `bind --help` and `bind --key-names`

Expected Results:
No warnings should be printed.
Atuin keybindings should use fish 4 compatible syntax.

Suggested Fix:
Replace:
    bind -M insert -k up _atuin_bind_up
With fish 4 compatible escape sequence bindings, e.g.:
    bind -M insert \e\[A _atuin_bind_up
    bind -M insert \eOA _atuin_bind_up
(or conditionally apply bindings based on fish version)

Workaround:
Set ATUIN_NOBIND=true and manually bind keys using fish 4 compatible syntax.

Comment 1 Cristian Le 2026-02-18 15:57:19 UTC
> `atuin init fish | grep -n "bind -k"` produces no output

Interesting. Is it dependent on if fish package is already present? If so, would adding `fish` as a BuildRequires create the format you expect?

If that is the case it sounds like we need to rebuild atuin for each terminal update.

Comment 2 Anders 2026-02-18 16:07:51 UTC
(In reply to Cristian Le from comment #1)
> > `atuin init fish | grep -n "bind -k"` produces no output
> 
> Interesting. Is it dependent on if fish package is already present? If so,
> would adding `fish` as a BuildRequires create the format you expect?
> 
> If that is the case it sounds like we need to rebuild atuin for each
> terminal update.

It does not appear to be related to BuildRequires or whether fish was present at build time.

`atuin init fish` itself does not emit `bind -k`, but the RPM ships a static init script at /usr/libexec/atuin/atuin-init.fish that still contains `bind -k`.

So this looks like a packaging/init-script issue rather than something requiring rebuilds for each fish update.

Comment 3 Cristian Le 2026-02-18 16:40:23 UTC
(In reply to Anders from comment #2)
> It does not appear to be related to BuildRequires or whether fish was
> present at build time.
> 
> `atuin init fish` itself does not emit `bind -k`, but the RPM ships a static
> init script at /usr/libexec/atuin/atuin-init.fish that still contains `bind
> -k`.
> 
> So this looks like a packaging/init-script issue rather than something
> requiring rebuilds for each fish update.

That file is created here https://src.fedoraproject.org/rpms/atuin/blob/rawhide/f/atuin.spec#_146

That said, I just checked on my local file `atuin-18.6.1-10.fc43.x86_64` and I do not find `bind -k`. Can you give me the line number where that is and maybe +- 5 lines around it?

Do you mean the line
```
$ grep -ne "bind.*-k" /usr/libexec/atuin/atuin-init.fish 
79:bind -M insert -k up _atuin_bind_up
```
if that is the case it is from `atuin init fish`
```
$ atuin init fish | grep -ne "bind.*-k"
79:bind -M insert -k up _atuin_bind_up
```
(note the different grep syntax used)

If this is fixed in upstream though, I plan to update atuin to 18.11.0 soon^{tm}

Comment 4 Anders 2026-02-18 18:06:14 UTC
(In reply to Cristian Le from comment #3)
> (In reply to Anders from comment #2)
> > It does not appear to be related to BuildRequires or whether fish was
> > present at build time.
> > 
> > `atuin init fish` itself does not emit `bind -k`, but the RPM ships a static
> > init script at /usr/libexec/atuin/atuin-init.fish that still contains `bind
> > -k`.
> > 
> > So this looks like a packaging/init-script issue rather than something
> > requiring rebuilds for each fish update.
> 
> That file is created here
> https://src.fedoraproject.org/rpms/atuin/blob/rawhide/f/atuin.spec#_146
> 
> That said, I just checked on my local file `atuin-18.6.1-10.fc43.x86_64` and
> I do not find `bind -k`. Can you give me the line number where that is and
> maybe +- 5 lines around it?
> 
> Do you mean the line
> ```
> $ grep -ne "bind.*-k" /usr/libexec/atuin/atuin-init.fish 
> 79:bind -M insert -k up _atuin_bind_up
> ```
> if that is the case it is from `atuin init fish`
> ```
> $ atuin init fish | grep -ne "bind.*-k"
> 79:bind -M insert -k up _atuin_bind_up
> ```
> (note the different grep syntax used)
> 
> If this is fixed in upstream though, I plan to update atuin to 18.11.0
> soon^{tm}

Ah, you're right. This is fixed upstream in 18.9.0
(https://github.com/atuinsh/atuin/issues/2803#issuecomment-3479247506).

On my system:

$ grep -nE 'bind.*-k' /usr/libexec/atuin/atuin-init.fish
79:bind -M insert -k up _atuin_bind_up

My earlier grep was too strict (`grep "bind -k"`), which missed the
`bind -M insert -k ...` form. Using `grep -nE 'bind.*-k'` shows it clearly.

Thanks for double-checking!

Comment 5 Cristian Le 2026-02-18 18:36:36 UTC
Very well. I am updating atuin to 18.11.0 (18.12.1 requires more work) tomorrow and that will close this bug. Thanks for the report.

Comment 6 Fedora Update System 2026-02-19 12:06:30 UTC
FEDORA-2026-9a278688c0 (atuin-18.11.0-1.fc45, rust-metrics-exporter-prometheus-0.17.2-1.fc45, and 2 more) has been submitted as an update to Fedora 45.
https://bodhi.fedoraproject.org/updates/FEDORA-2026-9a278688c0

Comment 7 Fedora Update System 2026-02-19 12:09:52 UTC
FEDORA-2026-9a278688c0 (atuin-18.11.0-1.fc45, rust-metrics-exporter-prometheus-0.17.2-1.fc45, and 2 more) has been pushed to the Fedora 45 stable repository.
If problem still persists, please make note of it in this bug report.