IntelliJ's embedded terminal does not load fish functions

Viewed 8980

I'm using IntelliJ's embedded terminal with the fish shell, which works well with one exception: it does not seem to load the fish functions defined in ~/.config/fish/functions/*.

When I use the macOS Terminal.app or iTerm2, the functions get loaded as they are supposed to, only IntelliJ's embedded terminal fails to do so.

Oddly enough, the IntelliJ terminal does load ~/.config/fish/config.fish just fine.

Here's the output of echo $fish_function_path in iterm2 and Terminal.app:

/Users/moritz/.config/fish/functions
/usr/local/Cellar/fish/2.6.0/etc/fish/functions
/usr/local/share/fish/vendor_functions.d
/usr/local/Cellar/fish/2.6.0/share/fish/functions

And here's the output when running the same in IntelliJ's embedded terminal:

/Applications/IntelliJ IDEA.app/Contents/plugins/terminal/fish/functions
/usr/local/Cellar/fish/2.6.0/etc/fish/functions
/usr/local/share/fish/vendor_functions.d
/usr/local/Cellar/fish/2.6.0/share/fish/functions

I guess this looks like IntelliJ's embedded terminal initializes the fish session with a different value for $fish_function_path?

$HOME (=/Users/moritz) and $XDG_CONFIG_HOME (not set) are the same in all three, iTerm2, Terminal.app and IntelliJ's embedded terminal.

5 Answers

Checkc the intelliJ option. Turn off shell integration.

enter image description here

Someone posted a good solution for this in the IntelliJ bug tracker.

IntelliJ has its own config.fish, where .config/fish/config.fish does get loaded, but not the functions...

Add the following to IntelliJ's internal config.fish and the fish functions get loaded fine in IntelliJ's embedded terminal:

if test -d ~/.config/fish/functions
  for f in ~/.config/fish/functions/*.fish
    source $f
  end
end

The location of IntelliJ's config.fish varies, on macOS it could be

  • Ultimate Edition: /Applications/IntelliJ\ IDEA.app/Contents/plugins/terminal/fish/config.fish
  • Community Edition: /Applications/IntelliJ\ IDEA\ CE.app/Contents/plugins/terminal/fish/config.fish
  • Or even something like this, if installed via Jetbrains Toolbox: ~/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/172.4574.11/IntelliJ IDEA.app/Contents/plugins/terminal/fish

You could also just replace that whole fish directory in IntelliJ's plugins/terminal with a symlink to your normal fish config directory, usually .config/fish/.

There's still another option: you can just link the functions directory, for example:

ln -s ~/.config/fish/functions \
  /Applications/IntelliJ\ IDEA.app/Contents/plugins/terminal/fish/config.fish

For me since since i use bass which also put some .py file in that directory, I have to tweak this a tad.

if test -d ~/.config/fish/functions
  for f in ~/.config/fish/functions/*.fish
    source $f
  end
end

Also I found the Ultimate Edition's path is a bit different: /Applications/IntelliJ\ IDEA.app/Contents/plugins/terminal/fish/config.fish

I still have the same problem in IntelliJ 2018.1 and also in Clion 2018.1. I tried to fix in Clion by suggestions in this thread, but someway it did not worked (I got even more error messages even if all seemed to be OK).

So my workaround solution is to set Idea terminal to /bin/bash (in Settings/Tools/Terminal - Shell Path), then as first command in terminal window enter fish.. and everything works fine, no fiddling with terminal plugin is needed.

(I find it quite a pity, that Jetbrain can't/doesn't want to fix it.. and /IDEA-173259 is "closed")

Related