Skip to content

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
}