Skip to content

Instantly share code, notes, and snippets.

@gabydd
Last active May 8, 2024 11:07
Show Gist options
  • Save gabydd/570f0dd5f71dda35241500c18f5d27e3 to your computer and use it in GitHub Desktop.
Save gabydd/570f0dd5f71dda35241500c18f5d27e3 to your computer and use it in GitHub Desktop.
helix lf
[keys.normal]
C-f = [":new", ":insert-output lf-pick", "split_selection_on_newline", "goto_file", "goto_last_modification", "goto_last_modified_file", ":buffer-close!", ":theme nord", ":theme default"]
# replace the default after theme with the theme you use
# open 1 with the open command (l and <left> to open) or more with (<space> to select) then quit
# all opened files will be opened in helix
# touch ~/.local/bin/lf-pick
# chmod +x ~/.local/bin/lf-pick
function lfp(){
local TEMP=$(mktemp)
lf -selection-path=$TEMP
echo >> $TEMP
while read -r line
do
echo "$line"
done < "$TEMP"
}
lfp
@webdev23
Copy link

webdev23 commented Jan 2, 2024

That particular setup breaks Helix mouse scrolling, after coming back from lf, due to some escape characters used in lf

To avoid that, we may run lf inside a tmux popup, It works only if Helix is already inside a tmux session, of course.


lfmux(){
  local TEMP=$(mktemp)
  tmux popup -h 100% -w 100% -E lf -selection-path=$TEMP
  cat $TEMP
}

lfmux

It does open multiple files, without breaking anything.

@AddictArts
Copy link

AddictArts commented Jan 5, 2024

I was inspired by @webdev23 tmux, but wanted zellij and yazi, so here it is for those interested.

This does not mess up the helix terminal. Note yazi is not suitable from helix insert-output. Note zellij run forks and you don't get the selections from the current interaction, so that is why this is broke into two commands.

However, I don't find it an issue to perform two key sequences in helix to open the files. They are also cached, so you don't have to pick agian if you want the same files.

config.toml

A-z = [":run-shell-command zellij run -fc -- yazi --chooser-file /tmp/yazi-chooser-file"]
A-Z = [":new", ":insert-output cat /tmp/yazi-chooser-file", "split_selection_on_newline", "goto_file", "goto_last_modification", "goto_last_modified_file", ":buffer-close!"]

@MuratOzsoyler
Copy link

lf -selection-path=/dev/stdout

lf -print-selection works also. Additionally instead of theme switching :redraw solves UI re-rendering.

@dpc
Copy link

dpc commented Feb 17, 2024

[keys.normal]
C-f = [":new", ":insert-output lf -selection-path=/dev/stdout", "split_selection_on_newline", "goto_file", "goto_last_modification", "goto_last_modified_file", ":buffer-close!", ":redraw"]

@davesmith00047
Copy link

Thank you for this.
The best version of this I've found so far (from scratching around in all the various answers), is:

C-f = [":new", ":insert-output lf -print-selection", "split_selection_on_newline", "goto_file", "goto_last_modification", "goto_last_modified_file", ":buffer-close!", ":redraw"]

With no lf-pick script needed.

It almost works too! But you need to have modified a buffer to get it to open, and it doesn't open from the current location, which is a pain.

I think it's a testament to how much helix needs this functionality that we're all scrabbling around in here, trying desperately to make something work...

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