ambevar-dotfiles/.shell.d/funs_rc

157 lines
3.5 KiB
Bash

## -*- mode:sh -*- #
################################################################################
## Shell -- Functions.
## Functions that can be useful outside a shell (like in Emacs or Ranger) should
## be written in stand-alone scripts instead.
## Colored man pager.
man () {
# Justify man pager to current window size.
local width=$(tput cols)
[ $width -gt $MANWIDTH ] && width=$MANWIDTH
# mb = ?
# md = bold (titles, commands)
# so = status bar
# us = italic (arguments, files)
env \
MANWIDTH=$width \
LESS_TERMCAP_mb=$(printf "\e[1;31m") \
LESS_TERMCAP_md=$(printf "\e[0;36m") \
LESS_TERMCAP_me=$(printf "\e[0m") \
LESS_TERMCAP_se=$(printf "\e[0m") \
LESS_TERMCAP_so=$(printf "\e[1;4;37m") \
LESS_TERMCAP_ue=$(printf "\e[0m") \
LESS_TERMCAP_us=$(printf "\e[0;33m") \
man "$@"
}
## Make directories and change into the first one.
mkcd () {
mkdir -p "$@"
cd "$1"
}
## Quick search. More flexible alternative: 'ff -di'.
search () {
find . -iname "*$1*"
}
## Vim-only: search the vim reference manual for a keyword.
## Usage: :h <keyword>
if command -v vim >/dev/null 2>&1; then
:h ()
{
vim --cmd ":silent help $@" --cmd "only";
}
fi
## Extended info
typex () {
local xpath cmd
if [ $# -lt 1 ]; then
echo >&2 "Provide an existing command as parameter."
return
fi
for i; do
cmd="$(command -v "$i" 2>/dev/null)"
if [ $? -ne 0 ]; then
echo "$i: does not exist"
elif [ -z "$(echo "$cmd" | grep ^/)" ]; then
type "$i"
else
xpath="$(type "$i" | cut -d' ' -f3)"
ls -l "$xpath"
file "$xpath" | cut -d':' -f2 | cut -b 2-
fi
done
}
# Automatically change the directory in shell after closing ranger.
# Compatible with ranger >= 1.4.2.
#
# To undo the effect of this function, you can type "cd -" to return to the
# original directory.
browse () {
local tempfile="$(mktemp)"
ranger --choosedir="$tempfile" "${@:-$(pwd)}"
if [ -f "$tempfile" ] && [ "$(cat -- "$tempfile")" != "$(echo -n `pwd`)" ]; then
cd -- "$(cat "$tempfile")"
fi
rm -f -- "$tempfile"
}
## Webcam testing with an mplayer-like player.
webcam () {
mpv --tv driver=v4l2:width=640:height=480:device=/dev/video0 tv://
}
##==============================================================================
## Pacman functions
if command -v pacman >/dev/null 2>&1; then
if command -v fzf >/dev/null 2>&1; then
pel() {
local result count
count=$#
while IFS= read -r i; do
set "$@" "$i"
done <<EOF
$(pacman -Qlq "$@" | grep -v "/$" | fzf)
EOF
shift $count
[ -n "$1" ] && $EDITOR "$@"
}
fi
## Get detailed file list for the specified packages, omitting folders.
pql () {
pacman -Ql "$@" | grep -v "/$"
}
pli () {
expac -t '%F %T' '%-8l %n' | sort -rn | head -${1:-30}
}
pacfiles () {
pacman -Qlq "$@" | grep -v '/$' | xargs du -cbh | sort -h
}
fi
##==============================================================================
## FreeBSD functions
if [ "$(uname)" = FreeBSD ]; then
## TODO: Useless FreeBSD function?
# mqs () {
# local str="$(echo "$@" | sed -E 's/[ \t]+/\\|/g')"
# (cd /usr/ports && make quicksearch name="$str")
# }
port-list () {
pkg_info | cut -f1 -d' '
}
port-size () {
pkg_info -Qsb "$@" | sed 's/\([^:]*\):\(.*\)/\2 KiB \1/g'
}
mcd () {
local DEST=$(pkg_search -r "$@" | head -n1 | awk '{print $2}')
cd -- "$DEST"
}
fi
##==============================================================================
## Luarocks functions
if command -v luarocks >/dev/null 2>&1; then
lri () {
sudo sh -c 'umask 022 && luarocks install $0 $@' "$@"
}
fi