.. | ||
demo | ||
LICENSE | ||
ls-colors.zsh | ||
README.md |
zsh-ls-colors
A zsh library to use LS_COLORS
in scripts or other plugins.
For a simple demo, see the demo
script in this repo.
For more advanced usage,
instructions are located at top of the source files for from-mode
and from-name
.
If a use case isn't adequately covered,
please open an issue!
Using zsh-ls-colors in a plugin
You can use this as a submodule or a subtree.
submodule:
# Add (only once)
git submodule add git://github.com/xPMo/zsh-ls-colors.git ls-colors
git commit -m 'Add ls-colors as submodule'
# Update
cd ls-colors
git fetch
git checkout origin/master
cd ..
git commit ls-colors -m 'Update ls-colors to latest'
Subtree:
# Initial add
git subtree add --prefix=ls-colors/ --squash -m 'Add ls-colors as a subtree' \
git://github.com/xPMo/zsh-ls-colors.git master
# Update
git subtree pull --prefix=ls-colors/ --squash -m 'Update ls-colors to latest' \
git://github.com/xPMo/zsh-ls-colors.git master
# Or, after adding a remote:
git remote add ls-colors git://github.com/xPMo/zsh-ls-colors.git
# Initial add
git subtree add --prefix=ls-colors/ --squash -m 'Add ls-colors as a subtree' ls-colors master
# Update
git subtree pull --prefix=ls-colors/ --squash -m 'Update ls-colors to latest' ls-colors master
Function namespacing
Since functions are a public namespace, this plugin allows you to customize the preifix for your plugin:
# load functions as my-lscolors::{init,match-by,from-name,from-mode}
source ${0:h}/ls-colors/ls-colors.zsh my-lscolors
Parameter namespacing
While indirect parameter expansion exists with ${(P)var}
,
it doesn't play nicely with array parameters.
There are multiple strategies to prevent unnecessary re-parsing:
# Call once when loading.
# Pollutes global namespace but prevents re-parsing
ls-color::init
# Don't call init at all and only use ::match-by.
# Doesn't pollute global namespace but reparses LS_COLORS on every call
ls-color::match-by $file lstat
# Initialize within a scope with local parameters.
# Best for not polluting global namespace when multiple filenames need to be parsed.
(){
local -A namecolors modecolors
ls-color::init
for arg; do
...
done
}
# Serialize:
typeset -g LS_COLORS_CACHE_FILE=$(mktemp)
(){
local -A namecolors modecolors
ls-color::init
typeset -p modecolors namecolors >| $LS_COLORS_CACHE_FILE
zcompile $LS_COLORS_CACHE_FILE
}
my-function(){
local -A namecolors modecolors
source $LS_COLORS_CACHE_FILE
...
}