Open Canop opened 4 years ago
I'm a big fan of
[[verbs]]
key = "left"
execution = ":parent"
[[verbs]]
key = "right"
execution = ":focus"
This should be a default!
@kakulukia the reason why it's hard to make it a default:
hmmm .. agreed .. good point .. what about using arrow keys for editing as long as there is something to edit and use em for navigation if otherwise? even right arrow to view file?
I will definitely watch this project as it might replace three tools im currently using: ncdu, nnn, fd Well done!
BUT: br > edit file in vim > use :q to quit vim > also closing broot ðŸ˜
I need also to give hints at how to do the br configuration by hand for very specific configurations.
broot --set-install-state refused --print-shell-function fish > ~/sea/br.fish
@Canop similar to @kakulukia reply. I've set Enter as the default of editing it via vim/neovim. It would be cool that if I quit it I go back to broot and traverse from there. Or maybe even better is a broot plugin for vim/neovim? like how netrw is integrated via vim vinegar?
Anyway here's what I've added so far:
[[verbs]]
key = "alt-j"
execution = ":line_down"
[[verbs]]
key = "alt-k"
execution = ":line_up"
[[verbs]]
invocation = "edit"
key = "enter"
execution = "$EDITOR {file}"
I note this one: overloading rm
for your prefered file removal command.
https://github.com/Canop/broot/issues/136#issuecomment-582269484
. It would be cool that if I quit it I go back to broot and traverse from there
This is pretty much what ranger
does by default.
I like to have the PS1 prompt indicating when the shell is invoked by broot.
For this I have added to the br function in the launcher script as first line:
export BROOT_ACTIVE=true
and as last line, after the default content of the function:
export BROOT_ACTIVE=
In my .bashrc I have added after my normal prompt settings:
if test -n "$BROOT_ACTIVE"; then PS1="${PS1} (in broot) "; export PS1; fi
With this (in broot)
is added to the PS1 prompt when the shell is invoked with broot.
Oh that's cool
Thank you, but broot is much cooler. Thank you much for sharing this wonderfull program.
Is there a way to configure esc
to quit broot while in the top level of the TUI ?
Is there a way to configure
esc
to quit broot while in the top level of the TUI ?
Not anymore.
That was the initial behaviour, and I removed it because most people found it confusing.
If you think it could be better, create an issue, I can put it back behind a configuration flag.
If you think it could be better, create an issue, I can put it back behind a configuration flag.
Awesome. Issue created https://github.com/Canop/broot/issues/380
EDIT: This is outdated. After I figure out a couple issues, I'll post a comprehensive update.
@AndydeCleyre I hadn't thought about this use of the imports. Can you please create an issue asking how to deal with this f
flag in imports ?
EDIT: This is outdated. After I figure out a couple issues, I'll post a comprehensive update.
@AndydeCleyre Is your .zle_insert-path-broot
a widget that allows you to insert a file path into a command you've started typing (like the fzf ^t widget, if you're familiar with that)? This is exactly what I'm trying to accomplish right now. Unfortunately, when I source your code, my terminal freezes when broot launches. I don't suppose you'd have any idea what's going on? My versions are
$ zsh --version
zsh 5.8.1 (x86_64-apple-darwin21.0)
$ broot --version
broot 1.16.1
Yes, that's how it works here. Are the config files set up? Maybe something's wrong with the mode, and you should comment out echoti rmkx
? You could try launching zsh as zsh --noglobalrcs
?
No luck... :\ I've also tried with zsh -dfi
so I don't think it's due to some other configuration I have set up.
I should mention that I had the same problem with a simpler version I started hacking on which simply calls broot from a widget. Mysterious, and a real bummer because this setup would be amaaazing.
Anyway, thanks for your help.
Does this work?
$ podman run --net=host -it -e TERM=$TERM --rm docker.io/library/alpine:edge
# apk add broot zsh
# exec zsh
# mkdir -p ~/.config/broot
# <<'EOF' >~/.config/broot/select.hjson
{
default_flags: ig
verbs: [
{
internal: ":print_path"
key: "enter"
leave_broot: true
}
]
}
EOF
# <<'EOF' >~/.zshrc
.zle_insert-path-broot () {
echoti rmkx
local location_space="${(q-)$(broot --color yes --conf "${HOME}/.config/broot/select.hjson")} "
BUFFER+=$location_space
(( CURSOR+=$#location_space ))
}
zle -N .zle_insert-path-broot
bindkey '^[[1;7B' .zle_insert-path-broot
EOF
# exec zsh
Then trying the bindkey?
If not, what about a different terminal app?
I'm not familiar with podman (or containers generally). Should I be able to just paste this into a terminal after installing? I get Error: failed to connect: dial tcp [::1]:49215: connect: connection refused
from the first line.
For anyone else who happens to land here, the problem is specific to macos (I'm running 12.3.1) and is not specific to broot. It occurs with many but not all other TUI apps.
If anyone knows what's going on here, I'd appreciate any pointers. I haven't gotten anywhere with google (there's not a whole on ZLE widgets in general....)
@fredcallaway Any change if you try installing a newer Zsh release, via brew?
I'm noticing btw that my insert-path widget assumes you want it at the end of the line, and I should probably update it to insert wherever the cursor is instead.
Sadly, no. Same behavior with 5.9 (x86_64-apple-darwin21.3.0)
@fredcallaway Sorry to hear that. I suggest posting on the Zsh subreddit or IRC channel.
The solution to the frozen terminal issue (provided by @AndydeCleyre on reddit) is to add <$TTY
before broot
, e.g.
.zle_insert-path-broot () {
echoti rmkx
local location_space="${(q-)$(<$TTY broot --color yes --conf "${HOME}/.config/broot/select.hjson;${HOME}/.config/broot/conf.hjson")} "
BUFFER+=$location_space
(( CURSOR+=$#location_space ))
}
@fredcallaway Can you give me the link to the reddit thread ?
I'm a big fan of
[[verbs]] key = "left" execution = ":parent" [[verbs]] key = "right" execution = ":focus"
Even when I try setting that verb for right
, if I have filter text typed, it won't focus. Is there a way to make right
always focus?
Alright, aside from the above comment, I've settled my broot+zsh configs for now, at repos dotfiles-broot and dotfiles-zsh (mostly broot.zsh
).
@fredcallaway FYI I added a bunch of complexity to .zle_insert-path-broot
, so that it'll work great even if you trigger it with a partially typed path on the line already.
@AndydeCleyre
Even when I try setting that verb for right, if I have filter text typed, it won't focus.
How would you move the selection caret in the input ?
@AndydeCleyre
Even when I try setting that verb for right, if I have filter text typed, it won't focus.
How would you move the selection caret in the input ?
99-100% of the time my cursor is already as far right as can be. So I'd be happy if I could get right
to, in this case that the cursor cannot possibly move further right, focus instead. If that's not possible, I'd still be happy to completely forgo the ability to move the cursor to the right in any case, in order to get right
to focus.
Right now, the left and right keys aren't evaluated to verbs when the input isn't empty. I could change this to forbid the left key when the caret isn't at left, and the right key when the caret isn't at right.
@AndydeCleyre done in main. Will be part of the next release
I think that fzf-like files and folders selection in Broot are a must in the web and the wiki (and maybe even installable like br
)!
Maybe https://github.com/AndydeCleyre/dotfiles-zsh/blob/main/broot.zsh is too opinionated, but having a shortcut to search files and another one for directories is really useful, and another one to temporally show Broot without returning nothing is also useful.
Thanks for this great project!
Those sets of shortcut deserve probably more than just an entry in broot's doc: blog posts with a detailed presentation.
What do you think about this and creating a blog post, @AndydeCleyre?
Ok I'll put something together, post it back here for feedback, then post it for real somewhere.
@Martin1887 and anyone else interested,
I've put up a draft post at this-and-that/broot-zsh, and any feedback is very welcome.
It's much longer than I wanted it to be, really, and I still don't know if it answers the actual questions people will have.
It looks great! The only inconvenience I see is the last part before bonus is very complex, maybe a easier though less powerful manner could be introduced just before.
Could your Ctrl+B
do the trick, or it deletes the whole line (in that case, could be easily created a variant that does not delete the line)?
And the bonus part would be amazing, if removing the need of eval
is finally achieved!
@Martin1887
Thanks so much!
Yes, I'll add in a much simpler version which only inserts, and does not handle a partially typed path at all.
Great improvement the simple selector! It helps to understand what each thing of the complex one does.
So the only pending change is the eval-avoid function, right? I think this post should be promoted in the web, but I would change the eval-avoid empty code blocks by a more explicit message, since it may seem a failure of the user's browser.
Thanks @Martin1887
Yeah, unless there's more feedback, the bonus section is all that's left.
I could remove it, or if @Canop expects to implement #825 and release soon, I'll wait for that and specify that the bonus method and config require that latest release.
I expect to do it soonish. I must finish and wrap https://github.com/Canop/broot/pull/826 before, but then it's next in the list for broot unless new bugs come in.
Alright @Martin1887
Since @Canop has merged in the new features to main, I've updated and "finalized" the post (I'm still open to edits based on further feedback), even though the next broot release is still to come. The address is the same as before.
Great! I'm eager to try it (probably this week), thanks!
I have found a small issue in the drill-down launcher, @AndydeCleyre: at least in Starship after changing the folder it is not reflected in the prompt, but the directory is already changed. After any command (included an empty one) the directory is updated in the prompt.
Thanks!
Thanks @Martin1887
Did you also add the .zle_redraw-prompt
function? That's what I would expect to take care of that issue.
My bad, I forgot copying that function :S, now it works flawlessly, awesome!
There seems to be the need for a list of recipes, including
Please share what, in your opinion, could be included in there.
Answer with either a recipe, part of a recipe, or a need for some specific one.