view .bashrc @ 278:500fff4e28c9

menuitem key; shoulda let go of L
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 01 May 2013 17:25:25 -0700
parents 102305dad796
children 19070b2af257
line wrap: on
line source

source /etc/profile

# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
if [[ $- != *i* ]] ; then
	# Shell is non-interactive.  Be done now!
	return
fi

# Enable colors for ls, etc.  Prefer ~/.dir_colors #64489
if [[ -f ~/.dir_colors ]] ; then
	eval $(dircolors -b ~/.dir_colors)
elif [[ -f /etc/DIR_COLORS ]] ; then
	eval $(dircolors -b /etc/DIR_COLORS)
fi

# variables
export CLICOLOR=1
export EDITOR='emacs -nw'
export MOZCONFIG=~/mozilla/mozconfigs/mozconfig
export MOZSOURCE=~/mozilla/src/mozilla-central
export MOZOBJ=~/mozilla/src/obj-browser
export JS_EDITLINE=1

# aliases
alias awd="python -c 'import os;  print os.path.realpath(\".\")'"
alias currentpatch='echo `hg root`/.hg/patches/`hg qapp -v | head -n 1 | cut -f 3 -d " "`'
alias datestamp='date +%Y%m%d%H%M%S'
alias distribute='python setup.py egg_info -RDb "" sdist register upload'
alias grep='grep --colour=auto'
alias ls='ls --color=auto'
alias random="python -c 'import sys, random; foo = sys.argv[1:]; random.shuffle(foo); print \" \".join(foo)'"
alias svnst='svn st | grep -v "^\?"'
alias wget='wget --no-check-certificate'
alias xpcshell="LD_LIBRARY_PATH=${MOZOBJ}/dist/bin ${MOZOBJ}/dist/bin/xpcshell"

# bzconsole aliases for filing bugs
alias mozbase-bug="bz new Mozbase --cc ':wlach'"
alias mozharness-bug="bz new 'Release Engineering: Automation (General)' --cc ':aki' --whiteboard 'mozharness'"
alias releng-bug="bz new 'Release Engineering: Automation (General)'"
alias talos-bug="bz new Talos --cc ':jmaher' --cc ':BYK'"
alias mozbuild-bug="bz new --product Core 'Build Config' --cc ':gps'"

# PROMPT
PS1='│'
PS2='.'
PROMPT_COMMAND='echo -ne "\033]0;${SSH_CLIENT/*/$HOSTNAME:}${PWD/~/~}\007"'

# PATHs
export PATH=~/firefox:~/bin:~/python:$PATH:/usr/sbin:/usr/games/bin
export PYTHONPATH=~/python:$PYTHONPATH:~/virtualenv


### functions

cdwin() {
# change directory to a window's location using its title
    DIR=$(xwininfo | dictify.py xwininfo | awk '{ print $NF }' | sed 's/"//g')
    DIR=${DIR/\~/$HOME}
    cd $DIR
}

eend() {
# edit the end of a file with emacs
    FILE=$1
    shift
    emacs +`wc -l "$FILE"` $@
}

git-diff-master() {
git diff $(git merge-base HEAD master)
}

function colors() {

    CLR_WHITE="\033[0;37m"
    CLR_WHITEBOLD="\033[1;37m"
    CLR_BLACK="\033[0;30m"
    CLR_GRAY="\033[1;30m"
    CLR_BLUE="\033[1;34m"
    CLR_BLUEBOLD="\033[0;34m"
    CLR_GREEN="\033[0;32m"
    CLR_GREENBOLD="\033[1;32m"
    CLR_CYAN="\033[0;36m"
    CLR_CYANBOLD="\033[1;36m"
    CLR_RED="\033[0;31m"
    CLR_REDBOLD="\033[1;31m"
    CLR_PURPLE="\033[0;35m"
    CLR_PURPLEBOLD="\033[1;35m"
    CLR_YELLOW="\033[0;33m"
    CLR_YELLOWBOLD="\033[1;33m"
    CLR_NOTHING="\033[0m"
}
colors

# nice fast find function
EXCLUDES="(\.svn)|(\.mo$)|(\.po$)|(\.pyc$)"
ff() {

    if (( $# < 2 ))
    then
	FILENAME='*' # default -- look in all files
    else
	FILENAME=$2
    fi
    CMD='command find -L $PWD -iname "${FILENAME}" -print0 2> /dev/null | xargs -r0 grep -il "$1" 2> /dev/null | egrep -v "${EXCLUDES}" 2> /dev/null'
#    echo $CMD
    eval $CMD

}

chainff() {
    if (( $# < 2 ))
    then
	return 0
    fi

    RESULTS=`ff "$2" "$1"`
    shift 2

    for i in $RESULTS
    do
	for arg in $@
	do
	    if grep -il "$arg" "$i" &> /dev/null
	    then
		touch /dev/null
	    else
		i=""
		break
	    fi
	done
	if [ -n "$i" ]
	then
	    echo $i
	fi
    done
}

# contextual fastfind
cff () {

    if (( $# < 2 )); then
        local FILENAME='*' # default -- look in all files
    else
        local FILENAME=$2
    fi

    for i in `ff "$1" "$FILENAME"`; do
        echo -e "$CLR_GREEN--->>> ""$CLR_YELLOWBOLD""$i""$CLR_NOTHING" :
        grep --color=auto -i -n -C 3 "$1" $i
    done

}

# make a temporary file
tmpfile() {

if [ "$#" == "0" ]
then
    args="tmp"
else
    args=$@
fi

for i in $args
do
    NEWNAME=${i}.$RANDOM

    while [ -e $NEWNAME ]
    do
	NEWNAME=${NEWNAME}.tmp
    done
    echo "$NEWNAME"
done
}

edpe() {
# edit and pipe the buffer to stdout
FILE=`tmpfile`
$EDITOR $FILE
cat $FILE
rm $FILE
}

swap() {
# swap two files
    if [ "$#" != "2" ]
    then
	echo "Usage: $FUNCNAME <first_arg> <second_arg>"
	return
    fi
    for i in "$1" "$2"
    do
	if [ ! -w "$i" ]
	then
	    echo "$FUNCNAME: Can't move $i"
	    return 1
	fi
    done

    NEWNAME=`basename $1`.$RANDOM

    while [ -e $NEWNAME ]
    do
	NEWNAME=${NEWNAME}.tmp
	echo "$NEWNAME"
    done

    mv `basename $1` $NEWNAME
    mv `basename $2` `basename $1`
    mv $NEWNAME `basename $2`
}

isrunning() {
# is a process running? (by name)
# see also: talos for a better version
    for i in "$@"
    do
	ps axwww  | grep "$i" | grep -v 'grep'
    done | sort | uniq

}

killbyname() {
# kill a process by name
# see also: talos for a better version
    kill `isrunning "$@" | awk '{ print $1 }' | onelineit.py`
}

# full name
fn() {
    python -c "import os; print os.path.realpath('$*')"
}

# which view
whview() {
    less `which $@`
}

# which emacs
whemacs() {
    emacs -nw `which $@`
}

pyfile() {
# python file name
python -c "import $1; print $1.__file__"
}

### functions for version control systems

svndance(){
# do the svn import dance!
if (( $# ))
then
    svn import $1
    cd ..
    rm -rf $OLDPWD
    svn co $1 $OLDPWD
    cd $OLDPWD
else
    return 1
fi
}

difffiles() {
grep '^+++ ' $@ | sed 's/+++ b\///'
}

hg-update-all() {
for i in *;
do
    if [ -e $i/.hg ]
    then
        cd $i
        hg pull
        hg update
        cd -
    fi
done
}

hg-qcommit() {
message=$1
hg qrefresh
if [ -z "${message}" ]
then
    hg qcommit
else
    hg qcommit -m "${message}"
fi
hgroot=$(hg root)
patches=${hgroot}/.hg/patches/
if [ -e ${patches}.hg ]
then
    cd ${patches}
    hg push
fi
cd -
}

hgrc() {
# write an hgrc file
# TODO: in the case you're in an `hg root`...what then?
# - NOTE: /home/jhammel is an `hg root`, so be careful!
# There should be a way to update $(hg root)/.hg/hgrc automatically
# Likewise, git
# Python script? .dotfile?
ROOT="${1}"
echo "[paths]"
echo "default = ${ROOT}"
echo "default-push = ssh://${ROOT#http*://}"
}

### functions for web content

blog-file() {
echo "$HOME/web/blog/k0s/entries/public/$1"
}

flatten() {
  directory=$PWD
  if [ "$#" == "1" ]
  then
      directory=$1
  fi
  cd $directory
  unset find # don't use the alias
  find . -name '*' -type f | sed 's/.\///' | while read line
  do
      filename=$(echo $line | sed 's/\//-/g')
      mv "${line}" "${filename}"
  done
  for i in *
  do
      if [ -d $i ]
      then
          rm -rf "${i}"
      fi
  done
}

filehandles() {
    TMPFILE=$(tmpfile)
    ps -e|grep -v TTY|awk {'print "echo -n \"Process: "$4"\tPID: "$1"\tNumber of FH: \"; lsof -p "$1"|wc -l"'} > ${TMPFILE}
    . ${TMPFILE} | sort
    rm ${TMPFILE}
}

quotemail() {

command='s/^/> /'
inplace=""
if [ "$#" == "2" ]
then
    inplace="-i"
fi

sed ${inplace} "${command}" "$1"

}

### include overrides for commands
source ~/.bash_overrides

### regenerate fluxbox menus here for convenience
MENU=~/web/site/programs.html
regeneratefluxmenu() {
if [ -e $MENU ]
then
    html2flux.py $MENU > ~/.fluxbox/applications
fi
}
regeneratefluxmenu