From 50e5bf376fa30c1bac70926cf5c9e6340df598b3 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Wed, 7 Mar 2018 04:25:34 -0300 Subject: Full implementation of lightweight session manager --- session | 119 ++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 48 deletions(-) (limited to 'session') 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] " +# 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] " 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 -- cgit v1.2.3