Open nkh opened 1 year ago
Please tell us exactly how you run lscolors
In many ways but most often in a pipe.
You may not remember me but I'm the one who asked you to extract lscolors as a utility.
config/ftl/etc/viewers/core:ptype() { mime_get ; psplit "echo ${f@Q} | lscolors ; echo 'mime type: $mtype' ; echo -n 'file type: '; file -b ${n@Q} ; stat -c %s ${n@Q} | numfmt --to=iec ; read -sn 100" ; }
config/ftl/etc/core/ftl:filter2() { ftl_sort | tee >(cat >&4) | vfiles_clr | filter_c | lscolors >&5 ; }
config/ftl/etc/core/commands:gmark_fzf() { [[ -e $ftl_root/marks ]] && go_loop f fzf "$({ cat $ftl_root/marks ; gmark_fzf_user ; } | lscolors | fzf-tmux $fzf_opt --cycle -m --expect=ctrl-t --ansi)" ; }
config/ftl/etc/core/commands:history_go() { h=$fs/history ; dedup $h && go_loop f fzf "$(<$h lscolors | fzf-tmux $fzf_opt --tac --ansi --expect=ctrl-t)" ; }
config/ftl/etc/core/commands:ghistory() { h=$ghist ; dedup $h && go_loop f fzf "$(<$h lscolors | fzf-tmux $fzf_opt --tac --ansi --expect=ctrl-t)" ; }
config/ftl/etc/core/commands:ghistory_edit() { dedup $ghist && rg -v -x -F -f <(<$ghist lscolors | fzf-tmux $fzf_opt --tac -m --ansi) $ghist | sponge $ghist ; }
config/ftl/etc/core/commands:mark_fzf() { go_loop f fzf "$({ gmark_fzf_user ; printf "%s
" "${marks[@]}" ; } | sort -u | lscolors | fzf-tmux $fzf_opt -m --expect=ctrl-t --ansi)" ; }
config/ftl/etc/core/commands:selection_ext_fzf() { fzf_tag T "$(fd -H -I -d1 | rg "\.$e$" | lscolors | fzf-tmux $fzf_opt -m --ansi --marker '▪')" ; list ; }
config/ftl/etc/core/commands:selection_ext_all_fzf() { fzf_tag T "$(fd -H -I | rg "\.$e$" | lscolors | fzf-tmux $fzf_opt -m --ansi --marker '▪')" ; list ; }
config/ftl/etc/core/commands:selection_goto() { tag_check && go_loop f fzf "$(printf "%s
" "${!tags[@]}" | sort -u | lscolors | fzf-tmux $fzf_opt --tac --ansi --expect=ctrl-t)" ; }
config/ftl/etc/core/commands:selection_untag_fzf() { tag_check && { fzf_tag U "$(printf "%s
" "${!tags[@]}" | lscolors | fzf-tmux $fzf_opt -m --ansi --marker '⊟')" ; list ; } ; }
config/ftl/etc/filters/by_file_reset_dir: lscolors | fzf-tmux -p 80% --cycle -m --ansi --info=inline --layout=reverse --bind ctrl-s:select-all\
config/ftl/etc/bin/fzf_mv_rm:<"$fzf_mv_rc" lscolors | fzf-tmux $fzf_opt > /tmp/$$_fzf_mv && rg -v -x -F -f /tmp/$$_fzf_mv "$fzf_mv_rc" | sponge "$fzf_mv_rc"
config/ftl/etc/bin/frl:find . -maxdepth $frl_max_depth -type p,d,f,l -xtype p,d,f,l | sed -e '/^\.$/d' -e 's~^\.\/~~' | rg --no-heading --smart-case "$1" --color=always --colors 'match:fg:51' | lscolors
config/ftl/etc/bin/fzf_mv:to=$( cat "$fzf_mv_rc" 2>&- | awk '!seen[$0]++' | lscolors | fzf-tmux -0 -1 $fzf_opt)
config/ftl/etc/bin/third_party/plc: uses 'lscolors' or File::LS_colors
config/ftl/etc/bin/third_party/plc:my $pid = open2(*COLORED, *LSCOLORS, "lscolors");
config/ftl/etc/filters/by_extension: sort -u | { echo "-no_extension-" ; cat ; } | lscolors | \
config/ftl/etc/filters/by_file_global_reset_dir: lscolors | fzf-tmux -p 80% --cycle -m --ansi --info=inline --layout=reverse --bind ctrl-s:select-all \
config/ftl/etc/filters/by_file: lscolors | fzf-tmux -p 80% --cycle -m --ansi --info=inline --layout=reverse --bind ctrl-s:select-all \
config/ftl/etc/filters/by_file_global: lscolors | fzf-tmux -p 80% --cycle -m --ansi --info=inline --layout=reverse --bind ctrl-s:select-all \
config/ftl/etc/filters/by_no_extension: sort -u | { echo "-without_extension-" ; cat ; } | lscolors | \
config/ftl/etc/filters/by_all_files: find -printf "%p
" | grep -v '^\.$' | sed 's ^./ ' | sort -u | lscolors | \
config/ftl/etc/bindings/leader_git:go_loop f fzf "$(cd "$git_root" ; git -c color.status=always status -s | lscolors | fzf-tmux $fzf_opt -m --expect=ctrl-t --ansi | sed 's#...#'$git_root'/#')"
config/ftl/etc/bindings/lib/extra:tsplit "{ echo -n ' File: ' ; echo ${n@Q} | lscolors ; hsize=\$(echo -n 'H_size: ' ; stat -c %s '$n' | numfmt --to=iec) ; stat '$n' | sed -e '/File:/d' -e \"s/Device:/\$hsize Device:/\" -e 's/IO Block/IO_Block/' ; echo ' mime: $mtype' ; echo -n ' type: ' ; file -b ${n@Q} ; } | piper --global '[A-Za-z-_]+: ' 'blue' '\d+\ ?x\ ?\d+' 'yellow' ; read -sn 1"
config/ftl/bindings/tmsu:tmsu_goto() { go_loop f fzf "$(tmsu_table2 | lscolors | fzf-tmux $fzf_opt -m --ansi --expect=ctrl-t --preview 'lscolors {}' --preview-window noborder:wrap:down:4 | sed 's/:.*//')" ; }
config/ftl/bindings/fzf_pane_preview: lscolors | \
You could use a subshell for this, e.g.
fd | (cd dir && lscolors) | ...
However, I do notice one quality-of-life thing we could improve: right now if any directory component doesn't exist, we treat it like a normal file. Presumably we should only do that for the final component, and everything else should default to the directory color.
@tavianator
from my first post
I run lscolors in a subshell as a fix it ...
but it may surprise some users ...
and it would be more usable if the result is the same ...
and for users without a sub shell an option to set the "root" path may be helpful.
And yes please paths that don't exists should still look like paths. For executable files a "root" path would be necessary as I suggested.
this is useful when one has a list of paths to display, want to remove parts of the path (because it's too long for example) and still have colors.
Thank you for reporting this. It would be of great help if you could a small example on how to reproduce this. And maybe summarize the suggested improvements (add root path option + colorize non-terminal folders + ...).
Hi, sorry I was clear enough about the context.
mkdir subdir
touch subdir/f.jpg
touch subdir/f.exe
chmod a+x subdir/f.exe
fd . subdir > found
<found lscolors
mkdir other_sub
cd other_sub
<../found lscolors # colors will differ here
Possible improvements:
root="$PWD"
cd a_galaxy_far_far_away
<found lscolors --root "$root"
it seems that the location when running lscolors changes the way its input is colored
when in another directory and with the same input, colors differ; also note that the some files are colored as they should, one of the files is executable and doesn't have the same color but that's understandable.
I run lscolors in a subshell as a fix it but it may surprise some users and it would be more usable if the result is the same, and for users without a sub shell an option to set the "root" path may be helpful.