]> git.phdru.name Git - dotfiles.git/blobdiff - .shellrc
.profile: use xhost to allow root to run X apps
[dotfiles.git] / .shellrc
index 90442e0e097a1672970e1cd2260b9ce0be7ba597..e43c215913f3778b697c0804991596ffb8d6a761 100644 (file)
--- a/.shellrc
+++ b/.shellrc
@@ -15,16 +15,18 @@ esac
 # Stop if non-interactive shell
 # [ -z "$PS1" ] && return
 
-# append to the history file, don't overwrite it
-shopt -s histappend
+if test -n "$BASH_VERSION"; then
+   # append to the history file, don't overwrite it
+   shopt -s histappend
 
-# check the window size after each command and, if necessary,
-# update the values of LINES and COLUMNS.
-shopt -s checkwinsize
+   # check the window size after each command and, if necessary,
+   # update the values of LINES and COLUMNS.
+   shopt -s checkwinsize
 
-# If set, the pattern "**" used in a pathname expansion context will
-# match all files and zero or more directories and subdirectories.
-#shopt -s globstar
+   # If set, the pattern "**" used in a pathname expansion context will
+   # match all files and zero or more directories and subdirectories.
+   #shopt -s globstar
+fi
 
 
 #if [ -x /usr/bin/dircolors ]; then
@@ -103,17 +105,48 @@ 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
          ! has_completion $cmd && complete -A hostname $cmd
    done
 
+   if has_completion wget; then
+      _wget_completion_loader() {
+         _completion_loader wget
+         complete -F _wget wget-m wget-wrapper ww
+         unset _wget_completion_loader
+         return 124
+      }
+      complete -F _wget_completion_loader wget-m wget-wrapper ww
+   fi
+
    for cmd in distribute ftp lftp r rsync \
       s scp ssh smbclient tcpdump tshark wireshark; do
          ! has_completion $cmd && complete -o default -A hostname $cmd;
    done
+
+   if has_completion rsync; then
+      _rsync_completion_loader() {
+         _completion_loader rsync
+         complete -F _rsync r
+         unset _rsync_completion_loader
+         return 124
+      }
+      complete -F _rsync_completion_loader r
+   fi
+
+   if has_completion ssh; then
+      _ssh_completion_loader() {
+         _completion_loader ssh
+         complete -F _ssh s
+         unset _ssh_completion_loader
+         return 124
+      }
+      complete -F _ssh_completion_loader s
+   fi
+
    unset has_completion
 
    complete -A job bg fg j jobs wait
@@ -155,6 +188,10 @@ pidOf() { ps auxwww | grep -i "$@" | grep -v '\(ps auxw\|grep\|pidOf\|KillAll\)'
 
 # A kind of pkill/killall
 KillAll() {
+   if [ -z "$1" -o -n "$3" ]; then
+      echo "Usage: KillAll [-signal] proc_regexp" >&2
+      return 1
+   fi
    if [ -z "$2" ]; then
       kill `pidOf "$1"`
    else
@@ -163,44 +200,66 @@ KillAll() {
 }
 
 
-# git-related
-
-# chdir to a remote's directory (if the remote is on the local FS)
-cdremote() {
-   cd "`git config --get remote.$1.url`"
-}
-
-if test -n "$BASH_VERSION"; then
-   # list remotes with URLs matching a regexp
-   list_remotes() {
-      GIT_REMOTES=""
-      local remote
-      for remote in `git remote`; do
-         if git config --get remote.$remote.url | grep -q "$1"; then
-            GIT_REMOTES="$GIT_REMOTES $remote"
-         fi
-      done
-   }
-
-   # completion for cdremote - list remotes with directories as URLs
-   _cdremote_complete() {
-      local cur="${COMP_WORDS[COMP_CWORD]}";
-      list_remotes '^\(/\|\.\./\)' # (/ or ../ at the beginning)
-      COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
-      unset GIT_REMOTES
-   }
-
-   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
+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`"
    }
 
-   complete -F _git_open git-open
+   if test -n "$BASH_VERSION"; then
+      # completion for global aliases in .gitconfig
+
+      # 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() {
+         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
+            if git config --get remote.$remote.url | grep -q "$1"; then
+               GIT_REMOTES="$GIT_REMOTES $remote"
+            fi
+         done
+      }
+
+      # completion for cdremote and git-open - list remotes with a pattern
+      _list_remotes_completion() {
+         local cur="${COMP_WORDS[COMP_CWORD]}";
+         _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() {
+         _list_remotes_completion '^http\(s\)\?://'
+      }
+
+      complete -F _git_open git-open
+   fi
 fi
 
 
@@ -306,17 +365,19 @@ mkcd() {
 }
 
 
-tmux() {
-   case "$TERM" in
-      rxvt)
-         TERM=rxvt-unicode command tmux "$@"
-      ;;
+if which tmux >/dev/null 2>&1; then
+   tmux() {
+      case "$TERM" in
+         rxvt)
+            TERM=rxvt-unicode command tmux "$@"
+         ;;
 
-      *)
-         command tmux "$@"
-      ;;
-   esac
-}
+         *)
+            command tmux "$@"
+         ;;
+      esac
+   }
+fi
 
 
 #if which pyenv >/dev/null 2>&1; then
@@ -329,5 +390,8 @@ if [ -f /usr/local/bin/virtualenvwrapper_lazy.sh ]; then
 fi
 
 
-X() { startx >> .Xserver.log 2>&1; cyr; }
+if [ "$SHLVL" -eq 1 ] && which startx >/dev/null 2>&1; then
+   X() { startx >> .Xserver.log 2>&1; cyr; }
+fi
+
 x() { exit; }