X-Git-Url: https://git.phdru.name/?p=dotfiles.git;a=blobdiff_plain;f=.shellrc;h=a78a8e1efabecf156f72581d30dbfc8105d18143;hp=d211675f3e815c927eeab2c3ddbc9aadd08d39d8;hb=HEAD;hpb=1fe03c0fd5033da2ab6976f293e700920ba163e6 diff --git a/.shellrc b/.shellrc index d211675..9f9242a 100644 --- a/.shellrc +++ b/.shellrc @@ -29,144 +29,184 @@ esac case "$HOME" in - /home/*) - if [ -L /home ]; then - START_DIR="`pwd`" && - cd "$HOME" && - HOME="`pwd`" && - cd "$START_DIR" - fi - ;; + /home/*) + if [ -L /home ]; then + START_DIR="`pwd`" && + cd "$HOME" && + HOME="`pwd`" && + cd "$START_DIR" + fi + ;; esac if test -n "$KSH_VERSION" -o -n "$FCEDIT"; then - back() { cd - "$@"; } - j() { jobs; } -fi - -if test -n "$BASH_VERSION"; then - if [ -r "$HOME"/admin/prog/bash_prompt ]; then - . "$HOME"/admin/prog/bash_prompt - set_prompts - unset set_prompts - else - PS1="${debian_chroot:+($debian_chroot)}\u@\h:\W \$SHLVL\\$ " - fi + back() { cd - "$@"; } + j() { jobs; } fi # clear screen and history, logout chlo() { clear; cd; >$HISTFILE; unset HISTFILE; history -c; logout || exit; } +if [ -n "$STY" -a "$WINDOW" != 0 ]; then + #unset MAILCHECK everywhere except for the 1st GNU screen window + unset MAILCHECK +fi + +if test -x /usr/bin/git >/dev/null 2>&1; then + # chdir to a directory + cdgitpath() { + if [ $# -ne 1 ]; then + echo "Usage: cdgitpath path_key" >&2 + return 1 + fi + + path_key="$1" + if [ -z "$path_key" ]; then + echo "Usage: cdgitpath path_key" >&2 + return 1 + fi + + path_url="`git config --get --path $path_key`" + if echo "$path_url" | grep -q '^file:/'; then + path_url="`echo \"$path_url\" | sed 's@^file:/\+@/@'`" + fi + cd "$path_url" + } + + # See https://stackoverflow.com/a/77266926/7976758 + + cd_worktree() { + if [ $# -ne 1 ]; then + echo "Usage: cd_worktree " >&2 + return 1 + fi + path="$(git worktree list | grep -F "$1" | awk '{print $1}')" + if [ -n "$path" ]; then + cd "$path" + else + echo "Cannot find path for branch '$1'" >&2 + return 1 + fi + } +fi include() { - cfg="$1" - shift - if [ -f "./$cfg" -a -r "./$cfg" ]; then - echo "Reading config file \`$cfg'" 1>&2 - . "./$cfg" "$@" - elif [ -f "$HOME/lib/config/$cfg" -a -r "$HOME/lib/config/$cfg" ]; then - echo "Reading config file \`$HOME/lib/config/$cfg'" 1>&2 - . "$HOME/lib/config/$cfg" "$@" - else - echo "Cannot find config file \`$cfg'" 1>&2 - fi + cfg="$1" + shift + if [ -f "./$cfg" -a -r "./$cfg" ]; then + echo "Reading config file \`$cfg'" 1>&2 + . "./$cfg" "$@" + elif [ -f "$HOME/lib/config/$cfg" -a -r "$HOME/lib/config/$cfg" ]; then + echo "Reading config file \`$HOME/lib/config/$cfg'" 1>&2 + . "$HOME/lib/config/$cfg" "$@" + else + echo "Cannot find config file \`$cfg'" 1>&2 + fi } [ "`type -t mc`" = alias ] && unalias mc mc() { - if [ -n "$SLOWTERM" ]; then - MC_SLOW="--slow" - fi - - case "$TERM" in - screen*) # screen, screen.rxvt - MC_XTERM="-x" - ;; - esac - - #TMPDIR="$HOME"/tmp - #export TMPDIR - - MC_FOUND=NO - - for wrapper in \ - /usr/local/share/mc/bin/mc-wrapper.sh \ - /usr/local/libexec/mc/mc-wrapper.sh \ - /usr/share/mc/bin/mc-wrapper.sh; do - if [ -r $wrapper ]; then - . $wrapper $MC_SLOW $MC_XTERM "$@" - rc=$? - MC_FOUND=YES - break - fi - done - - if [ $MC_FOUND = NO ]; then - for mc in /usr/local/bin/mc /usr/bin/mc; do - if [ -x $mc ]; then - MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" - if [ ! -d MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" ]; then - MC_TMP_DIR="${TMPDIR-/tmp}" - fi - MC_PWD_FILE="$MC_TMP_DIR/mc.pwd.$$" - mc_type="`mc_type.py $mc`" - if [ "$mc_type" = old ]; then - $mc -P $MC_SLOW $MC_XTERM "$@" > "$MC_PWD_FILE" - elif [ "$mc_type" = new ]; then - $mc -P "$MC_PWD_FILE" $MC_SLOW $MC_XTERM "$@" - else - continue - fi + if [ -n "$SLOWTERM" ]; then + MC_SLOW="--slow" + fi + + case "$TERM" in + screen*) # screen, screen.rxvt + MC_XTERM="-x" + ;; + esac + + #TMPDIR="$HOME"/tmp + #export TMPDIR + + MC_FOUND=NO + + for wrapper in \ + /usr/local/share/mc/bin/mc-wrapper.sh \ + /usr/local/libexec/mc/mc-wrapper.sh \ + /usr/share/mc/bin/mc-wrapper.sh; do + if [ -r $wrapper ]; then + . $wrapper $MC_SLOW $MC_XTERM "$@" rc=$? MC_FOUND=YES - cd "`cat \"$MC_PWD_FILE\"`" && /bin/rm "$MC_PWD_FILE" break - fi - done - fi + fi + done + + if [ $MC_FOUND = NO ]; then + for mc in /usr/local/bin/mc /usr/bin/mc; do + if [ -x $mc ]; then + MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" + if [ ! -d MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" ]; then + MC_TMP_DIR="${TMPDIR-/tmp}" + fi + MC_PWD_FILE="$MC_TMP_DIR/mc.pwd.$$" + mc_type="`mc_type.py $mc`" + if [ "$mc_type" = old ]; then + $mc -P $MC_SLOW $MC_XTERM "$@" > "$MC_PWD_FILE" + elif [ "$mc_type" = new ]; then + $mc -P "$MC_PWD_FILE" $MC_SLOW $MC_XTERM "$@" + else + continue + fi + rc=$? + MC_FOUND=YES + cd "`cat \"$MC_PWD_FILE\"`" && /bin/rm "$MC_PWD_FILE" + break + fi + done + fi - if [ $MC_FOUND = NO ]; then - echo "Cannot find mc-wrapper.sh or mc" >&2 - rc=1 - fi + if [ $MC_FOUND = NO ]; then + echo "Cannot find mc-wrapper.sh or mc" >&2 + rc=1 + fi - unset MC_FOUND MC_PWD_FILE MC_SLOW MC_TMP_DIR MC_XTERM + unset wrapper MC_FOUND MC_PWD_FILE MC_SLOW MC_TMP_DIR MC_XTERM - return $rc + return $rc } mkcd() { - if [ $# -ne 1 ]; then - echo "Usage: mkcd directory_name" >&2 - elif [ -d "$1" ]; then - cd "$1" - elif [ -e "$1" ]; then - echo "Error: $1 is a file" >&2 - else - mkdir -p "$1" && cd "$1" - fi + if [ $# -ne 1 ]; then + echo "Usage: mkcd directory_name" >&2 + elif [ -d "$1" ]; then + cd "$1" + elif [ -e "$1" ]; then + echo "Error: $1 is a file" >&2 + else + mkdir -p "$1" && cd "$1" + fi } if which tmux >/dev/null 2>&1; then - tmux() { - case "$TERM" in - rxvt) - TERM=rxvt-unicode command tmux "$@" - ;; - - *) - command tmux "$@" - ;; - esac - } + tmux() { + case "$TERM" in + rxvt) + TERM=rxvt-unicode command tmux "$@" + ;; + + *) + command tmux "$@" + ;; + esac + } fi +vim() { + command vim "$@" + rc=$? + cd "`cat \"$HOME/tmp/vim/cwd\"`" && /bin/rm "$HOME/tmp/vim/cwd" && + return $rc +} + + if [ "$SHLVL" -eq 1 ] && which startx >/dev/null 2>&1; then - X() { startx >> .Xserver.log 2>&1; cyr; rm -f .Xauthority; } + X() { startx >> .Xserver.log 2>&1; cyr; /bin/rm -f .Xauthority; } fi x() { exit; }