]> gitweb.fluxo.info Git - utils-x11.git/commitdiff
Full implementation of lightweight session manager
authorSilvio Rhatto <rhatto@riseup.net>
Wed, 7 Mar 2018 07:25:34 +0000 (04:25 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Wed, 7 Mar 2018 07:25:34 +0000 (04:25 -0300)
firefox-profile
session

index a995bde6ea5d2a4ae62d36ff0cfe0d6ad72f2955..9a24a69bbae1f31ac4c354cba947a6b4876dd11f 100755 (executable)
@@ -2,6 +2,11 @@
 # Wrapper around firefox
 #
 
+if ! which firefox &> /dev/null; then
+  echo "Please install firefox"
+  exit 1
+fi
+
 if [ ! -z "$1" ]; then
   iceweasel -p $1 -new-instance &
 else
diff --git a/session b/session
index be3acfb78b78aa32c6f26f10bd870dec2fa45d1c..8abdde555415929a790a05396a0a08fd055c9c24 100755 (executable)
--- 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