osal.screen #
Screen
The Screen module provides a V interface to manage GNU Screen sessions.
Example Script
Create a file screen_example.vsh
:
#!/usr/bin/env -S v run
import freeflowuniverse.herolib.osal.screen
// Create a new screen factory
mut sf := screen.new()!
// Add a new screen session
mut s := sf.add(
name: 'myscreen'
cmd: '/bin/bash' // optional, defaults to /bin/bash
start: true // optional, defaults to true
attach: false // optional, defaults to false
)!
// Get session status
status := s.status() or {
println('Error getting status: ${err}')
return
}
// Send a command to the screen session
s.cmd_send('ls -la') or {
println('Error sending command: ${err}')
return
}
// Attach to the session
s.attach() or {
println('Error attaching: ${err}')
return
}
// Kill the screen when done
sf.kill('myscreen') or {
println('Error killing screen: ${err}')
return
}
Basic Screen Commands
#screen -ls
There is a screen on:
3230.test (Detached)
#screen -r test
Testing
vtest ~/code/github/freeflowuniverse/herolib/lib/osal/screen/screen_test.v
fn init_screen_object #
fn init_screen_object(item_ map[string]string) Screen
fn new #
fn new(args ScreensNewArgs) !ScreensFactory
return screen instance
enum ScreenState #
enum ScreenState {
unknown
detached
}
enum ScreenStatus #
enum ScreenStatus {
unknown
active
inactive
}
struct Screen #
@[heap]
struct Screen {
pub mut:
cmd string
name string
pid int
state ScreenState
// factory ?&ScreensFactory @[skip; str: skip]
}
fn (Screen) status #
fn (self Screen) status() !ScreenStatus
Method to check the status of a screen process
fn (Screen) attach #
fn (mut self Screen) attach() !
fn (mut self Screen) scan() ! { mut f:=self.factory or {panic("bug, no factory attached to screen.")} f.scan(false)! }
fn (Screen) cmd_send #
fn (mut self Screen) cmd_send(cmd string) !
fn (Screen) str #
fn (mut self Screen) str() string
struct ScreenAddArgs #
struct ScreenAddArgs {
pub mut:
name string @[requred]
cmd string
reset bool
start bool = true
attach bool
}
struct ScreensFactory #
@[heap]
struct ScreensFactory {
pub mut:
screens []Screen
}
fn (ScreensFactory) scan #
fn (mut self ScreensFactory) scan() !
loads screen screen, populate the object
fn (ScreensFactory) add #
fn (mut self ScreensFactory) add(args_ ScreenAddArgs) !Screen
print list of screen screens
fn (ScreensFactory) exists #
fn (mut self ScreensFactory) exists(name string) bool
print list of screen screens
fn (ScreensFactory) get #
fn (mut self ScreensFactory) get(name string) !Screen
fn (ScreensFactory) start #
fn (mut self ScreensFactory) start(name string) !
fn (ScreensFactory) kill #
fn (mut self ScreensFactory) kill(name string) !
fn (ScreensFactory) reset #
fn (mut self ScreensFactory) reset() !
print list of screen screens
fn (ScreensFactory) str #
fn (mut self ScreensFactory) str() string
struct ScreensNewArgs #
@[params]
struct ScreensNewArgs {
pub:
reset bool
}