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