forked from kakounedotcom/connect.kak
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkak-shell
executable file
·78 lines (66 loc) · 1.61 KB
/
kak-shell
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/sh
# Environment variables
XDG_DATA_HOME=${XDG_DATA_HOME:-~/.local/share}
KAKOUNE_CONNECT_SCRIPT=$XDG_DATA_HOME/kak/connect/script.sh
main() {
# Interactively set the Kakoune session.
# Support to connect to a session by its index.
if test -z "$KAKOUNE_SESSION"; then
kak_session_list=$(kak -l | sort)
echo 'Kakoune sessions:'
echo_n "$kak_session_list" | number_lines
echo '+ create new session'
echo_n 'Kakoune session:'
read kak_session
if is_number "$kak_session"; then
kak_session=$(echo "$kak_session_list" | get_line "$kak_session")
fi
KAKOUNE_SESSION=$kak_session
fi
# Exit if the Kakoune session is empty.
if test -z "$KAKOUNE_SESSION"; then
exit 1
fi
# Start an interactive shell.
start "$@"
}
start() {
# Start the session in daemon mode.
setsid kak -s "$KAKOUNE_SESSION" -d < /dev/null > /dev/null 2>&1
connect "$@"
}
connect() {
# Alias terminal to connect-detach and enter in the connect environment.
# connect-detach allows to run CLI apps in the same terminal window.
kak -c "$KAKOUNE_SESSION" -e "
connect-set-detach global
connect-terminal $@
"
# Attach the connect terminal command.
# Act as a “boot loader”.
if test -e "$KAKOUNE_CONNECT_SCRIPT"; then
attach
fi
}
attach() {
mv "$KAKOUNE_CONNECT_SCRIPT" "$KAKOUNE_CONNECT_SCRIPT~"
sh "$KAKOUNE_CONNECT_SCRIPT~"
rm -f "$KAKOUNE_CONNECT_SCRIPT~"
}
# Utilities
echo() {
printf '%s\n' "$*"
}
echo_n() {
printf '%s' "$*"
}
is_number() {
test "$1" -eq "$1" 2> /dev/null
}
number_lines() {
awk '{ print NR, $0 }'
}
get_line() {
sed "${1}q;d"
}
main "$@"