commit:     3b76030b38cd62f190cfda1203192af26ce7fb4f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 30 19:33:08 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jun 30 19:34:17 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3b76030b

sys-apps/less: add 661, lesspipe fixes

* Add 661
* lesspipe: respect NO_COLOR
* lesspipe: fix documentation for colour default
* lesspipe: choose a better colour theme ('rrt'). Another considered option
  was 'igor'.

Closes: https://bugs.gentoo.org/924627
Signed-off-by: Sam James <sam <AT> gentoo.org>

 sys-apps/less/Manifest                             |   1 +
 sys-apps/less/files/lesspipe-r4.sh                 | 342 +++++++++++++++++++++
 .../less/{less-9999.ebuild => less-661.ebuild}     |   6 +-
 sys-apps/less/less-9999.ebuild                     |   6 +-
 4 files changed, 349 insertions(+), 6 deletions(-)

diff --git a/sys-apps/less/Manifest b/sys-apps/less/Manifest
index 89d58fe3f561..62c721c725b9 100644
--- a/sys-apps/less/Manifest
+++ b/sys-apps/less/Manifest
@@ -1,2 +1,3 @@
 DIST less-633.tar.gz 375733 BLAKE2B 
e9df180794af365f86734c6b8fde766c1bba42b111717ee5e1cf11001fc7ec3d78910db9bb7c51a76816086f599808b1b60f514011ec40e37650d6bc4f8b3d5c
 SHA512 
a29aaf72abca07fb29d12f218bbd422a39e3898b3d53e8dbd5265ae47ecf68b88c3381aa3a9bf7caa8db1e2d8e2c138b333f0d69fddd4cf014e39118c53f7fb1
 DIST less-643.tar.gz 592291 BLAKE2B 
6dc60dc2e8db05afdae466877a1d26a3008ff5378bbbf2fbdf9efc4f87c0fcfde5703d44a24d4355c98d3a5f438bdb51173150f2a69f801d9c8e4a7401d71b53
 SHA512 
6a324ac54e22429ac652dc303bc1fe48933555d1cbf8ad7ecf345940910c014fef9551a3219743cfb7115e356b5841ae97d6ce62e7a1ba1e3300d243efca34d9
+DIST less-661.tar.gz 648198 BLAKE2B 
c1fa9a7a646fcc1203945e00c35fe41bddef0c564e30f120a37e417ecd5c60d234e0253a2e18123508dd5c0313bce346dc7752e96cdc1b067bd07a2a39818b42
 SHA512 
49d81ff9e79d43ce0271490e3bffd590b4aed5fcb387bc8eb3128de99e5b5a5ede2e2818b546f6e3a140fa6261f1de3dfba1231f7ff7ef18502bb7030eaea1b5

