summaryrefslogtreecommitdiff
path: root/bin/kak-shell
blob: 2bf8bd5e03dbc5115bf949d205e1e9ab3ecc1cbc (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/sh

main() {
  prompt_kakoune_session
  [ "$text" ] || exit 1

  connect "$text" "$@"
}

connect() {
  session=$1
  shift
  setsid kak -s "$session" -d < /dev/null > /dev/null 2>&1 &
  wait_for_session "$session"
  kak -c "$session" -e "connect-detach $@"
  sh connect.sh
}

prompt_kakoune_session() {
  kak_session_list=$(kak -l | sort)
  echo 'Kakoune sessions:'
  printf "$kak_session_list" | number_lines
  echo '+ create new session'
  printf 'Kakoune session:'
  read kak_session
  if is_number "$kak_session"; then
    kak_session=$(echo "$kak_session_list" | get_line "$kak_session")
  fi

  text=$kak_session
}

wait_for_session() {
  session=$1

  # Wait for session
  # Grep in quiet mode with fixed strings and whole line switches
  while ! kak -l | grep -q -F -x "$session"; do
    sleep 0.1
  done
}

# Utility functions ────────────────────────────────────────────────────────────

is_number() {
  test "$1" -eq "$1" 2> /dev/null
}

number_lines() {
  awk '{ print NR, $0 }'
}

get_line() {
  sed "${1}q;d"
}

main "$@"