aboutsummaryrefslogtreecommitdiff
path: root/session
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2018-03-07 04:25:34 -0300
committerSilvio Rhatto <rhatto@riseup.net>2018-03-07 04:25:34 -0300
commit50e5bf376fa30c1bac70926cf5c9e6340df598b3 (patch)
treeae85eca9d808bf5e7fd7bdadf916c157b9c867a4 /session
parentec8a314bc18e86fdb4460a9feabe7d9faed09eec (diff)
downloadutils-x11-50e5bf376fa30c1bac70926cf5c9e6340df598b3.tar.gz
utils-x11-50e5bf376fa30c1bac70926cf5c9e6340df598b3.tar.bz2
Full implementation of lightweight session manager
Diffstat (limited to 'session')
-rwxr-xr-xsession119
1 files changed, 71 insertions, 48 deletions
diff --git a/session b/session
index be3acfb..8abdde5 100755
--- a/session
+++ b/session
@@ -1,45 +1,59 @@
#!/bin/bash
#
+# A lightweight session manager.
# Open a work session, which might consist of VIM, tmux, etc sessions.
#
# Parameters
NAME="$0"
BASENAME="`basename $0`"
+IGNORE="$HOME/.config/session-ignore"
+
+function __session_not_ignored {
+ if [ -z "$1" ]; then
+ return 1
+ fi
+
+ if grep -q "^$1$" $IGNORE; then
+ return 1
+ fi
+
+ return 0
+}
-# TODO: config file to restrict which sessions we'll use
-# TODO: sort by session name, listing applications for each session
function __session_query {
# VIM
- if [ -e "$HOME/.local/share/vim/sessions" ]; then
+ if __session_not_ignored vim && [ -e "$HOME/.local/share/vim/sessions" ]; then
ls -1 $HOME/.local/share/vim/sessions | sed -e 's/\.vim//g'
fi
# Tmux
- if [ -d "$HOME/.tmux" ]; then
+ if __session_not_ignored tmux && [ -d "$HOME/.tmux" ]; then
ls -1 $HOME/.tmux
fi
- # TODO
# Screen
+ #if __session_not_ignored screen && [ -d "$HOME/.screen" ]; then
+ # ls -1 $HOME/.screen
+ #fi
# Luakit
- if [ -d "$HOME/.local/share/luakit/sessions" ]; then
+ if __session_not_ignored luakit && [ -d "$HOME/.local/share/luakit/sessions" ]; then
ls -1 $HOME/.local/share/luakit/sessions
fi
# Qutebrowser
- if [ -d "$HOME/.local/share/qutebrowser" ]; then
+ if __session_not_ignored qutebrowser && [ -d "$HOME/.local/share/qutebrowser" ]; then
ls -1 $HOME/.local/share/qutebrowser
fi
# Chromium
- if [ -d "$HOME/.config/chromium-profiles" ]; then
+ if __session_not_ignored chromium && [ -d "$HOME/.config/chromium-profiles" ]; then
ls -1 $HOME/.config/chromium-profiles
fi
# Firefox
- if [ -d "$HOME/.mozilla/firefox/profiles" ]; then
+ if __session_not_ignored firefox && [ -d "$HOME/.mozilla/firefox/profiles" ]; then
ls -1 $HOME/.mozilla/firefox/profiles
fi
}
@@ -50,49 +64,49 @@ function __session_list {
echo -en "$n. $session:"
# Check VIM session
- if [ -e "$HOME/.local/share/vim/sessions/$session.vim" ]; then
+ if __session_not_ignored vim && [ -e "$HOME/.local/share/vim/sessions/$session.vim" ]; then
echo -n " vim"
#else
# echo " -"
fi
# Check tmux session
- if [ -e "$HOME/.tmux/$session" ]; then
+ if __session_not_ignored tmux && [ -e "$HOME/.tmux/$session" ]; then
echo -n " tmux"
#else
# echo " -"
fi
# Screen
- if [ -e "$HOME/.screen/$session" ]; then
+ if __session_not_ignored screen && [ -e "$HOME/.screen/$session" ]; then
echo -n " screen"
#else
# echo " -"
fi
# Luakit
- if [ -e "$HOME/.local/share/luakit/sessions/$session" ]; then
+ if __session_not_ignored luakit && [ -e "$HOME/.local/share/luakit/sessions/$session" ]; then
echo -n " luakit"
#else
# echo " -"
fi
# Qutebrowser
- if [ -d "$HOME/.local/share/qutebrowser/$session" ]; then
+ if __session_not_ignored qutebrowser && [ -d "$HOME/.local/share/qutebrowser/$session" ]; then
echo -n " qutebrowser"
#else
# echo " -"
fi
# Chromium
- if [ -d "$HOME/.config/chromium-profiles/$session" ]; then
+ if __session_not_ignored chromium && [ -d "$HOME/.config/chromium-profiles/$session" ]; then
echo -n " chromium"
#else
# echo " -"
fi
# Firefox
- if [ -d "$HOME/.mozilla/firefox/profiles/$session" ]; then
+ if __session_not_ignored firefox && [ -d "$HOME/.mozilla/firefox/profiles/$session" ]; then
echo -n " firefox"
#else
# echo " -"
@@ -103,8 +117,7 @@ function __session_list {
done | column -t -c 6 #| sed -e 's/^/\t/'
}
-# TODO
-function __session_choser {
+function __session_chooser {
__session_list
read -rep "Choose session: " n
@@ -117,62 +130,72 @@ function __session_choser {
fi
}
-# TODO: config file to restrict which sessions we'll use
-# TODO: check if the program is installed before running it
function __session_open {
SESSION="$1"
# Check VIM session
- if [ -e "$HOME/.local/share/vim/sessions/$SESSION.vim" ]; then
- terminal vim -S $HOME/.local/share/vim/sessions/$SESSION.vim &
+ if __session_not_ignored vim && [ -e "$HOME/.local/share/vim/sessions/$SESSION.vim" ]; then
+ if which vim &> /dev/null; then
+ terminal vim -S $HOME/.local/share/vim/sessions/$SESSION.vim &
+ fi
fi
# Check tmux session
- if [ -e "$HOME/.tmux/$SESSION" ]; then
- terminal shell $SESSION &
+ if __session_not_ignored tmux && [ -e "$HOME/.tmux/$SESSION" ]; then
+ if which tmux &> /dev/null; then
+ terminal shell $SESSION &
+ fi
fi
- # TODO
# Screen
+ #if __session_not_ignored screen && [ -e "$HOME/.screen/$SESSION" ]; then
+ # if which screen &> /dev/null; then
+ # terminal shell $SESSION &
+ # fi
+ #fi
# Luakit
# TODO: how to open luakit in a given session from the command line?
- #if [ -e "$HOME/.local/share/luakit/sessions/$SESSION" ]; then
+ #if __session_not_ignored luakit && [ -e "$HOME/.local/share/luakit/sessions/$SESSION" ]; then
+ # if which luakit &> /dev/null; then
+ # fi
#fi
- # TODO
# Qutebrowser
- #if [ -d "$HOME/.local/share/qutebrowser/$SESSION" ]; then
- # qutebrowser -r $SESSION
- #fi
+ if __session_not_ignored qutebrowser && [ -d "$HOME/.local/share/qutebrowser/$SESSION" ]; then
+ if which qutebrowser &> /dev/null; then
+ qutebrowser -r $SESSION
+ fi
+ fi
- # TODO
# Chromium
- #if [ -d "$HOME/.config/chromium-profiles/$SESSION" ]; then
- # chromium-profile $SESSION
- #fi
+ if __session_not_ignored chromium && [ -d "$HOME/.config/chromium-profiles/$SESSION" ]; then
+ if which chromium-profile &> /dev/null; then
+ chromium-profile $SESSION
+ fi
+ fi
- # TODO
# Firefox
- #if [ -d "$HOME/.mozilla/firefox/profiles" ]; then
- # firefox-profile $SESSION
- #fi
+ if __session_not_ignored firefox && [ -d "$HOME/.mozilla/firefox/profiles" ]; then
+ firefox-profile $SESSION
+ fi
}
-# Check syntax
-if [ -z "$1" ]; then
- echo "usage: $BASENAME [--list|--choser] <session>"
+# Dispatch
+if [ "$BASENAME" == "session-list" ]; then
+ __session_list
+elif [ ! -z "$1" ] && [ "$BASENAME" == "session-chooser" ]; then
+ __session_chooser
+elif [ ! -z "$1" ] && echo "$1" | grep -q -- '--list'; then
+ __session_list
+elif [ ! -z "$1" ] && echo "$1" | grep -q -- '--chooser'; then
+ __session_chooser
+elif [ -z "$1" ]; then
+ echo "usage: $BASENAME [--list|--chooser] <session>"
echo "available sessions:"
echo ""
__session_list
exit 1
-fi
-
-# Dispatch
-if echo "$1" | grep -q -- '--list'; then
- __session_list
-elif echo "$1" | grep -q -- '--choser'; then
- __session_choser
else
__session_open $*
fi