X-Git-Url: https://git.phdru.name/?p=dotfiles.git;a=blobdiff_plain;f=.shellrc;h=051889d2a64e80a1ceded88d457126f8081809cf;hp=7004054bbe9e184070a82a74e9a8489cb9bbcb37;hb=HEAD;hpb=b6806f08ea520931307aabd1d9e5c0ad5370057c diff --git a/.shellrc b/.shellrc index 7004054..9f9242a 100644 --- a/.shellrc +++ b/.shellrc @@ -29,163 +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; } + back() { cd - "$@"; } + j() { jobs; } fi -if test -n "$BASH_VERSION" -a -z "$MC_SID"; then - if [ -r "$HOME"/admin/prog/bash_prompt ]; then - . "$HOME"/admin/prog/bash_prompt - set_prompts - unset set_prompts - else - OPS1="${debian_chroot:+($debian_chroot)}\u@\h:\W \$SHLVL\\$ " - fi -fi - -PS1="$OPS1" - # 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 test -n "$BASH_VERSION"; then - MC_SAVE_OPS1="$OPS1" - if [ "`type -t short_curdir`" = function ]; then - OPS1="\`cgmem_which_prompt\`\u@\${HOSTNAME::5}:\`short_curdir\`" - if test -x /usr/bin/git >/dev/null 2>&1; then - #if [ "`type -t __git_ps1`" = function ]; then - # OPS1+="\$(__git_ps1)" - #else - OPS1+="\$(prompt_git)" - #fi - fi - OPS1+=" \$SHLVL\\$ " - else - OPS1="\u@\h:\W \$SHLVL\\$ " - fi - 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 - 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 - [ -n "$MC_SAVE_OPS1" ] && OPS1="$MC_SAVE_OPS1" - unset MC_FOUND MC_PWD_FILE MC_SAVE_OPS1 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; }