]> git.phdru.name Git - dotfiles.git/blobdiff - .shellrc
.shellrc: uncomment and refactor function chlo
[dotfiles.git] / .shellrc
index 333091c0c2cb837abd4ff16bcaa0bf55f948bb58..6e2fa0532e4fd55ade495f8137b556b25e1dc78a 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -9,11 +9,11 @@
 # If not running interactively, don't do anything
 case $- in
     *i*) ;;
-      *) return;;
+      *) return ;;
 esac
 
 # Stop if non-interactive shell
-[ -z "$PS1" ] && return
+[ -z "$PS1" ] && return
 
 if test -n "$BASH_VERSION"; then
    # append to the history file, don't overwrite it
@@ -68,7 +68,6 @@ if test -n "$BASH_VERSION"; then
    [ "`type -t mc`" = alias ] && unalias mc
 
    back() { cd - "$@"; }
-   clo() { clear; logout; }
    functions() { typeset -f "$@"; }
    j() { jobs; }
 
@@ -105,7 +104,7 @@ if test -n "$BASH_VERSION"; then
          ! has_completion $cmd && complete -o default -A command $cmd
    done
 
-   for cmd in dig host nslookup nc netcat nmap p ping ping6 socat \
+   for cmd in dig host mtr nslookup nc netcat nmap p ping ping6 socat \
       telnet t tt \
       tcptraceroute tcptraceroute6 tracert tracert6 traceroute traceroute6 \
       whois wget wget-m wget-wrapper ww; do
@@ -116,10 +115,33 @@ if test -n "$BASH_VERSION"; then
       s scp ssh smbclient tcpdump tshark wireshark; do
          ! has_completion $cmd && complete -o default -A hostname $cmd;
    done
-   unset has_completion
+
+   delegate_completion() {
+      local prog completion_f programs
+      prog="$1"
+      completion_f="$2"
+      shift; shift
+      programs="$@"
+      if has_completion "$prog"; then
+         eval "_${prog}_completion_loader() {
+            _completion_loader $prog
+            complete -F $completion_f $programs
+            unset _${prog}_completion_loader
+            return 124
+         }"
+         complete -F _"$prog"_completion_loader $programs
+      fi
+   }
+
+   delegate_completion make _make m
+   delegate_completion rsync _rsync r
+   delegate_completion ssh _ssh s
+   delegate_completion wget _wget wget-m wget-wrapper ww
+
+   unset has_completion delegate_completion
 
    complete -A job bg fg j jobs wait
-   complete -A variable unset
+   complete -A variable -A function unset
 
    if [ -d "$HOME/lib/config" ]; then
       complete -W "`cd \"$HOME/lib/config\" && echo *`" include
@@ -133,56 +155,43 @@ if test -n "$BASH_VERSION"; then
 
 elif test -n "$KSH_VERSION" -o -n "$FCEDIT"; then
    back() { cd - "$@"; }
-   clo() { clear; exit; }
    j() { jobs; }
-
-else
-   clo() { clear; exit; }
 fi
 
 
-# clear history, clear screen and logout
-#chlo() { cd; unset HISTFILE; rm -f .sh_history; history -c; clo; }
-
-
-#Pwd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)\/\(.*\)\/\(.*\)/...\/\2\/\3\/\4/"; }
-#PWd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)/...\/\2/"; }
-
-
-psg()   { ps auxw   | grep -i "$@" | grep -v '\(ps auxw\|grep\)'; }
-pswg()  { ps auxwww | grep -i "$@" | grep -v '\(ps auxw\|grep\)'; }
-
-# Like pgrep -f
-pidOf() { ps auxwww | grep -i "$@" | grep -v '\(ps auxw\|grep\|pidOf\|KillAll\)' | awk '{print $2}'; }
-
-# A kind of pkill/killall
-KillAll() {
-   if [ -z "$2" ]; then
-      kill `pidOf "$1"`
-   else
-      kill "$1" `pidOf "$2"`
-   fi
-}
+# clear screen and history, logout
+chlo() { clear; cd; >$HISTFILE; unset HISTFILE; history -c; logout || exit; }
 
 
 if test -x /usr/bin/git >/dev/null 2>&1; then
    # chdir to a remote's directory (if the remote is on the local FS)
    cdremote() {
+      if [ -z "$1" -o -n "$2" ]; then
+         echo "Usage: cdremote remote_name" >&2
+         return 1
+      fi
       cd "`git config --get remote.$1.url`"
    }
 
    if test -n "$BASH_VERSION"; then
       # completion for global aliases in .gitconfig
-      # fixup rbi rbia rbiap rbip - delegate to git-rebase completion
 
-      _git_fixup() { _git_rebase ; }
-      _git_rbi() { _git_rebase ; }
-      _git_rbia() { _git_rebase ; }
-      _git_rbiap() { _git_rebase ; }
-      _git_rbip() { _git_rebase ; }
+      # fixup rbi rbia rbiap rbip - do refs name completion
+      _git_fixup() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbi() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbia() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbiap() { __gitcomp_nl "$(__git_refs)" ; }
+      _git_rbip() { __gitcomp_nl "$(__git_refs)" ; }
+      #
+      # push-to-all-remotes - do branch name completion
+      _git_push_to_all_remotes() { __gitcomp_nl "$(__git_heads)" ; }
 
       # list remotes with URLs matching a regexp
-      list_remotes() {
+      _list_remotes() {
+         if [ -z "$1" -o -n "$2" ]; then
+            echo "Usage: _list_remotes remote_regexp" >&2
+            return 1
+         fi
          GIT_REMOTES=""
          local remote
          for remote in `git remote`; do
@@ -192,22 +201,24 @@ if test -x /usr/bin/git >/dev/null 2>&1; then
          done
       }
 
-      # completion for cdremote - list remotes with directories as URLs
-      _cdremote_complete() {
+      # completion for cdremote and git-open - list remotes with a pattern
+      _list_remotes_completion() {
          local cur="${COMP_WORDS[COMP_CWORD]}";
-         list_remotes '^\(/\|\.\./\)' # (/ or ../ at the beginning)
+         _list_remotes "$1"
          COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
          unset GIT_REMOTES
       }
 
+      # completion for cdremote - list remotes with directories as URLs
+      _cdremote_complete() {
+         _list_remotes_completion '^\(/\|\.\./\)' # (/ or ../ at the beginning)
+      }
+
       complete -F _cdremote_complete cdremote
 
       # completion for git-open - list remotes with http(s) URLs
       _git_open() {
-         local cur="${COMP_WORDS[COMP_CWORD]}";
-         list_remotes '^http\(s\)\?://'
-         COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
-         unset GIT_REMOTES
+         _list_remotes_completion '^http\(s\)\?://'
       }
 
       complete -F _git_open git-open