From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-apps/less/, sys-apps/less/files/
Date: Sun, 30 Jun 2024 19:35:59 +0000 (UTC) [thread overview]
Message-ID: <1719776057.3b76030b38cd62f190cfda1203192af26ce7fb4f.sam@gentoo> (raw)
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 <vapier@gentoo.org>
+ (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"
next reply other threads:[~2024-06-30 19:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-30 19:35 Sam James [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-08-13 3:05 [gentoo-commits] repo/gentoo:master commit in: sys-apps/less/, sys-apps/less/files/ Sam James
2020-10-20 21:00 Thomas Deutschmann
2019-06-12 8:47 Lars Wendler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1719776057.3b76030b38cd62f190cfda1203192af26ce7fb4f.sam@gentoo \
--to=sam@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox