]> git.phdru.name Git - dotfiles.git/blob - .shellrc
6a57008952d125a312c4c012a75875286fa09699
[dotfiles.git] / .shellrc
1 #
2 # $HOME/.shellrc
3 #
4
5 # ~/.bashrc: executed by bash(1) for non-login shells.
6 # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
7 # for examples
8
9 # If not running interactively, don't do anything
10 case $- in
11     *i*) ;;
12       *) return;;
13 esac
14
15 # Stop if non-interactive shell
16 # [ -z "$PS1" ] && return
17
18 # append to the history file, don't overwrite it
19 shopt -s histappend
20
21 # check the window size after each command and, if necessary,
22 # update the values of LINES and COLUMNS.
23 shopt -s checkwinsize
24
25 # If set, the pattern "**" used in a pathname expansion context will
26 # match all files and zero or more directories and subdirectories.
27 #shopt -s globstar
28
29
30 #if [ -x /usr/bin/dircolors ]; then
31    # I don't like these aliases - they work only in command line
32    # but not in scripts I run from command line.
33    # Color parameters must be passed via environment.
34    #alias ls='ls --color=auto'
35    #alias dir='dir --color=auto'
36    #alias vdir='vdir --color=auto'
37
38    #alias grep='grep --color=auto'
39    #alias fgrep='fgrep --color=auto'
40    #alias egrep='egrep --color=auto'
41 #fi
42
43
44 case "$HOME" in
45    /home/*)
46       if [ -L /home ]; then
47          START_DIR="`pwd`" &&
48          cd "$HOME" &&
49          HOME="`pwd`" &&
50          cd "$START_DIR"
51       fi
52    ;;
53 esac
54
55
56 OPS1="$OPS1\\$"
57 PS1="$OPS1 "
58
59
60 case "$SHELL" in
61 */bash)
62    [ "`type -t ls`" = alias ] && unalias ls
63    [ "`type -t ll`" = alias ] && unalias ll
64    [ "`type -t mc`" = alias ] && unalias mc
65
66    back() { cd - ${1:+"$@"}; }
67    clo() { clear; logout; }
68    eval 'functions() { typeset -f ${1:+"$@"}; }'
69    j() { jobs; }
70
71    if [ -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
72       if [ "$SHELL" = /bin/bash ]; then
73          if [ -f /etc/bash_completion ]; then
74             . /etc/bash_completion
75          elif [ -d /etc/bash_completion.d ]; then
76             . /etc/bash_completion.d/*
77          fi
78       elif [ "$SHELL" = /usr/local/bin/bash ]; then
79          if [ -d /usr/local/etc/bash_completion.d ]; then
80             . /usr/local/etc/bash_completion.d/*
81          fi
82       else
83          echo "Unknown OS type, canot source bash_completion" >&2
84       fi
85    fi
86
87    has_completion() { return 0; }
88    if [ "$SHELL" = /bin/bash ]; then
89       if [ -d /etc/bash_completion.d -o -d /usr/share/bash-completion/completions ]; then
90          has_completion() { [ -r /etc/bash_completion.d/$1 -o -r /usr/share/bash-completion/completions/$1 ]; }
91       fi
92    elif [ "$SHELL" = /usr/local/bin/bash ]; then
93       if [ -d /usr/local/etc/bash_completion.d ]; then
94          has_completion() { [ -r /usr/local/etc/bash_completion.d/$1 ]; }
95       fi
96    fi
97
98    for cmd in builtin cgmem_nice command dbus-launch exec \
99       killall man nice nohup pidof pidOf KillAll pgrep pkill psg pswg su sudo \
100       time whence whereis which xargs; do
101          ! has_completion $cmd && complete -o default -A command $cmd
102    done
103
104    for cmd in dig host nslookup nc netcat nmap p ping ping6 socat \
105       telnet t tt \
106       tcptraceroute tcptraceroute6 tracert tracert6 traceroute traceroute6 \
107       whois wget wget-m wget-wrapper ww; do
108          ! has_completion $cmd && complete -A hostname $cmd
109    done
110
111    for cmd in distribute ftp lftp r rsync \
112       s scp ssh smbclient tcpdump tshark wireshark; do
113          ! has_completion $cmd && complete -o default -A hostname $cmd;
114    done
115    unset has_completion
116
117    complete -A job bg fg j jobs wait
118    complete -A variable unset
119
120    if [ -d "$HOME/lib/config" ]; then
121       complete -W "`cd \"$HOME/lib/config\" && echo *`" include
122    fi
123    complete -W "`echo $BROWSER | sed 's/:/ /g'`" start-browser
124
125    if which pip >/dev/null 2>&1; then
126       eval "`pip completion --bash`"
127       rm -rf /tmp/pip_build_"$USER"
128    fi
129    ;;
130
131 */ksh)
132    back() { cd - ${1:+"$@"}; }
133    clo() { clear; exit; }
134    j() { jobs; }
135    ;;
136
137 */sh)
138    clo() { clear; exit; }
139    ;;
140 esac
141
142
143 # clear history, clear screen and logout
144 #chlo() { cd; unset HISTFILE; rm -f .sh_history; history -c; clo; }
145
146
147 #Pwd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)\/\(.*\)\/\(.*\)/...\/\2\/\3\/\4/"; }
148 #PWd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)/...\/\2/"; }
149
150
151 psg()   { ps auxw   | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
152 pswg()  { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
153
154 # Like pgrep -f
155 pidOf() { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\|pidOf\|KillAll\)' | awk '{print $2}'; }
156
157 # A kind of pkill/killall
158 KillAll() {
159    if [ -z "$2" ]; then
160       kill `pidOf "$1"`
161    else
162       kill "$1" `pidOf "$2"`
163    fi
164 }
165
166
167 # git-related
168
169 # chdir to a remote's directory (if the remote is on the local FS)
170 cdremote() {
171    cd "`git config --get remote.$1.url`"
172 }
173
174 case "$SHELL" in
175    */bash)
176       # list remotes with URLs matching a regexp
177       list_remotes() {
178          GIT_REMOTES=""
179          for remote in `git remote`; do
180             if git config --get remote.$remote.url | grep -q "$1"; then
181                GIT_REMOTES="$GIT_REMOTES $remote"
182             fi
183          done
184          remote=""
185          unset remote
186       }
187
188       # define completion for cdremote - list remotes with directories as URLs
189       _cdremote_complete() {
190          local cur="${COMP_WORDS[COMP_CWORD]}";
191          list_remotes '^\(/\|\.\./\)'
192          COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
193          GIT_REMOTES=""
194          unset GIT_REMOTES
195       }
196
197       complete -F _cdremote_complete cdremote
198
199       # define completion for git-open - list remotes with http(s) URLs
200       _git_open() {
201          local cur="${COMP_WORDS[COMP_CWORD]}";
202          list_remotes '^http\(s\)\?://'
203          COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
204          GIT_REMOTES=""
205          unset GIT_REMOTES
206       }
207
208       complete -F _git_open git-open
209    ;;
210 esac
211
212
213 include() {
214    cfg="$1"
215    if [ -f "./$cfg" -a -r "./$cfg" ]; then
216       echo "Reading config file \`$cfg'" 1>&2
217       . "./$cfg"
218    elif [ -f "$HOME/lib/config/$cfg" -a -r "$HOME/lib/config/$cfg" ]; then
219       echo "Reading config file \`$HOME/lib/config/$cfg'" 1>&2
220       . "$HOME/lib/config/$cfg"
221    else
222       echo "Cannot find config file \`$cfg'" 1>&2
223    fi
224 }
225
226
227 mc() {
228    case "$SHELL" in
229       */bash)
230          MC_SAVE_OPS1="$OPS1"
231          OPS1="\u@\h "
232       ;;
233    esac
234
235    if [ -n "$SLOWTERM" ]; then
236       MC_SLOW="--slow"
237    fi
238
239    case "$TERM" in
240       screen*) # screen, screen.rxvt
241          if [ "$TERM" = screen.rxvt ]; then
242             MC_SAVE_TERM="$TERM"
243             TERM=rxvt
244          fi
245          MC_XTERM="-x"
246       ;;
247    esac
248
249    #TMPDIR="$HOME"/tmp
250    #export TMPDIR
251
252    MC_FOUND=NO
253
254    for wrapper in \
255          /usr/local/share/mc/bin/mc-wrapper.sh \
256          /usr/local/libexec/mc/mc-wrapper.sh \
257          /usr/share/mc/bin/mc-wrapper.sh; do
258       if [ -r $wrapper ]; then
259          . $wrapper $MC_SLOW $MC_XTERM "$@"
260          rc=$?
261          MC_FOUND=YES
262          break
263       fi
264    done
265
266    if [ $MC_FOUND = NO ]; then
267       for mc in /usr/local/bin/mc /usr/bin/mc; do
268          if [ -x $mc ]; then
269             MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER"
270             if [ ! -d MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" ]; then
271                MC_TMP_DIR="${TMPDIR-/tmp}"
272             fi
273             MC_PWD_FILE="$MC_TMP_DIR/mc.pwd.$$"
274             mc_type="`mc_type.py $mc`"
275             if [ "$mc_type" = old ]; then
276                $mc -P $MC_SLOW $MC_XTERM "$@" > "$MC_PWD_FILE"
277             elif [ "$mc_type" = new ]; then
278                $mc -P "$MC_PWD_FILE" $MC_SLOW $MC_XTERM "$@"
279             else
280                continue
281             fi
282             rc=$?
283             MC_FOUND=YES
284             cd "`cat \"$MC_PWD_FILE\"`" && /bin/rm "$MC_PWD_FILE"
285             break
286          fi
287       done
288    fi
289
290    if [ $MC_FOUND = NO ]; then
291       echo "Cannot find mc-wrapper.sh or mc" >&2
292       rc=1
293    fi
294
295    [ -n "$MC_SAVE_OPS1" ] && OPS1="$MC_SAVE_OPS1"
296    [ -n "$MC_SAVE_TERM" ] && TERM="$MC_SAVE_TERM"
297    unset MC_FOUND MC_PWD_FILE MC_SAVE_OPS1 MC_SAVE_TERM \
298          MC_SLOW MC_TMP_DIR MC_XTERM
299
300    return $rc
301 }
302
303
304 mkcd() {
305    if [ $# -ne 1 ]; then
306       echo "Usage: mkcd directory_name" >&2
307    elif [ -d "$1" ]; then
308       cd "$1"
309    elif [ -e "$1" ]; then
310       echo "Error: $1 is a file" >&2
311    else
312       mkdir -p "$1" && cd "$1"
313    fi
314 }
315
316
317 tmux() {
318    case "$TERM" in
319       rxvt)
320          TERM=rxvt-unicode command tmux "$@"
321       ;;
322
323       *)
324          command tmux "$@"
325       ;;
326    esac
327 }
328
329
330 if [ -f /usr/local/bin/virtualenvwrapper_lazy.sh ]; then
331    source /usr/local/bin/virtualenvwrapper_lazy.sh
332 fi
333
334 #if which pyenv >/dev/null 2>&1; then
335 #   eval "`pyenv init -`"
336 #   eval "`pyenv virtualenv-init -`"
337 #fi
338
339
340 X() { startx >> .Xserver.log 2>&1; cyr; }
341 x() { exit; }