]> git.phdru.name Git - dotfiles.git/blob - .shellrc
.shellrc: declare a variable local instead of unsetting it
[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 if test -n "$BASH_VERSION"; then
61    [ "`type -t ls`" = alias ] && unalias ls
62    [ "`type -t ll`" = alias ] && unalias ll
63    [ "`type -t mc`" = alias ] && unalias mc
64
65    back() { cd - ${1:+"$@"}; }
66    clo() { clear; logout; }
67    eval 'functions() { typeset -f ${1:+"$@"}; }'
68    j() { jobs; }
69
70    if [ -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
71       if [ "$SHELL" = /bin/bash ]; then
72          if [ -f /etc/bash_completion ]; then
73             . /etc/bash_completion
74          elif [ -d /etc/bash_completion.d ]; then
75             . /etc/bash_completion.d/*
76          fi
77       elif [ "$SHELL" = /usr/local/bin/bash ]; then
78          if [ -d /usr/local/etc/bash_completion.d ]; then
79             . /usr/local/etc/bash_completion.d/*
80          fi
81       else
82          echo "Unknown OS type, canot source bash_completion" >&2
83       fi
84    fi
85
86    has_completion() { return 0; }
87    if [ "$SHELL" = /bin/bash ]; then
88       if [ -d /etc/bash_completion.d -o -d /usr/share/bash-completion/completions ]; then
89          has_completion() { [ -r /etc/bash_completion.d/$1 -o -r /usr/share/bash-completion/completions/$1 ]; }
90       fi
91    elif [ "$SHELL" = /usr/local/bin/bash ]; then
92       if [ -d /usr/local/etc/bash_completion.d ]; then
93          has_completion() { [ -r /usr/local/etc/bash_completion.d/$1 ]; }
94       fi
95    fi
96
97    for cmd in builtin cgmem_nice command dbus-launch exec \
98       killall man nice nohup pidof pidOf KillAll pgrep pkill psg pswg su sudo \
99       time whence whereis which xargs; do
100          ! has_completion $cmd && complete -o default -A command $cmd
101    done
102
103    for cmd in dig host nslookup nc netcat nmap p ping ping6 socat \
104       telnet t tt \
105       tcptraceroute tcptraceroute6 tracert tracert6 traceroute traceroute6 \
106       whois wget wget-m wget-wrapper ww; do
107          ! has_completion $cmd && complete -A hostname $cmd
108    done
109
110    for cmd in distribute ftp lftp r rsync \
111       s scp ssh smbclient tcpdump tshark wireshark; do
112          ! has_completion $cmd && complete -o default -A hostname $cmd;
113    done
114    unset has_completion
115
116    complete -A job bg fg j jobs wait
117    complete -A variable unset
118
119    if [ -d "$HOME/lib/config" ]; then
120       complete -W "`cd \"$HOME/lib/config\" && echo *`" include
121    fi
122    complete -W "`echo $BROWSER | sed 's/:/ /g'`" start-browser
123
124    if type -p pip >/dev/null 2>&1; then
125       eval "`pip completion --bash`"
126       rm -rf /tmp/pip_build_"$USER"
127    fi
128
129 elif test -n "$KSH_VERSION" -o -n "$FCEDIT"; then
130    back() { cd - ${1:+"$@"}; }
131    clo() { clear; exit; }
132    j() { jobs; }
133
134 else
135    clo() { clear; exit; }
136 fi
137
138
139 # clear history, clear screen and logout
140 #chlo() { cd; unset HISTFILE; rm -f .sh_history; history -c; clo; }
141
142
143 #Pwd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)\/\(.*\)\/\(.*\)/...\/\2\/\3\/\4/"; }
144 #PWd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)/...\/\2/"; }
145
146
147 psg()   { ps auxw   | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
148 pswg()  { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
149
150 # Like pgrep -f
151 pidOf() { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\|pidOf\|KillAll\)' | awk '{print $2}'; }
152
153 # A kind of pkill/killall
154 KillAll() {
155    if [ -z "$2" ]; then
156       kill `pidOf "$1"`
157    else
158       kill "$1" `pidOf "$2"`
159    fi
160 }
161
162
163 # git-related
164
165 # chdir to a remote's directory (if the remote is on the local FS)
166 cdremote() {
167    cd "`git config --get remote.$1.url`"
168 }
169
170 if test -n "$BASH_VERSION"; then
171    # list remotes with URLs matching a regexp
172    list_remotes() {
173       GIT_REMOTES=""
174       local remote
175       for remote in `git remote`; do
176          if git config --get remote.$remote.url | grep -q "$1"; then
177             GIT_REMOTES="$GIT_REMOTES $remote"
178          fi
179       done
180    }
181
182    # completion for cdremote - list remotes with directories as URLs
183    _cdremote_complete() {
184       local cur="${COMP_WORDS[COMP_CWORD]}";
185       list_remotes '^\(/\|\.\./\)' # (/ or ../ at the beginning)
186       COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
187       unset GIT_REMOTES
188    }
189
190    complete -F _cdremote_complete cdremote
191
192    # completion for git-open - list remotes with http(s) URLs
193    _git_open() {
194       local cur="${COMP_WORDS[COMP_CWORD]}";
195       list_remotes '^http\(s\)\?://'
196       COMPREPLY=(`compgen -W "$GIT_REMOTES" -- "$cur"`)
197       unset GIT_REMOTES
198    }
199
200    complete -F _git_open git-open
201 fi
202
203
204 include() {
205    cfg="$1"
206    if [ -f "./$cfg" -a -r "./$cfg" ]; then
207       echo "Reading config file \`$cfg'" 1>&2
208       . "./$cfg"
209    elif [ -f "$HOME/lib/config/$cfg" -a -r "$HOME/lib/config/$cfg" ]; then
210       echo "Reading config file \`$HOME/lib/config/$cfg'" 1>&2
211       . "$HOME/lib/config/$cfg"
212    else
213       echo "Cannot find config file \`$cfg'" 1>&2
214    fi
215 }
216
217
218 mc() {
219    if test -n "$BASH_VERSION"; then
220       MC_SAVE_OPS1="$OPS1"
221       OPS1="\u@\h "
222    fi
223
224    if [ -n "$SLOWTERM" ]; then
225       MC_SLOW="--slow"
226    fi
227
228    case "$TERM" in
229       screen*) # screen, screen.rxvt
230          if [ "$TERM" = screen.rxvt ]; then
231             MC_SAVE_TERM="$TERM"
232             TERM=rxvt
233          fi
234          MC_XTERM="-x"
235       ;;
236    esac
237
238    #TMPDIR="$HOME"/tmp
239    #export TMPDIR
240
241    MC_FOUND=NO
242
243    for wrapper in \
244          /usr/local/share/mc/bin/mc-wrapper.sh \
245          /usr/local/libexec/mc/mc-wrapper.sh \
246          /usr/share/mc/bin/mc-wrapper.sh; do
247       if [ -r $wrapper ]; then
248          . $wrapper $MC_SLOW $MC_XTERM "$@"
249          rc=$?
250          MC_FOUND=YES
251          break
252       fi
253    done
254
255    if [ $MC_FOUND = NO ]; then
256       for mc in /usr/local/bin/mc /usr/bin/mc; do
257          if [ -x $mc ]; then
258             MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER"
259             if [ ! -d MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" ]; then
260                MC_TMP_DIR="${TMPDIR-/tmp}"
261             fi
262             MC_PWD_FILE="$MC_TMP_DIR/mc.pwd.$$"
263             mc_type="`mc_type.py $mc`"
264             if [ "$mc_type" = old ]; then
265                $mc -P $MC_SLOW $MC_XTERM "$@" > "$MC_PWD_FILE"
266             elif [ "$mc_type" = new ]; then
267                $mc -P "$MC_PWD_FILE" $MC_SLOW $MC_XTERM "$@"
268             else
269                continue
270             fi
271             rc=$?
272             MC_FOUND=YES
273             cd "`cat \"$MC_PWD_FILE\"`" && /bin/rm "$MC_PWD_FILE"
274             break
275          fi
276       done
277    fi
278
279    if [ $MC_FOUND = NO ]; then
280       echo "Cannot find mc-wrapper.sh or mc" >&2
281       rc=1
282    fi
283
284    [ -n "$MC_SAVE_OPS1" ] && OPS1="$MC_SAVE_OPS1"
285    [ -n "$MC_SAVE_TERM" ] && TERM="$MC_SAVE_TERM"
286    unset MC_FOUND MC_PWD_FILE MC_SAVE_OPS1 MC_SAVE_TERM \
287          MC_SLOW MC_TMP_DIR MC_XTERM
288
289    return $rc
290 }
291
292
293 mkcd() {
294    if [ $# -ne 1 ]; then
295       echo "Usage: mkcd directory_name" >&2
296    elif [ -d "$1" ]; then
297       cd "$1"
298    elif [ -e "$1" ]; then
299       echo "Error: $1 is a file" >&2
300    else
301       mkdir -p "$1" && cd "$1"
302    fi
303 }
304
305
306 tmux() {
307    case "$TERM" in
308       rxvt)
309          TERM=rxvt-unicode command tmux "$@"
310       ;;
311
312       *)
313          command tmux "$@"
314       ;;
315    esac
316 }
317
318
319 #if which pyenv >/dev/null 2>&1; then
320 #   eval "`pyenv init -`"
321 #   eval "`pyenv virtualenv-init -`"
322 #fi
323
324 if [ -f /usr/local/bin/virtualenvwrapper_lazy.sh ]; then
325    source /usr/local/bin/virtualenvwrapper_lazy.sh
326 fi
327
328
329 X() { startx >> .Xserver.log 2>&1; cyr; }
330 x() { exit; }