From a673e8bc9a67c808ff1b3d26ef581318a884b15e Mon Sep 17 00:00:00 2001 From: Will Richardson Date: Fri, 8 Mar 2024 11:44:29 +0000 Subject: [PATCH] Initial commit --- Containerfile.dev | 4 ++ main.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++ pods.yaml | 14 +++++++ program.py | 1 + test.conf | 39 +++++++++++++++++++ tmux.conf | 50 +++++++++--------------- 6 files changed, 175 insertions(+), 31 deletions(-) create mode 100644 Containerfile.dev create mode 100644 main.py create mode 100644 pods.yaml create mode 100644 program.py create mode 100644 test.conf diff --git a/Containerfile.dev b/Containerfile.dev new file mode 100644 index 0000000..14fd2b0 --- /dev/null +++ b/Containerfile.dev @@ -0,0 +1,4 @@ +FROM docker.io/python:latest +WORKDIR /src +ENTRYPOINT ["python", "main.py"] + diff --git a/main.py b/main.py new file mode 100644 index 0000000..6481965 --- /dev/null +++ b/main.py @@ -0,0 +1,98 @@ +import ast +import sys +import textwrap + +class Program: + def __init__(self): + self.session = 'test-session' + self.buffer = [] + self.index = 0 + + def next_window_index(self): + self.index += 1 + return self.index + def write(self, contents): + self.buffer.append(textwrap.dedent(contents)) + def to_string(self): + return '\n'.join(self.buffer) + + def add_header(self): + self.write("""\ + new-session -d -n %s 'read && tmux wait-for -S %s' + set -g display-time 0 + set -g focus-events on + """ % (self.session, self.session)) + + def push_constant(self, value): + index = self.next_window_index() + self.write("""\ + new-window 'tmux wait-for %s' + set-hook -t :=%s pane-focus-in { + run "tmux set-buffer '%s'" + run 'tmux next-window' + } + """ % (self.session, index, value)) + + def store_top(self, out_index=None): + index = self.next_window_index() + self.write("""\ + new-window 'tmux wait-for %s' + set-hook -t :=%s pane-focus-in { + run 'tmux rename-window -t :=%s "#{buffer_sample}"' + run 'tmux delete-buffer' + run 'tmux next-window' + } + """ % (self.session, index, index + 1 if out_index is None else out_index)) + + def maths_op(self, op): + index = self.next_window_index() + self.write("""\ + new-window 'tmux wait-for %s' + set-hook -t :=%s pane-focus-in { + run 'tmux rename-window -t :=4 "#{e|%s:#{buffer_sample},#{window_name}}"' + run 'tmux delete-buffer' + run 'tmux set-buffer "#{window_name}"' + run 'tmux next-window' + } + """ % (self.session, index, op)) + + def print(self): + index = self.next_window_index() + self.write("""\ + new-window 'tmux wait-for %s' + set-hook -t :=%s pane-focus-in { + run 'tmux display -F "#{buffer_sample}"' + run 'tmux delete-buffer' + run 'tmux next-window' + } + """ % (self.session, index)) + + def ifeq(self): + pass + #new-window 'tmux wait-for test-session' + #set-hook -t :=4 pane-focus-in { + # run 'tmux select-window -t "#{?#{e|==:#{buffer_sample},#{window_name}},:=5,:=6}"' + # run 'tmux delete-buffer' + #} + + +p = Program() +p.add_header() +p.push_constant(1) +p.push_constant(2) +p.store_top() +p.maths_op('+') +p.print() +p.write('select-window -t :=0') + +print(p.to_string()) + + +with open(sys.argv[1]) as f: + tree = ast.parse(f.read()) + +print(ast.dump(tree, indent=2)) + +with open(sys.argv[2], 'wt') as o: + o.write(p.to_string()) + diff --git a/pods.yaml b/pods.yaml new file mode 100644 index 0000000..3765217 --- /dev/null +++ b/pods.yaml @@ -0,0 +1,14 @@ +containers: + dev: + name: tmux-compiler-dev + image: docker.io/library/python:latest + interactive: true + autoremove: true + bind_mounts: + # binding the source directory lets us re-run changes without rebuilding + .: /src + run_flags: + entrypoint: + - python + - main.py + workdir: /src diff --git a/program.py b/program.py new file mode 100644 index 0000000..7a7a4b8 --- /dev/null +++ b/program.py @@ -0,0 +1 @@ +print(1 + 2) diff --git a/test.conf b/test.conf new file mode 100644 index 0000000..a2fdfa2 --- /dev/null +++ b/test.conf @@ -0,0 +1,39 @@ +new-session -d -n test-session 'read && tmux wait-for -S test-session' +set -g display-time 0 +set -g focus-events on + +new-window 'tmux wait-for test-session' +set-hook -t :=1 pane-focus-in { + run "tmux set-buffer '1'" + run 'tmux next-window' +} + +new-window 'tmux wait-for test-session' +set-hook -t :=2 pane-focus-in { + run "tmux set-buffer '2'" + run 'tmux next-window' +} + +new-window 'tmux wait-for test-session' +set-hook -t :=3 pane-focus-in { + run 'tmux rename-window -t :=4 "#{buffer_sample}"' + run 'tmux delete-buffer' + run 'tmux next-window' +} + +new-window 'tmux wait-for test-session' +set-hook -t :=4 pane-focus-in { + run 'tmux rename-window -t :=4 "#{e|+:#{buffer_sample},#{window_name}}"' + run 'tmux delete-buffer' + run 'tmux set-buffer "#{window_name}"' + run 'tmux next-window' +} + +new-window 'tmux wait-for test-session' +set-hook -t :=5 pane-focus-in { + run 'tmux display -F "#{buffer_sample}"' + run 'tmux delete-buffer' + run 'tmux next-window' +} + +select-window -t :=0 \ No newline at end of file diff --git a/tmux.conf b/tmux.conf index ab5f005..ca76d03 100644 --- a/tmux.conf +++ b/tmux.conf @@ -11,7 +11,7 @@ set-hook -t :=1 pane-focus-in { # push 2 new-window 'tmux wait-for test-session' set-hook -t :=2 pane-focus-in { - run "tmux set-buffer '1'" + run "tmux set-buffer '2'" run 'tmux next-window' } # store top @@ -21,40 +21,28 @@ set-hook -t :=3 pane-focus-in { run 'tmux delete-buffer' run 'tmux next-window' } -# # add -# new-window 'tmux wait-for test-session' -# set-hook -t :=4 pane-focus-in { -# run 'tmux rename-window -t :=4 "#{e|+:#{buffer_sample},#{window_name}}"' -# run 'tmux delete-buffer' -# run 'tmux set-buffer "#{window_name}"' -# run 'tmux next-window' -# } -# comp +# add new-window 'tmux wait-for test-session' set-hook -t :=4 pane-focus-in { - run 'tmux select-window -t "#{?#{e|==:#{buffer_sample},#{window_name}},:=5,:=6}"' + run 'tmux rename-window -t :=4 "#{e|+:#{buffer_sample},#{window_name}}"' run 'tmux delete-buffer' + run 'tmux set-buffer "#{window_name}"' + run 'tmux next-window' } -new-window -new-window +# comp + #new-window 'tmux wait-for test-session' + #set-hook -t :=4 pane-focus-in { + # run 'tmux select-window -t "#{?#{e|==:#{buffer_sample},#{window_name}},:=5,:=6}"' + # run 'tmux delete-buffer' + #} + #new-window + #new-window # # display -# new-window 'tmux wait-for test-session' -# set-hook -t :=5 pane-focus-in { -# run 'tmux display -F "#{buffer_sample}"' -# run 'tmux delete-buffer' -# run 'tmux next-window' -# } +new-window 'tmux wait-for test-session' +set-hook -t :=5 pane-focus-in { + run 'tmux display -F "#{buffer_sample}"' + run 'tmux delete-buffer' + run 'tmux next-window' +} select-window -t :=0 - - -# new-window -# new-window -# set-hook -t :=0 pane-focus-in { -# rename-window -t :=1 firstbutt -# run "tmux select-window -t :=1" -# } -# set-hook -t :=1 pane-focus-in { -# display "oh no" -# } -#