Skip to content

Instantly share code, notes, and snippets.

@robinknowles
Created November 17, 2023 14:26
Show Gist options
  • Save robinknowles/ab5e5b0c841cc7ce7c805eb39cac90bc to your computer and use it in GitHub Desktop.
Save robinknowles/ab5e5b0c841cc7ce7c805eb39cac90bc to your computer and use it in GitHub Desktop.
Using fzf to fuzzy-find OpenFOAM features

Fuzzy finding 'FOAM features

Accompanies OnCFD Newsletter #173

A couple of code snippets that use fzf to mine your install & extract the answers to everyday OpenFOAM questions, like...

  • How do I use a particular feature?
  • What does so-and-so dictionary look like?
  • Does this need a semi-colon? 🤦‍♂️

It looks like this...

oncfd-173-fzf-OpenFOAM

Here are the code snippets...

fzf + grep + less version

grep \
--line-buffered --line-number --color=never \
--recursive --binary-files=without-match '' $FOAM_TUTORIALS |
fzf \
--delimiter : \
--preview 'less {1}' \
--preview-window 'up,75%,border,+{2}/3'

fzf + ripgrep + bat version

rg \
--color=always --line-number --no-heading \
--smart-case '' $FOAM_TUTORIALS |
fzf --ansi \
--color 'hl:-1:underline,hl+:-1:underline:reverse' \
--delimiter : \
--preview 'bat -lcpp --color=always {1} --highlight-line {2}' \
--preview-window 'up,75%,border,+{2}+3/3,~3'

That should save you some typing, but make sure you check out the original article for more info 👋

@cloner0110
Copy link

rg seems to be looking in some odd places - perhaps you don't have the $FOAM_TUTORIALS environment variable set

Sorry for the late reply on this; I solved the problem by migrating to lazyVim, I believe its possible to integrate yours into lazyVim too :D

@robinknowles
Copy link
Author

Glad it was the start of something useful @cloner0110 🙌

@abzrg
Copy link

abzrg commented Jun 14, 2024

All credit to you 🙏

Well, thanks to this idea, I thought about something similar: quickly looking at the OpenFOAM source code as well. Not like greping in all the source code, but let's say I want to look at the createFields.H in the icoFoam solver, Or I want to know how sphereDrag force in lagrangian/intermediate library is implemented. Basically I want to quickly get access to certain files.

I wrote a script for that, which is available in this gist.
Although it works well, It's a bit hacky at the moment :)

@robinknowles
Copy link
Author

Doesn't look hacky to me - nice work @abzrg

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment