Files
herolib/examples/osal/tmux/tmux_pane_resize.vsh
2025-10-12 12:30:19 +03:00

144 lines
4.4 KiB
GLSL
Executable File

#!/usr/bin/env -S v -n -w -gc none -cc tcc -d use_openssl -enable-globals run
import incubaid.herolib.osal.tmux
import time
println('=== Tmux Pane Resizing Example ===')
mut t := tmux.new()!
if !t.is_running()! {
println('Starting tmux server...')
t.start()!
}
if t.session_exist('resize_demo') {
println('Deleting existing resize_demo session...')
t.session_delete('resize_demo')!
}
// Create session and window
println('Creating resize_demo session...')
mut session := t.session_create(name: 'resize_demo')!
println('Creating main window...')
mut window := session.window_new(name: 'main', cmd: 'bash', reset: true)!
time.sleep(500 * time.millisecond)
t.scan()!
// Create a 2x2 grid of panes
println('\n=== Creating 2x2 Grid of Panes ===')
// Split horizontally first (left | right)
mut right_pane := window.pane_split_horizontal('htop')!
time.sleep(300 * time.millisecond)
// Split left pane vertically (top-left, bottom-left)
window.scan()!
if window.panes.len > 1 {
mut left_pane := window.panes[1] // The original bash pane
left_pane.select()!
time.sleep(200 * time.millisecond)
}
mut bottom_left_pane := window.pane_split_vertical('top')!
time.sleep(300 * time.millisecond)
// Split right pane vertically (top-right, bottom-right)
window.scan()!
for mut pane in window.panes {
if pane.cmd.contains('htop') {
pane.select()!
break
}
}
time.sleep(200 * time.millisecond)
mut bottom_right_pane := window.pane_split_vertical('tail -f /var/log/system.log')!
time.sleep(500 * time.millisecond)
window.scan()!
println('Created 2x2 grid with ${window.panes.len} panes:')
for i, pane in window.panes {
println(' Pane ${i}: ID=%${pane.id}, Cmd="${pane.cmd}"')
}
// Demonstrate resizing operations
println('\n=== Demonstrating Pane Resizing ===')
// Get references to panes for resizing
window.scan()!
if window.panes.len >= 4 {
mut top_left := window.panes[1] // bash
mut top_right := window.panes[0] // htop
mut bottom_left := window.panes[2] // top
mut bottom_right := window.panes[3] // tail
println('Resizing top-left pane (bash) to be wider...')
top_left.select()!
time.sleep(200 * time.millisecond)
top_left.resize_right(10)!
time.sleep(1000 * time.millisecond)
println('Resizing top-right pane (htop) to be taller...')
top_right.select()!
time.sleep(200 * time.millisecond)
top_right.resize_down(5)!
time.sleep(1000 * time.millisecond)
println('Resizing bottom-left pane (top) to be narrower...')
bottom_left.select()!
time.sleep(200 * time.millisecond)
bottom_left.resize_left(5)!
time.sleep(1000 * time.millisecond)
println('Resizing bottom-right pane (tail) to be shorter...')
bottom_right.select()!
time.sleep(200 * time.millisecond)
bottom_right.resize_up(3)!
time.sleep(1000 * time.millisecond)
// Demonstrate using the generic resize method
println('Using generic resize method to make top-left pane taller...')
top_left.select()!
time.sleep(200 * time.millisecond)
top_left.resize(direction: 'down', cells: 3)!
time.sleep(1000 * time.millisecond)
}
// Send some commands to make the panes more interesting
println('\n=== Adding Content to Panes ===')
window.scan()!
if window.panes.len >= 4 {
// Send commands to bash pane
mut bash_pane := window.panes[1]
bash_pane.send_command('echo "=== Bash Pane ==="')!
bash_pane.send_command('ls -la')!
bash_pane.send_command('pwd')!
time.sleep(500 * time.millisecond)
// Send command to top pane
mut top_pane := window.panes[2]
top_pane.send_command('echo "=== Top Pane ==="')!
time.sleep(500 * time.millisecond)
}
println('\n=== Final Layout ===')
t.scan()!
println('Session: ${session.name}')
println('Window: ${window.name} (${window.panes.len} panes)')
for i, pane in window.panes {
println(' ${i + 1}. Pane %${pane.id} - ${pane.cmd}')
}
println('\n=== Pane Resize Operations Available ===')
println(' resize_up(cells) - Make pane taller by shrinking pane above')
println(' resize_down(cells) - Make pane taller by shrinking pane below')
println(' resize_left(cells) - Make pane wider by shrinking pane to the left')
println(' resize_right(cells) - Make pane wider by shrinking pane to the right')
println(' resize(direction: "up/down/left/right", cells: N) - Generic resize method')
println('\nExample completed! You can attach to the session with:')
println(' tmux attach-session -t resize_demo')
println('\nThen use Ctrl+B followed by arrow keys to manually resize panes,')
println('or Ctrl+B followed by Alt+arrow keys for larger resize steps.')