summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Ochiel <nochiel@users.noreply.github.com>2017-09-23 17:26:57 +0300
committerNicholas Ochiel <nochiel@users.noreply.github.com>2017-11-15 06:10:26 +0300
commitd9a574acd5bfd01aa7217c571bea2832a3aed1be (patch)
treeb1ffeccc2533dccbc16ff20c747d5e8b472deb35
parent9c964e97f000271d73b6a16f4692e72aeeb3e277 (diff)
Integration with GNU screen; based on tmux.kak
- Hack: kak sets `/proc/self/fd/0 -> /dev/null`. Get the client process tty because Screen needs to know the controlling terminal. Else Screen will use the last known tty and will open new windows on a different terminal if one is connected.
-rw-r--r--rc/base/screen.kak50
1 files changed, 50 insertions, 0 deletions
diff --git a/rc/base/screen.kak b/rc/base/screen.kak
new file mode 100644
index 00000000..b60fbd1e
--- /dev/null
+++ b/rc/base/screen.kak
@@ -0,0 +1,50 @@
+# http://gnu.org/software/screen/
+# ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+
+hook global KakBegin .* %{
+ %sh{
+ [ -z "kak_client_env_$STY" ] && exit
+ echo "
+ alias global focus screen-focus
+ alias global new screen-new-vertical
+ "
+ }
+}
+
+
+def screen-new-vertical -params .. -command-completion -docstring "Create a new vertical region" %{
+ %sh{
+
+ tty="$(ps -o tty ${kak_client_pid} | tail -n 1)"
+ screen -X eval 'split -h' 'focus down' "screen kak -c \"${kak_session}\" -e \"$*\"" < "/dev/$tty"
+ }
+}
+
+def screen-new-horizontal -params .. -command-completion -docstring "Create a new horizontal region" %{
+ %sh{
+ tty="$(ps -o tty ${kak_client_pid} | tail -n 1)"
+ screen -X eval 'split -v' 'focus right' "screen kak -c \"${kak_session}\" -e \"$*\"" < "/dev/$tty"
+ }
+}
+
+def screen-new-window -params .. -command-completion -docstring "Create a new window" %{
+ %sh{
+ tty="$(ps -o tty ${kak_client_pid} | tail -n 1)"
+ screen -X screen kak -c "${kak_session}" -e "$*" < "/dev/$tty"
+ }
+}
+
+def -docstring %{screen-focus [<client>]: focus the given client
+If no client is passed then the current one is used} \
+ -params ..1 -client-completion \
+ screen-focus %{ %sh{
+ if [ $# -eq 1 ]; then
+ printf %s\\n "
+ evaluate-commands -client '$1' %{ %sh{
+ screen -X focus
+ }}"
+ elif [ -n "kak_client_env_$STY" ]; then
+ tty="$(ps -o tty ${kak_client_pid} | tail -n 1)"
+ screen -X select "$kak_client_env_WINDOW" < "$/dev/$tty"
+ fi
+} }