#!/bin/bash function rgf { if [[ "$1" == "--help" ]]; then # shellcheck disable=SC2140 echo "Finde alle Dateien die "\$1" im Namen haben." echo "" echo " Usage: rgf " return 0 fi if [ -z "$1" ]; then echo "[ERROR] Suchbegriff fehlt..." return 1 fi if command -v rg >/dev/null ; then rg --ignore-case --files --hidden --glob=!.git/ --*"$1"* else echo "[INFO] ripgrep ist nicht installiert... suche mit 'find'" find . -type f -not -path '*/\.git/*' -name -- *"$1"* fi } function rgi { if [[ "$1" == "--help" ]]; then # shellcheck disable=SC2140 echo "Finde alle Dateien die "\$1" im Inhalt haben." echo "" echo " Usage: rgi " return 0 fi if [ -z "$1" ]; then echo "[ERROR] Suchbegriff fehlt..." return 1 fi if command -v rg >/dev/null ; then rg --ignore-case --hidden --glob=!.git/ "$1" else echo "[INFO] ripgrep ist nicht installiert... suche mit 'grep'" grep --recursive --line-number --ignore-case --exclude-dir=".git" "$1" . fi } function ssh { # benennt das aktuelle tmux-windows nach dem ssh-ziel # baut ssh-verbindung auf if [ -n "${TMUX}" ]; then tmux rename-window "${@: -1}" fi command ssh "$@" if [ -n "${TMUX}" ]; then tmux rename-window "$(hostname -f)" fi } function gcm { if [ -z "$1" ]; then echo "Commit-Message fehlt, setze Default-Message..." git commit -s -m "changed Files: $(git diff --name-only --staged)" else # übergibt alle argumente an git commit -m als commit nachricht git commit -s -m "$*" fi } function gc { case "$1" in --help | -h) cat <>> Create new branch "'"$2"'"') || (git checkout --quiet "$2" > /dev/null 2>&1 && echo '>>> Branch already exists, checking out... ') ;; *) if [ -n "$1" ] ; then (echo ">>> Try local checkout" && git checkout --quiet "$1" > /dev/null 2>&1) || (echo ">>> Try remote checkout" && git checkout --quiet -b "$1" origin/"$1" > /dev/null 2>&1 || echo ">>> Unkown branch!") else (git checkout --quiet master > /dev/null 2>&1 && echo '>>> Try checking out master') || (git checkout --quiet main > /dev/null 2>&1 && echo '>>> Try checking out main') || (git checkout --quiet release > /dev/null 2>&1 && echo '>>> Try checking out release') fi esac } function glogs { # https://git-scm.com/docs/pretty-formats # https://stackoverflow.com/questions/3631005/git-log-tabular-formatting # https://stackoverflow.com/questions/7736781/how-to-make-git-log-not-prompt-to-continue if [ -z "$1" ]; then ncommits=30; else ncommits="$1"; fi; git log --pretty=format:'%C(auto) %<|(16,trunc)%h %Cred %G?%Creset %<|(60,trunc)%s %<(20,trunc)%Cgreen%cr%Creset %<(15,trunc)%Cblue%an%Creset %Cred%D' --graph --all -"$ncommits" } function gp { git pull "$@" } function mdtoc { grep --recursive --include="*.md" ^# | sort --version-sort --field-separator=":" | awk 'BEGIN {FS=":"}{print $2 "&&" $1}' | column --table --separator "&&" --table-truncate 1,2 } # "scrolle" durch die commit-history ghist() { # shellcheck disable=2155 local total_commits=$(git rev-list HEAD --count) local current_commit=$total_commits show_commit_diff() { if [ "$current_commit" -le "$total_commits" ] && [ "$current_commit" -ge 1 ]; then # shellcheck disable=2155 local commit_hash=$(git rev-list --reverse HEAD | sed -n "${current_commit}p") git --no-pager show "$commit_hash" fi } while true; do clear # Clear the terminal show_commit_diff # Display navigation options echo "-----------------------------------------------------------" echo "Navigation: N - Next Commit, P - Previous Commit, Q - Quit" echo "-----------------------------------------------------------" read -r -n1 -s option case $option in p|P) # shellcheck disable=2086 if [ $current_commit -gt 1 ]; then ((current_commit--)) fi ;; n|N) # shellcheck disable=2086 if [ $current_commit -lt $total_commits ]; then ((current_commit++)) fi ;; q|Q) break ;; *) echo "Invalid option" ;; esac done }