summaryrefslogtreecommitdiffstats
path: root/bashrun.sh
blob: b571a529323b94d9f7a704fb104f566350a29774 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/bin/bash
#
# usage: bashrun [geometry] (default: 40x1)
#
# NOTE: commands entered will have an '&' appended before being run,
# so don't append it yourself, it will fail silently.
# 
# rcfile: $HOME/.bashrunrc
#
# ---------------------------------------------------------------------

GEOM=${1:-40x1}

# create .bashrunrc unless present
BASHRUNRC=$HOME/.bashrunrc
if [ ! -f $BASHRUNRC ]; then
(
cat <<'EOF'
# which X terminal to use:
# (xterm|rxvt|urxvt|mrxvt|aterm|mlterm)
XTERM=urxvtc 

# history file and options:
HISTFILE=$HOME/.bashrun_history
HISTCONTROL=ignoredups:erasedups

# bind <TAB> to menu-complete. Makes <TAB> cycle through completions on
# the current line instead of paging all possible completions
bind '"\t": menu-complete'

# bind <C-g> to send ^D 
# (<C-g> is the default quit-chain-key in emacs, ratpoison, etc)
bind '"\C-g"':"\"\x04\""

# set a simple prompt
PS1=">"

# ***DO NOT EDIT BEYOND THIS LINE***
#
# bind ENTER to add ' &' to command
bind '"\x0d"':"\" &\n\""
EOF
) > $BASHRUNRC
fi

. $BASHRUNRC 

error() { 
    if [ `which zenity` ]; then
        zenity --title bashrun --error --text "$@"
    elif [ `which kdialog` ]; then
        kdialog --title bashrun --error "$@"
    elif [ `which xmessage` ]; then
        xmessage "$@"
    fi
    echo -en "\007"
    echo $@
}

# run bash terminal
if [ "$XTERM" = "xterm" ]; then
    $XTERM -name 'bashrun' \
    -title 'bashrun' \
    -geometry $GEOM \
    -e "/bin/bash --rcfile $BASHRUNRC -i -t"

elif [[ "$XTERM" = "aterm" || "$XTERM" = "mlterm" ]]; then
    $XTERM -name 'bashrun' \
    -title 'bashrun' \
    -geometry $GEOM +sb \
    -e /bin/bash --rcfile $BASHRUNRC -i -t

elif [[ "$XTERM" = "urxvt" || "$XTERM" = "rxvt" ]] || [ "$XTERM" = "urxvtc" ]; then
    $XTERM -name 'bashrun' \
    -title 'bashrun' \
    -geometry $GEOM \
    -e sh -c "/bin/bash --rcfile $HOME/.bashrunrc -i -t"


elif [ "$XTERM" = "mrxvt" ]; then
    $XTERM -name 'bashrun' \
    -title 'bashrun' \
    -geometry $GEOM +sb -ht \
    -e sh -c "/bin/bash --rcfile $BASHRUNRC -i -t"
else
    error "$XTERM is not supported. Please check $BASHRUNRC"
    exit 1
fi

# history cleanup...
# remove trailing whitespace and '&' from the last history line
tac $HISTFILE | sed "1s/\&//;s/ *$//" | tac > $HISTFILE

# HISTCONTROL won't work on its own because bash applies the
# 'ignoredups' and 'erasedups' rules to 'command &'.

# apply 'ignoredups' if set
if [[ "$HISTCONTROL" =~ "ignoredups" || "$HISTCONTROL" =~ "ignoreboth" ]]; then
    uniq $HISTFILE $HISTFILE.tmp
    mv $HISTFILE.tmp $HISTFILE
fi

# apply 'erasedups' if set
if [[ "$HISTCONTROL" =~ "erasedups" ]]; then
    tac $HISTFILE | gawk '!x[$0]++' - | tac > $HISTFILE
fi