mirror of
https://github.com/flynx/bashctrl.git
synced 2025-10-28 10:20:11 +00:00
initial commit...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
827a98b07a
commit
ce22eb7339
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.sw[po]
|
||||
.gitignore
|
||||
200
bashctrl
Normal file
200
bashctrl
Normal file
@ -0,0 +1,200 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT=`basename $0`
|
||||
ORIGPATH=`pwd`
|
||||
|
||||
printhelp () {
|
||||
echo 'Bash Control script'
|
||||
echo 'format:'
|
||||
echo ' bashctrl COMMAND [ARGS]'
|
||||
echo
|
||||
echo 'supported commands:'
|
||||
echo ' help - print this message.'
|
||||
echo ' list - list events and installed plugins.'
|
||||
echo ' script - list the plugins in a runnable bash script format.'
|
||||
echo ' plugins - list available plugins.'
|
||||
echo ' events - list supported events.'
|
||||
echo ' add PLUGIN PRIO EVT'
|
||||
echo ' - install PLUGIN to EVT with PRIO.'
|
||||
echo ' if a plugin is already installed, change its settings.'
|
||||
echo ' NOTE: use a two digit priority (arbitary digit prios'
|
||||
echo ' are not supported by some commands).'
|
||||
echo ' del PLUGIN EVT|all'
|
||||
echo ' - remove PLUGIN from EVT.'
|
||||
echo ' if "all" is given, remove from all events.'
|
||||
# XXX
|
||||
#echo ' setup - setup bashctrl directories.'
|
||||
#echo ' update - update pligins'
|
||||
#echo ' run EVENT'
|
||||
#echo ' - run event scripts'
|
||||
echo
|
||||
echo 'other commands:'
|
||||
echo ' drop-all-plugin-bindings'
|
||||
echo ' - removes all installed plugin bindings.'
|
||||
}
|
||||
|
||||
if [ -z $1 ]; then
|
||||
printhelp
|
||||
exit
|
||||
fi
|
||||
|
||||
cd ~/.bash/
|
||||
|
||||
while true; do
|
||||
if [ -z $1 ]; then
|
||||
break
|
||||
fi
|
||||
case $1 in
|
||||
-h|--help|help)
|
||||
printhelp
|
||||
break
|
||||
;;
|
||||
--add-plugin|add)
|
||||
if [[ $# < 4 ]] ; then
|
||||
echo "$SCRIPT: Error: wrong argument format."
|
||||
exit 1
|
||||
fi
|
||||
# TODO check if such a plugin exists...
|
||||
file=events/${4}/${3}_${2}
|
||||
# remove old version if it exists...
|
||||
# TODO make this silent...
|
||||
plugin=plugins/${2}
|
||||
if [ -r $plugin ]; then
|
||||
evt=`echo events/${4}/*_${2}`
|
||||
for p in $evt; do
|
||||
if [ $p == $evt ] && ! [ -e $p ]; then
|
||||
break
|
||||
fi
|
||||
rm $p
|
||||
done
|
||||
# TODO test this...
|
||||
ln -s ../../$plugin $file
|
||||
else
|
||||
echo "$SCRIPT: Error: plugin \"$2\" does not exist or is not readable."
|
||||
fi
|
||||
break
|
||||
;;
|
||||
|
||||
--del-plugins|del)
|
||||
if [ ${3} = all ] || [ ${3} = '' ] ; then
|
||||
files=`echo events/*/*_${2}`
|
||||
echo "rmoving \"$files\"..."
|
||||
rm $files
|
||||
else
|
||||
files=`echo events/${3}/*_${2}`
|
||||
echo "rmoving \"$files\"..."
|
||||
rm $files
|
||||
fi
|
||||
break
|
||||
;;
|
||||
|
||||
--events|events)
|
||||
echo supported events:
|
||||
for event in events/* ; do
|
||||
if [ $event = "events/run" ]; then
|
||||
continue
|
||||
fi
|
||||
echo " ${event/events\//}"
|
||||
if [ -e ${event}/DOC ] ; then
|
||||
cat ${event}/DOC
|
||||
echo
|
||||
fi
|
||||
done
|
||||
break
|
||||
;;
|
||||
|
||||
--list|list)
|
||||
echo installed plugins:
|
||||
for event in events/* ; do
|
||||
if [ $event = "events/run" ]; then
|
||||
continue
|
||||
fi
|
||||
echo " ${event/events\//}"
|
||||
for plugin in ${event}/* ; do
|
||||
plugin=`basename $plugin`
|
||||
if [[ $plugin == 'DOC' ]] ; then
|
||||
continue
|
||||
fi
|
||||
echo " $plugin"
|
||||
done
|
||||
done
|
||||
break
|
||||
;;
|
||||
|
||||
--script|script)
|
||||
echo '#!/bin/bash'
|
||||
echo '# this script will setup a bash plugin configuration.'
|
||||
echo '# generated by: bashctrl script'
|
||||
echo '#'
|
||||
echo '# if you want to do a clean install uncomment the next line...'
|
||||
echo '##bashctrl drop-all-plugin-bindings'
|
||||
for event in events/* ; do
|
||||
if [ $event = "events/run" ]; then
|
||||
continue
|
||||
fi
|
||||
echo
|
||||
echo "# event: ${event/events\//}"
|
||||
for plugin in ${event}/* ; do
|
||||
plugin=`basename $plugin`
|
||||
if [[ $plugin == 'DOC' ]] ; then
|
||||
continue
|
||||
fi
|
||||
echo "bashctrl add ${plugin/??_/} ${plugin/_*/} ${event/events\//}"
|
||||
done
|
||||
done
|
||||
echo
|
||||
break
|
||||
;;
|
||||
|
||||
--drop-all-plugin-bindings|drop-all-plugin-bindings)
|
||||
read -p "are you sure you want to remove all current bash plugin bindings? (yes/No) " ans
|
||||
if [[ $ans == 'yes' ]] ; then
|
||||
rm -f ~/.bash/events/*/*
|
||||
else
|
||||
echo "not doing anything..."
|
||||
fi
|
||||
break
|
||||
;;
|
||||
|
||||
|
||||
--list-plugins|plugins)
|
||||
echo available plugins:
|
||||
for plugin in plugins/* ; do
|
||||
plugin=`basename $plugin`
|
||||
if [ $plugin = "README" ]; then
|
||||
continue
|
||||
fi
|
||||
echo " ${plugin}"
|
||||
done
|
||||
break
|
||||
;;
|
||||
|
||||
|
||||
setup)
|
||||
mkdir -p \
|
||||
~/.bash/{commands,dat,local,plugins}/ \
|
||||
~/.bash/events/{start,login,logout,end}/
|
||||
break
|
||||
;;
|
||||
|
||||
|
||||
update)
|
||||
break
|
||||
;;
|
||||
|
||||
|
||||
run)
|
||||
if [ -z $2 ] ; then
|
||||
echo 'bashctrl: no EVENT given.' >&2
|
||||
exit 1
|
||||
fi
|
||||
for plugin in events/$2/* ; do
|
||||
source $plugin $2
|
||||
done
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
cd $ORIGPATH
|
||||
52
plugins/alias
Normal file
52
plugins/alias
Normal file
@ -0,0 +1,52 @@
|
||||
#======================================================================
|
||||
# File: alias_man.sh
|
||||
# Written By: Alex A. Naanou <alex_nanou@yahoo.com>
|
||||
#======================================================================
|
||||
|
||||
# start
|
||||
if [ $1 = "start" ] || [ $1 = 'login' ] ; then
|
||||
if [ -z $__ALIAS_RUN__ ]; then
|
||||
__ALIAS_RUN__='yes'
|
||||
|
||||
# internal
|
||||
#alias management:
|
||||
alias alias_save="alias > ~/.bash/alias_lst"
|
||||
alias alias_save_bak="alias > ~/.bash/alias_lst.bak"
|
||||
alias alias_clear="mv ~/.bash/alias_lst ~/.bash/alias_lst.bak"
|
||||
alias alias_revert="cp ~/.bash/alias_lst.bak ~/.bash/alias_lst"
|
||||
|
||||
# external
|
||||
if ! source ~/.bash/alias_lst ; then
|
||||
# defaults
|
||||
echo "loading backup aliases..."
|
||||
if ! source ~/.bash/alias_lst.bak ; then
|
||||
echo "loading default aliases..."
|
||||
alias l="ls --color=auto"
|
||||
alias ll="ls --color=auto -l"
|
||||
alias scp="printf \"\e]2;scp in progress at \${USER}@\${HOSTNAME} (\`pwd\`)\a\";scp"
|
||||
alias talk="printf \"\e]2;talking at \${USER}@\${HOSTNAME} (\`pwd\`)\a\";talk"
|
||||
alias cdrdao='printf "\e]2;cdrdao at \${USER}@${HOSTNAME} (\`pwd\`)\a";cdrdao'
|
||||
alias cdrecord='printf "\e]2;cdrecord at \${USER}@${HOSTNAME} (\`pwd\`)\a";cdrecord'
|
||||
alias_save
|
||||
cp ~/.bash/alias_lst ~/.bash/alias_lst.bak
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ $1 = "logout" ] || [ $1 = "end" ] ; then
|
||||
if [ -z $__ALIAS_UNRUN__ ]; then
|
||||
__ALIAS_UNRUN__='yes'
|
||||
|
||||
if [[ $SAVE != "no" ]] ; then
|
||||
echo "saving settings..."
|
||||
alias_save
|
||||
bind_save
|
||||
else
|
||||
echo "aborting save..."
|
||||
sleep 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#=================================================================END==
|
||||
true
|
||||
33
plugins/bindings
Normal file
33
plugins/bindings
Normal file
@ -0,0 +1,33 @@
|
||||
#======================================================================
|
||||
# File: bindings.sh
|
||||
# Written By: Alex A. Naanou <alex_nanou@yahoo.com>
|
||||
#======================================================================
|
||||
|
||||
#===============================================================START==
|
||||
# internal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
#bind -x '"\C-b": SAVE="no";logout'
|
||||
|
||||
#mapping management:
|
||||
alias bind_save="bind -p > ~/.bash/bind_lst"
|
||||
alias bind_save_bak="bind -p > ~/.bash/bind_lst.bak"
|
||||
alias bind_clear="read -p 'This may render your shell unusable! are you shure? (yes/no): ' -n 4 answer;test $answer='yes'&&echo boo"
|
||||
alias bind_revert="bind -f ~/.bash/bind_lst.bak;cp ~/.bash/bind_lst.bak ~/.bash/bind_lst"
|
||||
|
||||
|
||||
# external - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
if [ -a ~/.bash/bind_lst ] ; then
|
||||
bind -f ~/.bash/bind_lst
|
||||
else
|
||||
echo "loading backup bindings..."
|
||||
if [ -a ~/.bash/bind_lst.bak ] ; then
|
||||
bind -f ~/.bash/bind_lst.bak
|
||||
else
|
||||
echo "loading default bindings..."
|
||||
# put your default bindings here...
|
||||
#
|
||||
cp ~/.bash/bind_lst ~/.bash/bind_lst.bak
|
||||
fi
|
||||
fi
|
||||
|
||||
#=================================================================END==
|
||||
true
|
||||
58
plugins/cd_func
Normal file
58
plugins/cd_func
Normal file
@ -0,0 +1,58 @@
|
||||
# This function defines a 'cd' replacement function capable of keeping,
|
||||
# displaying and accessing history of visited directories, up to 10 entries.
|
||||
# To use it, uncomment it, source this file and try 'cd --'.
|
||||
# acd_func 1.0.5, 10-nov-2004
|
||||
# Petar Marinov, http:/geocities.com/h2428, this is public domain
|
||||
cd_func ()
|
||||
{
|
||||
local x2 the_new_dir adir index
|
||||
local -i cnt
|
||||
|
||||
if [[ $1 == "--" ]]; then
|
||||
dirs -v
|
||||
return 0
|
||||
fi
|
||||
|
||||
the_new_dir=$1
|
||||
[[ -z $1 ]] && the_new_dir=$HOME
|
||||
|
||||
if [[ ${the_new_dir:0:1} == '-' ]]; then
|
||||
#
|
||||
# Extract dir N from dirs
|
||||
index=${the_new_dir:1}
|
||||
[[ -z $index ]] && index=1
|
||||
adir=$(dirs +$index)
|
||||
[[ -z $adir ]] && return 1
|
||||
the_new_dir=$adir
|
||||
fi
|
||||
|
||||
#
|
||||
# '~' has to be substituted by ${HOME}
|
||||
[[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"
|
||||
|
||||
#
|
||||
# Now change to the new dir and add to the top of the stack
|
||||
pushd "${the_new_dir}" > /dev/null
|
||||
[[ $? -ne 0 ]] && return 1
|
||||
the_new_dir=$(pwd)
|
||||
|
||||
#
|
||||
# Trim down everything beyond 11th entry
|
||||
popd -n +11 2>/dev/null 1>/dev/null
|
||||
|
||||
#
|
||||
# Remove any other occurence of this dir, skipping the top of the stack
|
||||
for ((cnt=1; cnt <= 10; cnt++)); do
|
||||
x2=$(dirs +${cnt} 2>/dev/null)
|
||||
[[ $? -ne 0 ]] && return 0
|
||||
[[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
|
||||
if [[ "${x2}" == "${the_new_dir}" ]]; then
|
||||
popd -n +$cnt 2>/dev/null 1>/dev/null
|
||||
cnt=cnt-1
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
alias cd=cd_func
|
||||
1
plugins/env
Normal file
1
plugins/env
Normal file
@ -0,0 +1 @@
|
||||
export HISTCONTROL=ignoredups
|
||||
4
plugins/fortune
Normal file
4
plugins/fortune
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
if [[ $BASH_LOGIN == 1 ]] || [[ $BASH_PROFILE == 1 ]] ;then
|
||||
[ -f ~/.greet ] && cat ~/.greet || fortune
|
||||
fi
|
||||
40
plugins/prompt
Normal file
40
plugins/prompt
Normal file
@ -0,0 +1,40 @@
|
||||
#======================================================================
|
||||
# File: prompt.sh
|
||||
# Written By: Alex A. Naanou <alex_nanou@yahoo.com>
|
||||
#======================================================================
|
||||
|
||||
|
||||
#===============================================================START==
|
||||
# level indicator
|
||||
if [[ $TERM == 'screen' ]]; then
|
||||
__SCREEN__="s "
|
||||
export __SCREEN__
|
||||
fi
|
||||
if [[ $BASH_PROFILE == 1 ]] ; then
|
||||
if [[ $SHLVL != 1 ]];then
|
||||
if [[ -z $__LOGIN_PRESENT__ ]];then
|
||||
__SHLVL__="($SHLVL)* "
|
||||
else
|
||||
__SHLVL__="($SHLVL*)* "
|
||||
fi
|
||||
export __LOGIN_PRESENT__="*"
|
||||
fi
|
||||
if [[ $TERM == xterm ]] ; then
|
||||
PS1='\e]2;\u@\h (\w)\a\n\e[32m\u@\h \e[34m$__SHLVL__\e[33m\w\e[0m\n\$ '
|
||||
else
|
||||
PS1='\n\e[32m\u@\h \e[34m$__SHLVL__\e[33m\w\e[0m\n\$ '
|
||||
fi
|
||||
fi
|
||||
if [[ $BASHRC == 1 ]] ; then
|
||||
if [[ $SHLVL != 1 ]];then
|
||||
__SHLVL__="($SHLVL$__LOGIN_PRESENT__) "
|
||||
fi
|
||||
if [[ $TERM == xterm ]] ; then
|
||||
PS1='\e]2;\u@\h (\w)\a\n\e[32m\u@\h \e[34m$__SCREEN__$__SHLVL__\e[33m\w\e[0m\n\$ '
|
||||
else
|
||||
PS1='\n\e[32m\u@\h \e[34m$__SCREEN__$__SHLVL__\e[33m\w\e[0m\n\$ '
|
||||
fi
|
||||
fi
|
||||
|
||||
#=================================================================END==
|
||||
true
|
||||
26
plugins/ssh-agent
Normal file
26
plugins/ssh-agent
Normal file
@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
function run_sshagent()
|
||||
{
|
||||
echo "alias echo=#" > ~/.bash/tmp/ssh-agent.tmp
|
||||
ssh-agent >> ~/.bash/tmp/ssh-agent.tmp
|
||||
echo "unalias echo" >> ~/.bash/tmp/ssh-agent.tmp
|
||||
sleep 1
|
||||
ssh-add
|
||||
}
|
||||
|
||||
# check if an agent is running
|
||||
if ! source ~/.bash/tmp/ssh-agent.tmp ; then
|
||||
#echo initiating ssh-ahent
|
||||
echo "starting ssh-agent... [${SSH_AGENT_PID}]"
|
||||
run_sshagent
|
||||
source ~/.bash/tmp/ssh-agent.tmp
|
||||
else
|
||||
ps_string=`ps | grep $SSH_AGENT_PID`
|
||||
if [[ ${ps_string/*ssh-agent/ssh-agent} != 'ssh-agent' ]] ; then
|
||||
#echo initiating ssh-ahent
|
||||
echo "starting ssh-agent... [${SSH_AGENT_PID}]"
|
||||
run_sshagent
|
||||
source ~/.bash/tmp/ssh-agent.tmp
|
||||
fi
|
||||
fi
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user