summaryrefslogtreecommitdiff
path: root/.local/bin/kx
blob: 139039699dc0c999749e382555747c9147f1b8fc (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
#!/bin/sh
state_dir="${XDG_STATE_HOME:-$HOME/.local/state}"
contexts_dir="$state_dir/contexts"
mkdir -p "$contexts_dir"

new_context() {
  echo new_context 1>&2
  : "${1:?I require a context name}"
  dir="${contexts_dir}/${1}"
  if [ -d "${dir}" ]
  then notify-send "ctx" "${dir} already exists!"
  else mkdir -p "${dir}"
       echo "$1" > "${dir}/name"
       ln -nsf "${dir}" "${state_dir}/context"
  fi
}
set_context() {
  echo set_context 1>&2
  : "${1:?I require a context name}"
  dir="${contexts_dir}/${1}"
  if [ -d "${dir}" ]
  then ln -nsf "${dir}" "${state_dir}/context"
  else notify-send "ctx" "${dir} does not exists!"
  fi
}

{
if [ "$1" ]
then echo "$1"
else ls "$contexts_dir" | dmenu -p "switch to contex: " -l 20
fi
} |
  while read -r context
  do case "$context" in
    +*) new_context "${context#+}" ;;
    *[![:space:]]*) set_context "$context" ;;
  esac
  done