diff options
-rw-r--r-- | README.markdown | 2 | ||||
-rw-r--r-- | sh/shrc.d/lore.sh | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/README.markdown b/README.markdown index c59f8745..99151608 100644 --- a/README.markdown +++ b/README.markdown @@ -184,6 +184,8 @@ in `sh/shrc.d` to be loaded by any POSIX interactive shell. Those include: * `ls()` tries to apply color to `ls(1)` for interactive use if available. * `la()` runs `ls -A` if it can, or `ls -a` otherwise. * `ll()` runs `ls -Al` if it can, or `ls -al` otherwise. + * `lore(1)` runs the output of `ls(1)` with an `-lA` or `-la` switch + through your pager, using color if it can. * `mkcd()` creates a directory and changes into it. * `mysql()` allows shortcuts to MySQL configuration files stored in `~/.mysql`. diff --git a/sh/shrc.d/lore.sh b/sh/shrc.d/lore.sh new file mode 100644 index 00000000..2d7c0bec --- /dev/null +++ b/sh/shrc.d/lore.sh @@ -0,0 +1,28 @@ +# Pipe ls(1) output through PAGER; mostly to preserve coloring interactively +# through less(1), but it'll work fine with plain ls(1) and more(1) +lore() { + + # Add --color=always if the terminal has at least 8 colors; we have to add + # "always" to coax ls(1) into emitting colors even though it can tell its + # stdout isn't a terminal but a pager + [ -e "$HOME"/.cache/ls/color ] && + [ "$({ tput colors || tput Co ; } 2>/dev/null)" -ge 8 ] && + set -- --color=always "$@" + + # Prefer -A/--almost-all (exclude "." and "..") if available + if [ -e "$HOME"/.cache/ls/almost-all ] ; then + set -- -Al "$@" + else + set -- -al "$@" + fi + + # Run whatever `ls` gives us; it might be our function wrapper; that's OK + ls "$@" | + + # Run the appropriate pager; if it's less(1), we can tack on -R (though my + # ~/.lesskey does this anyway) + case $PAGER in + less) "$PAGER" -R ;; + *) "$PAGER" ;; + esac +} |