From 399644e47874bff147afb19c89228901ac39340e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 21:40:15 +0200 Subject: Adding upstream version 6.05.01. Signed-off-by: Daniel Baumann --- scripts/bash_aliases | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 scripts/bash_aliases (limited to 'scripts/bash_aliases') diff --git a/scripts/bash_aliases b/scripts/bash_aliases new file mode 100644 index 0000000..e461707 --- /dev/null +++ b/scripts/bash_aliases @@ -0,0 +1,153 @@ +# SPDX-License-Identifier: GPL-2.0-only +######################################################################## +# +# (C) Copyright 2020-2022, Alejandro Colomar +# These functions are free software; you can redistribute them and/or +# modify them under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2. +# +# These functions are distributed in the hope that they will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details +# (http://www.gnu.org/licenses/gpl-2.0.html). +# +######################################################################## + +######################################################################## +# Exit status + +EX_USAGE=64; + +######################################################################## +# C + +# sed_rm_ccomments() removes C comments. +# It can't handle mixed //... and /*...*/ comments. +# Use as a filter (see man_lsfunc() in this file). + +sed_rm_ccomments() +{ + perl -p -e 's%/\*.*?\*/%%g' \ + |sed -E '\%/\*%, \%\*/% {\%(\*/|/\*)%!d}' \ + |sed -E '\%/\*% {s%/\*.*%%; n; s%.*\*/%%;}' \ + |sed -E '\%/\*% {s%/\*.*%%; n; s%.*\*/%%;}' \ + |sed 's%//.*%%'; +} + +######################################################################## +# Linux man-pages + +# man_section() prints specific manual page sections (DESCRIPTION, SYNOPSIS, +# ...) of all manual pages in a directory (or in a single manual page file). +# Usage example: .../man-pages$ man_section man2 SYNOPSIS 'SEE ALSO'; + +man_section() +{ + if [ $# -lt 2 ]; then + >&2 echo "Usage: ${FUNCNAME[0]}
..."; + return $EX_USAGE; + fi + + local page="$1"; + shift; + local sect="$*"; + + find "$page" -type f \ + |xargs wc -l \ + |grep -v -e '\b1 ' -e '\btotal\b' \ + |awk '{ print $2 }' \ + |sort \ + |while read -r manpage; do + (sed -n '/^\.TH/,/^\.SH/{/^\.SH/!p}' <"$manpage"; + for s in $sect; do + <"$manpage" \ + sed -n \ + -e "/^\.SH $s/p" \ + -e "/^\.SH $s/,/^\.SH/{/^\.SH/!p}"; + done;) \ + |mandoc -Tutf8 2>/dev/null \ + |col -pbx; + done; +} + +# man_lsfunc() prints the name of all C functions declared in the SYNOPSIS +# of all manual pages in a directory (or in a single manual page file). +# Each name is printed in a separate line +# Usage example: .../man-pages$ man_lsfunc man2; + +man_lsfunc() +{ + if [ $# -lt 1 ]; then + >&2 echo "Usage: ${FUNCNAME[0]} ..."; + return $EX_USAGE; + fi + + for arg in "$@"; do + man_section "$arg" 'SYNOPSIS'; + done \ + |sed_rm_ccomments \ + |pcregrep -Mn '(?s)^ [\w ]+ \**\w+\([\w\s(,)[\]*]*?(...)?\s*\); *$' \ + |grep '^[0-9]' \ + |sed -E 's/syscall\(SYS_(\w*),?/\1(/' \ + |sed -E 's/^[^(]+ \**(\w+)\(.*/\1/' \ + |uniq; +} + +# man_lsvar() prints the name of all C variables declared in the SYNOPSIS +# of all manual pages in a directory (or in a single manual page file). +# Each name is printed in a separate line +# Usage example: .../man-pages$ man_lsvar man3; + +man_lsvar() +{ + if [ $# -lt 1 ]; then + >&2 echo "Usage: ${FUNCNAME[0]} ..."; + return $EX_USAGE; + fi + + for arg in "$@"; do + man_section "$arg" 'SYNOPSIS'; + done \ + |sed_rm_ccomments \ + |pcregrep -Mv '(?s)^ [\w ]+ \**\w+\([\w\s(,)[\]*]+?(...)?\s*\); *$' \ + |pcregrep -Mn \ + -e '(?s)^ +extern [\w ]+ \**\(\*+[\w ]+\)\([\w\s(,)[\]*]+?\s*\); *$' \ + -e '^ +extern [\w ]+ \**[\w ]+; *$' \ + |grep '^[0-9]' \ + |grep -v 'typedef' \ + |sed -E 's/^[0-9]+: +extern [^(]+ \**\(\*+(\w* )?(\w+)\)\(.*/\2/' \ + |sed 's/^[0-9]\+: \+extern .* \**\(\w\+\); */\1/' \ + |uniq; +} + +# pdfman() renders a manual page in PDF +# Usage example: .../man-pages$ pdfman man2/membarrier.2; + +pdfman() +{ + if [ $# -eq 0 ]; then + >&2 echo "Usage: ${FUNCNAME[0]} [man(1) options] [section] page"; + return $EX_USAGE; + fi; + + local tmp="$(mktemp -t "${!###*/}.XXXXXX")"; + + man -Tps "$@" \ + |ps2pdf - - \ + >"$tmp"; + xdg-open "$tmp"; +} + +# man_gitstaged prints a list of all files with changes staged for commit +# (basename only if the files are within ), separated by ", ". +# Usage example: .../man-pages$ git commit -m "$(man_gitstaged): msg"; + +man_gitstaged() +{ + git diff --staged --name-only \ + |sed 's/$/, /' \ + |sed 's%.*/%%' \ + |tr -d '\n' \ + |sed 's/, $//' +} -- cgit v1.2.3