diff --git a/sys-apps/less/files/lesspipe-r4.sh 
b/sys-apps/less/files/lesspipe-r4.sh
new file mode 100644
index 000000000000..02a610d010ff
--- /dev/null
+++ b/sys-apps/less/files/lesspipe-r4.sh
@@ -0,0 +1,342 @@
+#!/bin/bash
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Preprocessor for 'less'. Used when this environment variable is set:
+# LESSOPEN="|lesspipe %s"
+
+# TODO: handle compressed files better
+
+[[ -n ${LESSDEBUG+set} ]] && set -x
+
+trap 'exit 0' PIPE
+
+guesscompress() {
+       case "$1" in
+               *.gz|*.z)   echo "gunzip -c" ;;
+               *.bz2|*.bz) echo "bunzip2 -c" ;;
+               *.lz)       echo "lzip -dc" ;;
+               *.lzma)     echo "unlzma -c" ;;
+               *.lzo)      echo "lzop -dc" ;;
+               *.xz)       echo "xzdec" ;;
+               *.zst)      echo "zstdcat" ;;
+               *)          echo "cat" ;;
+       esac
+}
+
+crl_filter() {
+       if command -v certtool &>/dev/null; then
+               certtool --crl-info --text --infile "$1"
+       else
+               openssl crl -hash -text -noout -in "$1"
+       fi
+}
+
+csr_filter() {
+       if command -v certtool &>/dev/null; then
+               certtool --crq-info --text --infile "$1"
+       else
+               openssl req -text -noout -in "$1"
+       fi
+}
+
+crt_filter() {
+       if command -v certtool &>/dev/null; then
+               certtool --certificate-info --text --infile "$1"
+       else
+               openssl x509 -hash -text -noout -in "$1"
+       fi
+}
+
+jks_filter() {
+       if command -v keytool &>/dev/null; then
+               keytool -list -keystore "$1"
+       else
+               cat "$1"
+       fi
+}
+
+p12_filter() {
+       openssl pkcs12 -nokeys -info -in "$1"
+}
+
+lesspipe_file() {
+       local out=$(file -L -- "$1")
+       local suffix
+       case ${out} in
+               *" 7-zip archive"*) suffix="7z";;
+               *" ar archive"*)    suffix="a";;
+               *" CAB-Installer"*) suffix="cab";;
+               *" cpio archive"*)  suffix="cpio";;
+               *" ELF "*)          suffix="elf";;
+               *" LHa"*archive*)   suffix="lha";;
+               *" troff "*)        suffix="man";;
+               *" script text"*)   suffix="sh";;
+               *" shared object"*) suffix="so";;
+               *" tar archive"*)   suffix="tar";;
+               *" Zip archive"*)   suffix="zip";;
+               *": data")          hexdump -C -- "$1"; return 0;;
+               *)                  return 1;;
+       esac
+       lesspipe "$1" ".${suffix}"
+       return 0
+}
+
+lesspipe() {
+       local match=$2
+       [[ -z ${match} ]] && match=$1
+
+       local DECOMPRESSOR=$(guesscompress "${match}")
+
+       # User filters
+       if [[ -x ~/.lessfilter ]] ; then
+               ~/.lessfilter "$1" && exit 0
+       fi
+
+       # System filters
+       shopt -s nullglob
+       local f
+       for f in "${XDG_CONFIG_HOME:-~/.config}"/lessfilter.d/* 
/etc/lessfilter.d/* /usr/lib/lessfilter.d/*; do
+               if [[ -x ${f} ]]; then
+                       "${f}" "$1" && exit 0
+               fi
+       done
+       shopt -u nullglob
+
+       local ignore
+       for ignore in ${LESSIGNORE} ; do
+               [[ ${match} == *.${ignore} ]] && exit 0
+       done
+
+       # Handle non-regular file types.
+       if [[ -d $1 ]] ; then
+               ls -alF -- "$1"
+               return
+       elif [[ ! -f $1 ]] ; then
+               # Only return if the stat passes.  This is needed to handle 
pseudo
+               # arguments like URIs.
+               stat -- "$1" && return
+       fi
+
+       case "${match}" in
+
+       ### Doc files ###
+       *.[0-9n]|*.man|\
+       *.[0-9n].bz2|*.man.bz2|\
+       *.[0-9n].gz|*.man.gz|\
+       *.[0-9n].lzma|*.man.lzma|\
+       *.[0-9n].xz|*.man.xz|\
+       *.[0-9n].zst|*.man.zst|\
+       *.[0-9][a-z].gz|*.[0-9][a-z].gz)
+               local out=$(${DECOMPRESSOR} -- "$1" | file -)
+               case ${out} in
+                       *troff*)
+                               # Need to make sure we pass path to man or it 
will try
+                               # to locate "$1" in the man search paths
+                               if [[ $1 == /* ]] ; then
+                                       man -- "$1"
+                               else
+                                       man -- "./$1"
+                               fi
+                               ;;
+                       *text*)
+                               ${DECOMPRESSOR} -- "$1"
+                               ;;
+                       *)
+                               # We could have matched a library (libc.so.6), 
so let
+                               # `file` figure out what the hell this thing is
+                               lesspipe_file "$1"
+                               ;;
+               esac
+               ;;
+       *.dvi)      dvi2tty "$1" ;;
+       *.ps)       ps2ascii "$1" || pstotext "$1" ;;
+       *.pdf)      pdftotext "$1" - || ps2ascii "$1" || pstotext "$1" ;;
+       *.doc)      antiword "$1" || catdoc "$1" ;;
+       *.rtf)      unrtf --nopict --text "$1" ;;
+       *.conf|*.txt|*.log) ;; # force less to work on these directly #150256
+       *.json)     python -mjson.tool "$1" ;;
+
+       ### URLs ###
+       ftp://*|http://*|https://|*.htm|*.html)
+               for b in elinks links2 links lynx ; do
+                       ${b} -dump "$1" && exit 0
+               done
+               html2text -style pretty "$1"
+               ;;
+
+       ### Tar files ###
+       *.tar|\
+       *.tar.bz2|*.tar.bz|*.tar.gz|*.tar.z|*.tar.zst|\
+       *.tar.lz|*.tar.tlz|\
+       *.tar.lzma|*.tar.xz)
+               ${DECOMPRESSOR} -- "$1" | tar tvvf -;;
+       *.tbz2|*.tbz|*.tgz|*.tlz|*.txz)
+               lesspipe "$1" "$1.tar.${1##*.t}" ;;
+
+       ### Misc archives ###
+       *.bz2|\
+       *.gz|*.z|\
+       *.zst|\
+       *.lz|\
+       *.lzma|*.xz)  ${DECOMPRESSOR} -- "$1" ;;
+       *.rpm)        rpm -qpivl --changelog -- "$1" || rpm2tar -O "$1" | tar 
tvvf -;;
+       *.cpi|*.cpio) cpio -itv < "$1" ;;
+       *.ace)        unace l "$1" ;;
+       *.arc)        arc v "$1" ;;
+       *.arj)        arj l -- "$1" || unarj l "$1" ;;
+       *.cab)        cabextract -l -- "$1" ;;
+       *.lha|*.lzh)  lha v "$1" ;;
+       *.zoo)        zoo -list "$1" || unzoo -l "$1" ;;
+       *.7z|*.exe)   7z l -- "$1" || 7za l -- "$1" || 7zr l -- "$1" ;;
+       *.a)          ar tv "$1" ;;
+       *.elf)        readelf -a -W -- "$1" ;;
+       *.so)         readelf -h -d -s -W -- "$1" ;;
+       *.mo|*.gmo)   msgunfmt -- "$1" ;;
+
+       *.rar|.r[0-9][0-9])  unrar l -- "$1" ;;
+
+       *.jar|*.war|*.ear|*.xpi|*.zip)
+               unzip -v "$1" || miniunzip -l "$1" || miniunz -l "$1" || 
zipinfo -v "$1"
+               ;;
+
+       *.deb|*.udeb)
+               if type -P dpkg > /dev/null ; then
+                       dpkg --info "$1"
+                       dpkg --contents "$1"
+               else
+                       ar tv "$1"
+                       ar p "$1" data.tar.gz | tar tzvvf -
+               fi
+               ;;
+
+       ### Filesystems ###
+       *.squashfs)   unsquashfs -s "$1" && unsquashfs -ll "$1" ;;
+
+       ### Media ###
+       
*.bmp|*.gif|*.jpeg|*.jpg|*.ico|*.pcd|*.pcx|*.png|*.ppm|*.tga|*.tiff|*.tif|*.webp)
+               identify -verbose -- "$1" || file -L -- "$1"
+               ;;
+       
*.asf|*.avi|*.flv|*.mkv|*.mov|*.mp4|*.mpeg|*.mpg|*.qt|*.ram|*.rm|*.webm|*.wmv)
+               midentify "$1" || file -L -- "$1"
+               ;;
+       *.mp3)        mp3info "$1" || id3info "$1" ;;
+       *.ogg)        ogginfo "$1" ;;
+       *.flac)       metaflac --list "$1" ;;
+       *.torrent)    torrentinfo "$1" || torrentinfo-console "$1" || ctorrent 
-x "$1" ;;
+       *.bin|*.cue|*.raw)
+               # not all .bin/.raw files are cd images #285507
+               # fall back to lesspipe_file if .cue doesn't exist, or if
+               # cd-info failed to parse things sanely
+               [[ -e ${1%.*}.cue ]] \
+                       && cd-info --no-header --no-device-info "$1" \
+                       || lesspipe_file "$1"
+               ;;
+       *.iso)
+               iso_info=$(isoinfo -d -i "$1")
+               echo "${iso_info}"
+               # Joliet output overrides Rock Ridge, so prefer the better Rock
+               case ${iso_info} in
+                       *$'\n'"Rock Ridge"*) iso_opts="-R";;
+                       *$'\n'"Joliet"*)     iso_opts="-J";;
+                       *)                   iso_opts="";;
+               esac
+               isoinfo -l ${iso_opts} -i "$1"
+               ;;
+
+       ### Encryption stuff ###
+       *.crl) crl_filter "$1" ;;
+       *.csr) csr_filter "$1" ;;
+       *.crt|*.pem) crt_filter "$1" ;;
+       *.jks) jks_filter "$1" ;;
+       *.p12|*.pfx) p12_filter "$1" ;;
+
+# May not be such a good idea :)
+#      ### Device nodes ###
+#      /dev/[hs]d[a-z]*)
+#              fdisk -l "${1:0:8}"
+#              [[ $1 == *hd* ]] && hdparm -I "${1:0:8}"
+#              ;;
+
+       ### Everything else ###
+       *)
+               case $(( recur++ )) in
+                       # Maybe we didn't match due to case issues ...
+                       0) lesspipe "$1" "$(echo "$1" | LC_ALL=C tr '[:upper:]' 
'[:lower:]')" ;;
+
+                       # Maybe we didn't match because the file is named weird 
...
+                       1) lesspipe_file "$1" ;;
+               esac
+
+               # So no matches from above ... finally fall back to an external
+               # coloring package.  No matching here so we don't have to worry
+               # about keeping in sync with random packages.  Any coloring tool
+               # you use should not output errors about unsupported files to
+               # stdout.  If it does, it's your problem.
+
+               # Allow people to flip color off if they dont want it
+               case ${LESSCOLOR} in
+                       always)                   LESSCOLOR=2;;
+                       [yY][eE][sS]|[yY]|1|true) LESSCOLOR=1;;
+                       [nN][oO]|[nN]|0|false)    LESSCOLOR=0;;
+                       *)                        LESSCOLOR=1;;
+               esac
+
+               [[ -n ${NO_COLOR} ]] && LESSCOLOR=0
+
+               if [[ ${LESSCOLOR} != "0" ]] && [[ -n 
${LESSCOLORIZER=pygmentize -O style=rrt} ]] ; then
+                       # 2: Only colorize if user forces it ...
+                       # 1: ... or we know less will handle raw codes -- this 
will
+                       #    not detect -seiRM, so set LESSCOLORIZER yourself
+                       if [[ ${LESSCOLOR} == "2" ]] || [[ " ${LESS} " == *" 
-"[rR]" "* ]] ; then
+                               LESSQUIET=true ${LESSCOLORIZER} "$1"
+                       fi
+               fi
+
+               # Nothing left to do but let less deal
+               exit 0
+               ;;
+       esac
+}
+
+if [[ $# -eq 0 ]] ; then
+       echo "Usage: lesspipe <file>"
+elif [[ $1 == "-V" || $1 == "--version" ]] ; then
+       cat <<-EOF
+               lesspipe (git)
+               Copyright 1999-2024 Gentoo Authors
+               Mike Frysinger <[email protected]>
+                    (with plenty of ideas stolen from other projects/distros)
+
+       EOF
+       less -V
+elif [[ $1 == "-h" || $1 == "--help" ]] ; then
+       cat <<-EOF
+               lesspipe: preprocess files before sending them to less
+
+               Usage: lesspipe <file>
+
+               lesspipe specific settings:
+                 LESSCOLOR env     - toggle colorizing of output 
(no/yes/always; default: yes)
+                 LESSCOLORIZER env - program used to colorize output (default: 
pygmentize)
+                 LESSIGNORE        - list of extensions to ignore (don't do 
anything fancy)
+
+               You can create per-user filters as well by creating the 
executable file:
+                 ~/.lessfilter
+               One argument is passed to it: the file to display.  The script 
should exit 0
+               to indicate it handled the file, or non-zero to tell lesspipe 
to handle it.
+
+               To use lesspipe, simply add to your environment:
+                 export LESSOPEN="|lesspipe %s"
+
+               For colorization, install dev-python/pygments for the 
pygmentize program. Note,
+               if using alternative code2color from sys app-text/lesspipe you 
may run out of
+               memory due to #188835.
+
+               Run 'less --help' or 'man less' for more info.
+       EOF
+else
+       recur=0
+       [[ -z ${LESSDEBUG+set} ]] && exec 2>/dev/null
+       lesspipe "$1"
+fi

diff --git a/sys-apps/less/less-9999.ebuild b/sys-apps/less/less-661.ebuild
similarity index 94%
copy from sys-apps/less/less-9999.ebuild
copy to sys-apps/less/less-661.ebuild
index 186eda3b6814..8a2a1fa41f36 100644
--- a/sys-apps/less/less-9999.ebuild
+++ b/sys-apps/less/less-661.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -78,12 +78,12 @@ src_install() {
        keepdir /usr/lib/lessfilter.d
        keepdir /etc/lessfilter.d
 
-       newbin "${FILESDIR}"/lesspipe-r3.sh lesspipe
+       newbin "${FILESDIR}"/lesspipe-r4.sh lesspipe
        newenvd "${FILESDIR}"/less.envd 70less
 }
 
 pkg_preinst() {
-       optfeature "Colorized output supprt" dev-python/pygments
+       optfeature "Colorized output support" dev-python/pygments
 
        if has_version "<${CATEGORY}/${PN}-483-r1" ; then
                elog "The lesspipe.sh symlink has been dropped.  If you are 
still setting"

diff --git a/sys-apps/less/less-9999.ebuild b/sys-apps/less/less-9999.ebuild
index 186eda3b6814..8a2a1fa41f36 100644
--- a/sys-apps/less/less-9999.ebuild
+++ b/sys-apps/less/less-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -78,12 +78,12 @@ src_install() {
        keepdir /usr/lib/lessfilter.d
        keepdir /etc/lessfilter.d
 
-       newbin "${FILESDIR}"/lesspipe-r3.sh lesspipe
+       newbin "${FILESDIR}"/lesspipe-r4.sh lesspipe
        newenvd "${FILESDIR}"/less.envd 70less
 }
 
 pkg_preinst() {
-       optfeature "Colorized output supprt" dev-python/pygments
+       optfeature "Colorized output support" dev-python/pygments
 
        if has_version "<${CATEGORY}/${PN}-483-r1" ; then
                elog "The lesspipe.sh symlink has been dropped.  If you are 
still setting"

Reply via email to