]> git.phdru.name Git - dotfiles.git/blob - .shellrc
.shellrc: add function mkcd
[dotfiles.git] / .shellrc
1 #
2 # $HOME/.shellrc
3 #
4
5 OPS1="$OPS1\\$"
6 PS1="$OPS1 "
7
8
9 case "$HOME" in
10    /home/*)
11       home_link="`readlink /home`"
12       if [ -n "$home_link" ]; then
13          START_DIR="`pwd`" &&
14          cd "$HOME" &&
15          HOME="`pwd`" &&
16          cd "$START_DIR"
17       fi
18    ;;
19 esac
20
21 case "$SHELL" in
22 */bash)
23    [ "`type -t ls`" = alias ] && unalias ls
24    [ "`type -t ll`" = alias ] && unalias ll
25    [ "`type -t mc`" = alias ] && unalias mc
26
27    back() { cd - ${1:+"$@"}; }
28    clo() { clear; logout; }
29    eval 'functions() { typeset -f ${1:+"$@"}; }'
30    j() { jobs; }
31
32    if [ -z "$BASH_COMPLETION_COMPAT_DIR" ]; then
33       if [ "$SHELL" = /bin/bash ]; then
34          if [ -f /etc/bash_completion ]; then
35             . /etc/bash_completion
36          elif [ -d /etc/bash_completion.d ]; then
37             . /etc/bash_completion.d/*
38          fi
39       elif [ "$SHELL" = /usr/local/bin/bash ]; then
40          if [ -d /usr/local/etc/bash_completion.d ]; then
41             . /usr/local/etc/bash_completion.d/*
42          fi
43       else
44          echo "Unknown OS type, canot source bash_completion" >&2
45       fi
46    fi
47
48    has_completion() { return 0; }
49    if [ "$SHELL" = /bin/bash ]; then
50       if [ -d /etc/bash_completion.d -o -d /usr/share/bash-completion/completions ]; then
51          has_completion() { [ -r /etc/bash_completion.d/$1 -o -r /usr/share/bash-completion/completions/$1 ]; }
52       fi
53    elif [ "$SHELL" = /usr/local/bin/bash ]; then
54       if [ -d /usr/local/etc/bash_completion.d ]; then
55          has_completion() { [ -r /usr/local/etc/bash_completion.d/$1 ]; }
56       fi
57    fi
58
59    for cmd in builtin cgmem_nice command dbus-launch exec \
60       killall man nice nohup pidof pidOf KillAll pgrep pkill psg pswg su sudo \
61       time whence whereis which xargs; do
62          ! has_completion $cmd && complete -o default -A command $cmd
63    done
64
65    for cmd in dig host nslookup nc netcat nmap p ping ping6 socat \
66       telnet t tt \
67       tcptraceroute tcptraceroute6 tracert tracert6 traceroute traceroute6 \
68       whois wget wget-m wget-wrapper ww; do
69          ! has_completion $cmd && complete -A hostname $cmd
70    done
71
72    for cmd in distribute ftp lftp r rsync \
73       s scp ssh smbclient tcpdump tshark wireshark; do
74          ! has_completion $cmd && complete -o default -A hostname $cmd;
75    done
76
77    complete -A job bg fg j jobs wait
78    complete -A variable unset
79
80    if [ -d "$HOME/lib/config" ]; then
81       complete -W "`cd \"$HOME/lib/config\" && echo *`" include
82    fi
83    complete -W "`echo $BROWSER | sed 's/:/ /g'`" start-browser
84    ;;
85
86 */ksh)
87    back() { cd - ${1:+"$@"}; }
88    clo() { clear; exit; }
89    j() { jobs; }
90    ;;
91
92 */sh)
93    clo() { clear; exit; }
94    ;;
95 esac
96
97
98 # clear history, clear screen and logout
99 #chlo() { cd; unset HISTFILE; rm -f .*history*; clo; }
100
101
102 #Pwd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)\/\(.*\)\/\(.*\)/...\/\2\/\3\/\4/"; }
103 #PWd() { pwd | sed "s/.*\/\(.*\)\/\(.*\)/...\/\2/"; }
104
105
106 psg()   { ps auxw   | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
107 pswg()  { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\)'; }
108
109 # Like pgrep -f
110 pidOf() { ps auxwww | grep -i ${1:+"$@"} | grep -v '\(ps auxw\|grep\|pidOf\|KillAll\)' | awk '{print $2}'; }
111
112 # A kind of pkill/killall
113 KillAll() {
114    if [ -z "$2" ]; then
115       kill `pidOf "$1"`
116    else
117       kill "$1" `pidOf "$2"`
118    fi
119 }
120
121
122 x() { exit; }
123 X() { startx >> .Xserver.log 2>&1; cyr; }
124
125
126 include()
127 {
128    cfg="$1"
129    if [ -f "./$cfg" -a -r "./$cfg" ]; then
130       echo "Reading config file \`$cfg'" 1>&2
131       . "./$cfg"
132    elif [ -f "$HOME/lib/config/$cfg" -a -r "$HOME/lib/config/$cfg" ]; then
133       echo "Reading config file \`$HOME/lib/config/$cfg'" 1>&2
134       . "$HOME/lib/config/$cfg"
135    else
136       echo "Cannot find config file \`$cfg'" 1>&2
137    fi
138 }
139
140
141 function mkcd {
142    if [ $# -ne 1 ]; then
143       echo "Usage: mkcd directory_name" >&2
144    elif [ -d "$1" ]; then
145       cd "$1"
146    elif [ -e "$1" ]; then
147       echo "Error: $1 is a file" >&2
148    else
149       mkdir -p "$1" && cd "$1"
150    fi
151 }
152
153
154 mc() {
155    if [ -n "$SLOWTERM" ]; then
156       MC_SLOW="--slow"
157    fi
158
159    case "$TERM" in
160       screen*) # screen, screen.rxvt
161          if [ "$TERM" = screen.rxvt ]; then
162             MC_SAVE_TERM="$TERM"
163             TERM=rxvt
164          fi
165          MC_XTERM="-x"
166       ;;
167    esac
168
169    #TMPDIR="$HOME"/tmp
170    #export TMPDIR
171
172    MC_FOUND=NO
173
174    for wrapper in \
175          /usr/local/share/mc/bin/mc-wrapper.sh \
176          /usr/local/libexec/mc/mc-wrapper.sh \
177          /usr/share/mc/bin/mc-wrapper.sh; do
178       if [ -r $wrapper ]; then
179          . $wrapper $MC_SLOW $MC_XTERM "$@"
180          rc=$?
181          MC_FOUND=YES
182          break
183       fi
184    done
185
186    if [ $MC_FOUND = NO ]; then
187       for mc in /usr/local/bin/mc /usr/bin/mc; do
188          if [ -x $mc ]; then
189             MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER"
190             if [ ! -d MC_TMP_DIR="${TMPDIR-/tmp}/mc-$USER" ]; then
191                MC_TMP_DIR="${TMPDIR-/tmp}"
192             fi
193             MC_PWD_FILE="$MC_TMP_DIR/mc.pwd.$$"
194             mc_type="`mc_type.py $mc`"
195             if [ "$mc_type" = old ]; then
196                $mc -P $MC_SLOW $MC_XTERM "$@" > "$MC_PWD_FILE"
197             elif [ "$mc_type" = new ]; then
198                $mc -P "$MC_PWD_FILE" $MC_SLOW $MC_XTERM "$@"
199             else
200                continue
201             fi
202             rc=$?
203             MC_FOUND=YES
204             cd "`cat \"$MC_PWD_FILE\"`" && /bin/rm "$MC_PWD_FILE"
205             break
206          fi
207       done
208    fi
209
210    if [ $MC_FOUND = NO ]; then
211       echo "Cannot find mc-wrapper.sh or mc" >&2
212       rc=1
213    fi
214
215    [ -n "$MC_SAVE_TERM" ] && TERM="$MC_SAVE_TERM"
216    unset MC_FOUND MC_PWD_FILE MC_SAVE_TERM MC_SLOW MC_TMP_DIR MC_XTERM
217    return $rc
218 }
219
220
221 tmux() {
222    case "$TERM" in
223       rxvt)
224          TERM=rxvt-unicode command tmux "$@"
225       ;;
226
227       *)
228          command tmux "$@"
229       ;;
230    esac
231 }